| UI or UX | UX - Actionless blank-state anti-pattern | UI + UX - Resolved no-data content surface | UI + UX - Search recovery state | UI + UX - Recoverable failure surface |
| UI guidance | A dead-end empty state is visible as blank space, vague art, hidden filters, disabled mystery controls, or an empty table body with no object name, cause, or action. | Render a resolved no-data region with a specific heading, cause text, one primary action when available, optional secondary path, and restrained illustration or icon support. | Render zero-result copy, active criteria, remove-filter actions, and alternative suggestions. | Render a persistent error region near the affected content with a specific failure heading, plain-language cause, preserved context, and recovery actions. |
| UX guidance | Diagnose why the surface is empty before choosing copy or controls: first-use, configured-empty, filtered, permission-limited, failed, loading, deleted, or unavailable. | Help users distinguish legitimate absence from loading, no-results, error, permission, and setup conditions before offering a next step. | Help users recover when their own search or filters excluded all results. | Help users recover when expected loading, saving, validation, sync, permission, or computation fails without losing their work. |
| Good UI | A replacement state names No projects yet, explains the workspace has no projects, and offers Create project or Import CSV only when permitted. | No projects yet heading, short explanation, Create project primary button, Import CSV secondary button, and visible workspace context. | Zero-result state shows query/filters, result count, and clear or broaden actions. | Reports could not load appears in the report section with the saved filter, Retry, Use cached data, and Contact support actions. |
| Bad UI | An empty table body with pale placeholder lines and no label. | A blank white table body with no text, object name, or action. | No results text alone with no criteria shown. | Tiny transient toast for a blocking failure. |
| Good UX | Users can classify the absence and take the correct path: create, import, clear filters, request access, retry, restore, or leave safely. | Users can create the first project, import existing work, or request access depending on the actual cause. | Users can remove one filter, clear all, edit query, or try suggested alternatives. | User input and filter context are preserved after failure, and retry returns to recovered content or a clear still-failed state. |
| Bad UX | Users cannot tell whether content is still loading, filtered out, unavailable, failed, or nonexistent. | The same empty message appears for loading, search no-results, permission denial, and service failure. | Telling users nothing exists when filters caused the state. | Clearing work after save failure. |
| Best fit | Auditing generated UIs, dashboards, tables, lists, or panels for blank states that strand users. | The product area can legitimately contain no user data. | Search, browse, or filter controls can produce an empty result set. | A system or task failure blocks expected content or action. |
| Avoid when | The surface already explains the cause and offers a valid next step. | The absence was caused by filters or search. | There is genuinely no possible next action and the system should instead explain availability. | Nothing exists yet and the state is expected. |
| Required state | Unexplained blank state that is being audited as the anti-pattern. | First-use empty state before any objects exist. | Zero-result state that preserves the user's criteria. | Normal expected state before failure. |
| Accessibility burden | Do not use an unlabeled blank region as the only state announcement. | Keep the message in normal reading order near the empty region it explains. | Announce result-count changes where search results update dynamically. | Use appropriate alert or status semantics for newly appearing critical errors. |
| Common misuse | Blank table body with no heading, count, cause, or action. | Showing a blank page with no explanation. | Showing a blank list with no explanation. | Using a transient toast for critical errors. |