Quality check · lesson 28 of 30 · Feedback, Status, And System State

Dead-end empty state

Underlying principle: Status connects an action to a real system event. A useful message names the current state, its consequence, and the next available action.

Diagnose why the surface is empty before choosing copy or controls: first-use, configured-empty, filtered, permission-limited, failed, loading, deleted, or unavailable.

Start with the decision

Does this fit your task?

Auditing generated UIs, dashboards, tables, lists, or panels for blank states that strand users.

Review the boundary: Compare the task with the alternatives in the decision section.

Review the decision →
Study the interaction

Follow the task before choosing the component

Status connects an action to a real system event. A useful message names the current state, its consequence, and the next available action.

01 / Recognize the need

What the person is doing

Users need enough context to decide whether to create, import, clear criteria, request access, retry, restore, or leave.

02 / Design the response

What the interface must communicate

Diagnose why the surface is empty before choosing copy or controls: first-use, configured-empty, filtered, permission-limited, failed, loading, deleted, or unavailable.

Unexplained blank state that is being audited as the anti-pattern.

03 / Judge the outcome

What to look for

Can users name what is absent after reading this state?

The replacement state must name what is absent and why the system believes it is absent.

Decision first

Choose this pattern when the problem matches

Use when

  • Auditing generated UIs, dashboards, tables, lists, or panels for blank states that strand users.

Avoid when

  • The surface already explains the cause and offers a valid next step.
  • The product intentionally hides the existence of data for privacy or safety and provides safe navigation or explanation.
  • The state is transient loading with clear progress, timeout, or cancellation behavior.

Problem it prevents

Users need enough context to decide whether to create, import, clear criteria, request access, retry, restore, or leave.

Test the behavior

Try strong and weak versions of the interaction

Open the working example, try its controls, and compare the behavior against the decision guidance.

In the lab you can
  • switch between strong UI, weak UI, strong UX, and weak UX;
  • trigger required, empty, loading, error, and recovery states;
  • inspect keyboard and accessibility expectations beside the demo.
Launch Dead-end empty state in the lab
Pattern anatomy

What a strong implementation has to make clear

User need

Users need enough context to decide whether to create, import, clear criteria, request access, retry, restore, or leave.

Pattern promise

Diagnose why the surface is empty before choosing copy or controls: first-use, configured-empty, filtered, permission-limited, failed, loading, deleted, or unavailable.

Required state

Unexplained blank state that is being audited as the anti-pattern.

Failure to inspect

Wrong replacement pattern for the cause.

Access contract

Keep the cause, affected object, and recovery controls in normal reading order.

Quality bar

The difference between expert and weak execution

Strong implementation

Specific, visible, recoverable

  • A filtered blank state keeps filter chips visible and offers Remove archived filter and Clear all filters.
  • Users can classify the absence and take the correct path: create, import, clear filters, request access, retry, restore, or leave safely.
  • When an item is deleted and the list becomes empty, focus moves to a recovery state with undo or next navigation instead of an inert void.
Weak implementation

Vague, hidden, hard to recover from

  • The only visible action fails because the current user lacks permission.
  • A failed API request is silently rendered as an empty dashboard.
  • Wrong replacement pattern for the cause.
  • Permission-blind action that fails after click.
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.
  • Replace it with a cause-specific state that keeps surrounding context visible and presents a valid action, recovery path, permission explanation, or safe escape.
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.
  • Prevent users from getting stranded by ensuring every resolved empty state either changes the system, changes criteria, requests access, retries, restores, or explains why no action exists.
Implementation contract

What the implementation must handle

States

  • Unexplained blank state that is being audited as the anti-pattern.
  • Diagnosed first-use or legitimate absence state with object-specific copy and valid action.
  • Permission or prerequisite state with explanation and request/setup path.
  • Failure state with retry, fallback, or support path.

Interaction

  • The replacement state must name what is absent and why the system believes it is absent.
  • The next action must be available to the current user or replaced with a permission/prerequisite explanation.
  • If the cause is uncertain, the UI should show loading, retry, or diagnostic recovery instead of pretending the area is empty.
  • The state must update when content appears, criteria are cleared, access changes, or retry succeeds.

Accessibility

  • Keep the cause, affected object, and recovery controls in normal reading order.
  • Move focus to a useful heading, recovery action, or restored content when the state changes.
  • After clearing criteria, retrying, creating, or requesting access, focus should move to the updated result, confirmation, or still-recoverable state.

Review

  • Can users name what is absent after reading this state?
  • Can users tell whether the cause is first-use, filters, permission, setup, deletion, loading, or failure?
  • Is the visible next action valid for this user and wired to a meaningful state change?
Evidence trail

Source-backed claims behind this guidance

Carbon Design System Empty States Pattern

IBM Carbon Design System - checked

