| UI or UX | UI + UX - Grouped filter control panel for narrowing a current result set | UI + UX - Filter and results exploration surface | UI + UX - Search recovery state |
| UI guidance | Render filter categories as labelled form controls in a panel adjacent to the result set on wide layouts, with a visible result count and active-filter summary near the results. | Render filter controls, active chips, counts, result list, clear controls, and no-results state. | Render zero-result copy, active criteria, remove-filter actions, and alternative suggestions. |
| UX guidance | Use a filter panel to help users narrow the current list or search result set while preserving orientation, search query, sort order, pagination context, and selected values. | Help users progressively narrow a large result set without losing orientation. | Help users recover when their own search or filters excluded all results. |
| Good UI | A desktop search page shows a left filter panel with Status, Type, and Date groups, while active chips and the result count sit above the results. | Facet groups, counts, selected chips, result count, and clear controls are visually grouped. | Zero-result state shows query/filters, result count, and clear or broaden actions. |
| Bad UI | A filter drawer closes with no active count, leaving users unaware that filters are still hiding records. | Facet panel overwhelms the results with dense unchecked options. | No results text alone with no criteria shown. |
| Good UX | A user selects Status: Open and Type: Appeal, applies the batch, lands back at the result summary, and sees 12 records with both criteria removable. | Users can add, remove, combine, and clear facets while understanding result count changes. | Users can remove one filter, clear all, edit query, or try suggested alternatives. |
| Bad UX | Applying a filter silently resets the query, sort order, current page, and view density. | Changing filters resets unrelated query or sort silently. | Telling users nothing exists when filters caused the state. |
| Best fit | Users need to narrow the current search results, browse results, table, card grid, or list by multiple criteria. | The data set has structured attributes users understand. | Search, browse, or filter controls can produce an empty result set. |
| Avoid when | The result set is small enough that scanning is faster than filtering. | The result set is small enough that filtering adds complexity. | There is genuinely no possible next action and the system should instead explain availability. |
| Required state | Default state with no user-applied filters and an explicit result count. | Unfiltered state with result count and available facets. | Zero-result state that preserves the user's criteria. |
| Accessibility burden | Use semantic form controls with fieldsets, legends, labels, and accessible names for filter categories and values. | Applied filters should be announced and removable without pointer-only interaction. | Announce result-count changes where search results update dynamically. |
| Common misuse | Hiding active filters inside a closed panel with no count, chips, or result-state summary. | Using internal database labels as facets. | Showing a blank list with no explanation. |