Zero-count facet values should be disabled, not hidden
Aliases: grayed-out facets · zero-count visibility · empty facet values
What it is
When a value has zero hits under the current constraints, it must not be clickable—and it also must not vanish from the list. Disabling zero-count facet values keeps the category visible: people still see that Brand X belongs to this facet; the path is simply closed for now, usually greyed out and marked 0. Hiding it makes them think the category never existed, or that they misremembered the collection.
This is not the same design as “do not let people compose an empty set.” That claim cares whether a combination can be walked to completion, and suppression may disable or remove. Here the choice is fixed: disable. What is at stake is whether the category remains a navigational landmark. Temporarily out of stock, or cut to empty by other constraints, the landmark should still sit in the list.
Why it happens
A facet list does two jobs: it says “where you can still go,” and it says “which values exist in this world.” A count of zero turns off the first job; it should not demolish the second. People build a model of the collection from the completeness of the list—having seen red / blue / green, they read green-at-0 as “none today.” If green evaporates, the model becomes “they don’t sell green,” and later tasks change wording or switch facets.
Hiding also wrecks scan stability. Values jump around as constraints change, so the eye cannot check the same slot for “is the one I want still there.” Disabling keeps the slot and confines change to state (clickable or not) and number (N or 0). Working memory updates reachability; it does not have to rebuild the roster of categories.
Studying it
Treat “grey out, leave in place” and “remove from the list” as two different navigation signals, not as two implementations of the same suppression.
- Paradigms: one facet set; one condition greys zero-count values and keeps the 0, the other does not render them; tasks include “confirm that a known brand is still in this category.” Hearst’s discussions of facet usability treat visible empty values as landmarks, not as noise.
- Independent variables: presentation of zero-count items (disable vs hide), whether 0 is shown, whether hiding compresses list order.
- Dependent variables: false beliefs that the category does not include the value, undo steps needed to recover it, time to scan the same facet, attributions of “the system broke.”
- Methodological note: the question is the category model, not how often people enter an empty set. Walking into empty is a different issue. If the lab uses fictitious brands the participant never knew, hiding’s harm is underestimated—the damage happens when people already know the value ought to exist.
Where it stops holding
When the value cardinality is huge (every brand on earth, every author), keeping every zero-count item makes the list unscannable. Stratify: current non-zero values plus recently used zeros—not hide-all or keep-all. Logically impossible combinations (the classification fighting itself) differ from out-of-stock zeros: the former is a model bug and need not occupy a navigation slot forever; the latter is what disabling is for. In assistive technology, a disabled control must still be announced with a reason; otherwise disable equals hide.
Applying it
- After each constraint change, recompute counts. At zero, grey the value out, make it unclickable, and keep the label. Do not pull it from the DOM.
- Mark 0, or “no overlap with current filters,” so the state is not read as a broken control.
- On long facets, sink zeros to the bottom or into a “currently unavailable” group; still allow find-in-list to reach them.
- Verify by letting someone see a brand as clickable, then adding a constraint that cuts it to 0. The brand should remain on the same facet, merely unclickable. If it cannot be found and they say “I guess they don’t sell that brand,” hiding went too far.