G3.09.2sort-filter independencedesignresearch

Sort and filter are independent operations and must not reset each other

Aliases: orthogonal sort and filter · no sort-filter reset · stacked constraints

What it is

Sort changes order inside a set; filter changes membership of the set. The two are orthogonal: they must not reset each other. Switching to “by time” must not clear “unread only” already ticked; ticking another filter must not bounce sort back to the default. People treat them as two stackable layers of constraint; if either layer is silently zeroed by the other, the labor of stacking is wasted. Hearst writes sort and facets as controls that can be present together, which presupposes that neither wipes the other’s state.

Independence is the state machine inside one viewing, not whether filter and sort survive a round-trip to another page—that is a different navigation-state problem. Here the only demand is: on the result page, moving one leaves the other in place.

Why it happens

Finding stacks constraints. Filter first shrinks the set to “unread tickets,” then sort orders that subset by update time. If a sort change is implemented as rerunning a “new query” whose initializer sets filters empty, stacking has been modeled as mutually exclusive modes. Nothing on the control labels predicts that exclusion: both widgets are still there, only one value was cleared, and discovery waits until the list suddenly lengthens or scrambles.

Reset is also asymmetric. When filters change, someone may think “the set changed, sort should go back to relevance,” and bounce sort to default on purpose. For a person debugging by time, that is lost context: they wanted “newest inside this subset.” Default sort is not neutral; returning it as a gift after filtering denies the order choice just made. The two control lines should be independent state: query, filters, sort—change one, keep the other two.

Studying it

Build tasks that require both filter and sort, and watch whether changing one leaves the other on.

  • Paradigms: a known item that lives in the intersection of a filter and a non-default sort; set both layers, then deliberately change one, record whether the other is cleared; in logs, events of “sort change, filter chips vanish” or “add filter, sort param returns to default.” Hearst’s SUI treats the two controls as stackable.
  • Independent variables: whether changing sort rebuilds the query, whether changing filters resets the sort param, whether the URL encodes the two layers separately.
  • Dependent variables: count of surprise resets, time spent rebuilding the cleared layer, rate of giving up on stacking.
  • Methodological note: tasks that need only one layer never see the conflict. Gold-standard “the newest unread one,” which must stack. Mobile “Apply filters” often refreshes the whole page; defaulting after refresh will be treated as a feature rather than a defect unless the protocol writes “keep sort” as expected.

Where it stops holding

When a sort becomes meaningless after a filter (sort by distance while the filter has locked location to one value), prompt and suggest changing sort; do not silently clear the filter. Switching result type (products to stores) may make both layers inapplicable; that is a scope switch and should say “filters and sort were reset for the new type,” not pretend independence on the same collection. When the user clears the query themselves, what filters and sort follow is a product choice; keeping them is still the better default unless the collection has been replaced. If a forced reset happens, it must be undoable.

Applying it

  • Model query, filters, and sort as three independent parameters; a change to one recomputes the list and does not initialize the other two.
  • Encode the two layers separately in the URL or session so refresh, share, and back each restore both.
  • If the implementation must reload the page, read back the chips and the sort option from before the reload; do not take the default initializer.
  • Verify by ticking two filters, switching to a non-default sort, changing sort once more, then adding a filter. If any step drops chips or bounces sort to default, the layers are not independent. Send or refresh the page; both layers should still be there.

Related

  • Within the group: G3.09.1 The current sort must be visible · G3.09.3 The default sort determines what most users will ever see
  • Adjacent: G3.08 Filters · G3.05 Result ranking · G4.03 State persistence
  • Search terms: sort control · filter state · orthogonal controls

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/G3.09.2