UI + UX Feedback, Status, And System State standard

Step progress

Render a step progress indicator that reports the current workflow-stage status from authoritative state, labels every non-default state, identifies the current step with step semantics, explains blocked or failed stages, and updates only when the underlying proof event changes.

Decision first

Choose this pattern when the problem matches

Use when

  • A workflow has several named stages and users need to understand current, completed, pending, blocked, failed, waiting, or skipped status.
  • Stage completion depends on validation, saved data, upload acceptance, review, authorization, or approval.
  • Users may pause and return later to understand what remains before submission or finish.
  • The status display needs to be visible inside a broader form, wizard, checkout, onboarding, import, or approval flow.

Avoid when

  • The flow has only one or two simple screens and progress status adds no decision value.
  • Users need a full navigation component for moving between pages rather than a status readout.
  • The work is numeric system progress such as bytes, rows, files, or processing percentage.
  • The value is a scalar resource level such as storage, risk, battery, capacity, or quota.
  • The set of stages is so volatile that an honest list cannot be shown without confusing users.

Problem it prevents

Users in a workflow can lose track of which named stages are accepted, blocked, waiting, skipped, or failed when a simple current page label hides status changes that happen after validation, upload, review, or system checks.

Pattern anatomy

What a strong implementation has to make clear

User need

The workflow has named stages whose statuses matter independently of the current page.

Pattern promise

Render a step progress indicator that reports the current workflow-stage status from authoritative state, labels every non-default state, identifies the current step with step semantics, explains blocked or failed stages, and updates only when the underlying proof event changes.

Required state

Not started or pending stage.

Recovery path

Users believe a stage is done because it is green, but the proof event never occurred.

Access contract

Expose the current stage with aria-current="step" or equivalent platform semantics and mark only one step current.

Quality bar

The difference between expert and weak execution

Strong implementation

Specific, visible, recoverable

  • An onboarding status strip shows Profile completed, Documents current, Compliance waiting, Review blocked, and Finish locked with text labels for each state.
  • A checkout side rail marks Shipping saved, Payment failed, Review not available, and Confirmation pending while the page heading says Step 3 of 5: Payment.
  • After the user uploads a document, Documents changes to Waiting for review instead of Complete until the file scan and reviewer check pass.
  • A dependent Tax details step appears only after the user selects self-employed and is announced as an inserted required step without making earlier counts look wrong.
Weak implementation

Vague, hidden, hard to recover from

  • All visited steps turn green even though required documents failed server validation.
  • Future segments look like active buttons but do nothing or silently jump over prerequisites.
  • The step progress says Review ready while the address step contains unsaved edits that would change shipping tax.
  • A skipped optional step is hidden from the sequence, so users cannot tell why the total count changed.
UI guidance
  • Show a compact ordered status readout for named stages with distinct completed, current, pending, blocked, skipped, waiting, and failed treatments that include text or icon cues beyond color.
  • Pair the visual step strip with a nearby status sentence such as Step 3 of 6, Documents waiting for review, so compact or icon-only variants still communicate the current stage.
UX guidance
  • Use step progress when users need to monitor how a workflow is advancing across named stages and which proof event changed each stage, especially when some stages depend on validation, review, upload, or approval.
  • Keep stage status synchronized with saved data and backend events; never treat visiting a step, scrolling past a section, or clicking Next as completion unless the required work was accepted.
Implementation contract

What the implementation must handle

States

  • Not started or pending stage.
  • Current stage with aria-current step or equivalent current-step semantics.
  • Completed stage with the proof event reflected in text.
  • Waiting stage for review, scan, authorization, approval, or another external event.

Interaction

  • The indicator reads from the same workflow state that controls route availability, validation, saved answers, and submission gates.
  • Only one step is current at a time and the current item is exposed with current-step semantics.
  • Completed stages retain enough text to explain what proof made them complete, such as Saved, Accepted, Approved, or Authorized.
  • Blocked and failed stages expose the reason and recovery path instead of relying on a red segment alone.