Carbon distinguishes no-data, user-action no-results, and error-management empty states, which helps diagnose dead-end blanks.

Atlassian Design System Empty State

Atlassian Design System - checked

Atlassian documents empty states with explanation, action, and variants for permission, filtered, and error causes.

SAP Fiori Illustrated Message

SAP Fiori - checked

SAP Fiori documents contextual illustrated messages with title, description, optional action, and situation-matched content.

Shopify Polaris Empty State

Shopify Polaris - checked

Polaris documents empty states with focused explanation, illustration, primary action, and optional secondary action.

GOV.UK Design System Patterns

Government Digital Service - checked

GOV.UK service patterns emphasize task progress, recovery, and clear next steps rather than blank terminal states.

Full agent/debug reference

Problem Context

  • A list, table, dashboard, workspace, inbox, or panel can render with no visible items.
  • The product may not yet know whether the cause is first use, filters, permissions, loading failure, deletion, unavailable data, or a hidden prerequisite.
  • Users need enough context to decide whether to create, import, clear criteria, request access, retry, restore, or leave.

Selection Rules

  • Flag dead-end empty state when a blank area lacks a specific object name, cause, and reachable next action.
  • Flag decorative-only empty states when illustration or friendly copy replaces actionable explanation.
  • Flag states that show a primary action the current user cannot perform, because a failed action is still a dead end.
  • Replace with empty state when the absence is legitimate and the user has a setup, create, import, sample, or request-access path.
  • Replace with no-results recovery when visible search, filter, or sort criteria produced zero matches.
  • Replace with error state when expected content failed to load, save, sync, authorize, or compute.
  • Do not mark the state resolved until keyboard, focus, screen-reader reading order, and post-action transition all give users a real path out.

Required States

  • Unexplained blank state that is being audited as the anti-pattern.
  • Diagnosed first-use or legitimate absence state with object-specific copy and valid action.
  • Filtered or searched no-results state with visible criteria and recovery controls.
  • Permission or prerequisite state with explanation and request/setup path.
  • Failure state with retry, fallback, or support path.
  • Escaped or recovered state after the user takes a valid next action.

Interaction Contract

  • A blank or actionless content region is not a valid terminal state.
  • The replacement state must name what is absent and why the system believes it is absent.
  • The next action must be available to the current user or replaced with a permission/prerequisite explanation.
  • If the cause is uncertain, the UI should show loading, retry, or diagnostic recovery instead of pretending the area is empty.
  • Focus should not remain on removed content or an inert blank panel after data changes.
  • The state must update when content appears, criteria are cleared, access changes, or retry succeeds.

Implementation Checklist

  • Track data status separately from rendered item count: loading, empty, no-results, permission, error, and ready.
  • Render the surrounding context such as table title, filter chips, workspace, owner, or object type.
  • Write a cause-specific heading and short explanation before adding illustration.
  • Show one valid primary action or a clear reason no action is available.
  • Do not offer create/import/reset/retry controls unless they are permitted and wired to a state change.
  • Keep keyboard focus in a useful place after the blank region resolves or changes cause.
  • Instrument blank states so repeated dead ends can be found and replaced.

Common Generated-UI Mistakes

  • Blank table body with no heading, count, cause, or action.
  • Friendly illustration plus vague text such as Nothing here yet with no task path.
  • Create button shown to a read-only user and failing after activation.
  • No-results caused by filters but active criteria are hidden above the fold.
  • Failed load rendered as empty content to avoid showing an error.
  • A removed item leaves keyboard focus on a now-empty region with nowhere to go.

Critique Questions

  • Can users name what is absent after reading this state?
  • Can users tell whether the cause is first-use, filters, permission, setup, deletion, loading, or failure?
  • Is the visible next action valid for this user and wired to a meaningful state change?
  • Would the same blank copy still appear if the cause changed to error or no-results?
Accessibility
  • Do not use an unlabeled blank region as the only state announcement.
  • Keep the cause, affected object, and recovery controls in normal reading order.
  • Move focus to a useful heading, recovery action, or restored content when the state changes.
  • Do not strand keyboard focus on removed rows, disabled mystery controls, or inert illustrations.
Keyboard Behavior
  • Tab order should reach the explanation and the valid recovery action without passing through inert filler.
  • After clearing criteria, retrying, creating, or requesting access, focus should move to the updated result, confirmation, or still-recoverable state.
  • If no action is available, provide a reachable navigation or explanation instead of a keyboard trap.
  • Avoid disabled controls without an adjacent explanation of the missing prerequisite.
Variants
  • Blank dashboard dead end
  • Empty table with no action
  • Permission dead end
  • Filtered dead end
  • Failed-load-as-empty
  • Decorative-only empty state
  • Focus orphan after deletion

Verification

Source trail checked:

Saved items