Accessibility

  • Expose the current stage with aria-current="step" or equivalent platform semantics and mark only one step current.
  • Use clear labels for each step and include status text such as Completed, Current, Waiting, Blocked, Failed, Skipped, or Cannot start yet.
  • Do not rely on color alone; status icons, text, and accessible names must communicate the same state.
  • If unavailable stages are visible, explain why they cannot start and avoid disabled styling that removes necessary context.

Review

  • What event proves each stage is complete?
  • Is this indicator reporting status, enabling navigation, or trying to do both?
  • Which stage owns each validation error, failed check, waiting review, and retry action?
  • Can users tell the difference between pending, blocked, waiting, skipped, and failed without color?
Interactive lab

Inspect the states before you copy the pattern

Track workflow stage status

Move an onboarding flow through saved, current, waiting, blocked, failed, skipped, inserted, and compact states; compare proof-based completion with visited, color-only, percent-bar, and stale-step misuse.

Step progress
Interactive demo is ready

Launch the live UI/UX lab when you want to inspect states, keyboard behavior, and common failure modes.

State To Inspect

Not started or pending stage.

Keyboard / Access

Read-only step progress is skipped in the tab order unless a segment exposes details or help.

Avoid Generating

Treating visited pages as completed stages.

Evidence trail

Source-backed claims behind this guidance

USWDS Step indicator

U.S. Web Design System - checked

USWDS supports multi-step progress indicators with completed, current, and not-completed states, separate navigation, explicit headings, short labels, and linear-process boundaries.

Carbon Progress indicator

IBM Carbon Design System - checked

Carbon supports progress indicators with current, completed, future, optional, disabled, invalid, and error states for linear multistep workflows.

MDN aria-current Attribute

MDN Web Docs - checked

MDN supports aria-current="step" for current-step semantics and the rule that only one item in a related set should be marked current.

SAP Fiori for Android Step Progress Indicator

SAP Fiori Design System - checked

SAP Fiori supports mobile step progress indicators with short labels, dynamic dependent steps, and guidance not to count dynamic steps in totals prematurely.

Full agent/debug reference

Problem Context

  • The workflow has named stages whose statuses matter independently of the current page.
  • Some stages may wait on validation, document review, payment authorization, eligibility checks, approval, or background processing.
  • Users may return later and need a snapshot of what is done, what is current, what is blocked, and what cannot start yet.
  • The product may show the indicator inside a broader form, wizard, checkout, import, onboarding, or approval flow without making the indicator own the whole flow.

Selection Rules

  • Choose step progress when users need status for named workflow stages, not only a route position.
  • Mark a stage complete only after saved data, accepted upload, passed validation, approved review, or another defined proof event exists.
  • Use waiting status when a stage is in progress outside the current page, such as document scan, compliance review, payment authorization, or approval.
  • Use blocked or cannot-start status when a future stage depends on a prior answer, upload, permission, or system check, and provide the reason nearby.
  • Use skipped status for optional or inapplicable stages so users can distinguish deliberate omission from missing work.
  • Use failed status on the stage that owns the failure and keep recovery actions close to the failed stage or current page.
  • Use step navigation when the indicator is primarily how users move between pages in a linear journey.
  • Use progress bar when the underlying progress is numeric system work with a reliable total.
  • Use meter when users need to interpret a current value inside a bounded range.
  • Avoid fixed totals when dependent stages can appear or disappear; disclose inserted stages or show required versus optional groups.

Required States

  • Not started or pending stage.
  • Current stage with aria-current step or equivalent current-step semantics.
  • Completed stage with the proof event reflected in text.
  • Waiting stage for review, scan, authorization, approval, or another external event.
  • Blocked or cannot-start stage with a visible reason.
  • Failed stage with recovery route or retry action.
  • Skipped or not-applicable stage for deliberate omissions.
  • Dynamic dependent stage inserted after a qualifying answer.
  • Compact responsive state that preserves current step and total or remaining context.

Interaction Contract

  • The indicator reads from the same workflow state that controls route availability, validation, saved answers, and submission gates.
  • Only one step is current at a time and the current item is exposed with current-step semantics.
  • Completed stages retain enough text to explain what proof made them complete, such as Saved, Accepted, Approved, or Authorized.
  • Blocked and failed stages expose the reason and recovery path instead of relying on a red segment alone.
  • If the indicator is read-only, segments do not look clickable; if segments are navigable, unavailable stages explain why they cannot open.
  • Dynamic or conditional stages do not silently rewrite history; newly required stages are introduced with text that explains why they appeared.
  • Status changes are announced at meaningful transitions such as failed, ready, waiting, unblocked, or complete.

Implementation Checklist

  • Define each stage ID, label, status vocabulary, proof event, owning route, recovery action, and dependency before rendering the indicator.
  • Represent steps as an ordered list or equivalent semantic structure and expose the current step with aria-current="step" when appropriate.
  • Keep the current step label, page heading, saved state, and route state synchronized after every Continue, Back, retry, upload, review, and background event.
  • Pair icons and colors with text labels such as Complete, Current, Waiting, Blocked, Failed, Skipped, or Cannot start yet.
  • Make read-only segments visually noninteractive, or implement keyboard focus and activation only for stages that users can actually open.
  • Handle conditional stages by grouping them, inserting them with a reason, or excluding them from the total until they are required.
  • Test revisiting after refresh, failed server validation, asynchronous completion, optional-stage skipping, inserted dependent stages, narrow layouts, keyboard traversal, and screen-reader announcements.

Common Generated-UI Mistakes

  • Treating visited pages as completed stages.
  • Using the indicator as the only page heading or only explanation of current status.
  • Showing all future stages as clickable when prerequisites are missing.
  • Hiding blocked, waiting, skipped, or failed states behind color alone.
  • Using a percent progress bar for named workflow stages.
  • Changing the total number of steps without explaining the dependent condition.
  • Letting the visual step status drift from saved answers, server validation, or route state.

Critique Questions

  • What event proves each stage is complete?
  • Is this indicator reporting status, enabling navigation, or trying to do both?
  • Which stage owns each validation error, failed check, waiting review, and retry action?
  • Can users tell the difference between pending, blocked, waiting, skipped, and failed without color?
  • How will conditional stages appear without making the total feel dishonest?
  • Does the page heading, route, focus target, and current-step status all identify the same stage?
Accessibility
  • Expose the current stage with aria-current="step" or equivalent platform semantics and mark only one step current.
  • Use clear labels for each step and include status text such as Completed, Current, Waiting, Blocked, Failed, Skipped, or Cannot start yet.
  • Do not rely on color alone; status icons, text, and accessible names must communicate the same state.
  • If unavailable stages are visible, explain why they cannot start and avoid disabled styling that removes necessary context.
  • Announce meaningful stage-status changes with a status region or page-level message without interrupting every minor background tick.
  • Keep focus behavior predictable after status changes; move focus to the current heading or recovery action only when the workflow changes page or error ownership.
Keyboard Behavior
  • Read-only step progress is skipped in the tab order unless a segment exposes details or help.
  • Interactive completed or available stages are reachable in logical order with visible focus and descriptive labels.
  • Unavailable stages are either not focusable or are focusable only when the explanation is useful and clearly announced.
  • Retry, review, upload, authorize, and fix actions for failed or blocked stages appear in normal tab order near the affected status.
  • After a stage becomes current, focus moves to the page heading or first required control according to the owning flow.
Variants
  • Read-only step status strip
  • Interactive progress stepper
  • Vertical stage timeline
  • Mobile compact step progress
  • Waiting-review step progress
  • Blocked-stage progress
  • Failed-step progress
  • Skipped optional-step progress
  • Dynamic dependent-step progress
  • Checkout progress status

Verification

Last verified: