UI + UX Feedback, Status, And System State anti-pattern

Disabled button with no explanation

Treat the unexplained disabled button as an anti-pattern: make the blocking requirement visible near the action, keep recovery controls reachable, or allow the action and return actionable validation.

Decision first

Choose this pattern when the problem matches

Use when

  • Use this anti-pattern entry to audit disabled submit, continue, create, save, delete, publish, invite, export, payment, and setup actions.
  • Use it when generated UI disables a primary action before explaining the missing requirement or recovery route.

Avoid when

  • The action remains available and returns actionable validation after activation.
  • The unavailable state includes visible, reachable requirement text and a clear way to become eligible.
  • The button is briefly disabled only to prevent duplicate submission and shows active processing feedback.
  • The current user truly has no permission and the UI provides a request-access, owner-contact, or read-only explanation.

Problem it prevents

Users see an unavailable action but cannot tell which field, permission, prerequisite, system state, or safety rule blocks it.

Pattern anatomy

What a strong implementation has to make clear

User need

A form, setup flow, permission model, quota, dependency, or safety gate controls whether an action can run.

Pattern promise

Treat the unexplained disabled button as an anti-pattern: make the blocking requirement visible near the action, keep recovery controls reachable, or allow the action and return actionable validation.

Required state

Unavailable action state with visible reason and affected requirement.

Recovery path

Users cannot tell what to change to proceed.

Access contract

Do not make the only explanation unreachable because the control is disabled, skipped by focus, or hidden behind hover.

Quality bar

The difference between expert and weak execution

Strong implementation

Specific, visible, recoverable

  • Create workspace is paired with visible requirements: enter a workspace name, accept billing terms, and request owner access.
  • A form keeps Continue enabled and, after activation, shows inline messages or an error summary that names each missing answer.
  • Users can satisfy requirements one by one and see the action become available, or submit and receive actionable validation.
  • Permission-gated users can request access or contact an owner instead of guessing at form fields.
Weak implementation

Vague, hidden, hard to recover from

  • Create workspace is greyed out with no nearby text, checklist, or request-access route.
  • A disabled Continue button has a hover-only tooltip that keyboard and touch users cannot open.
  • Users change random fields because the unavailable action never states the missing condition.
  • The button remains inert after requirements are met because the eligibility state is not updated visibly.
UI guidance
  • Replace a lone greyed-out action with visible requirement text, a checklist, permission message, or enabled validation submit that tells users what blocks progress.
  • Keep recovery controls such as edit fields, request access, retry later, contact owner, or use valid details reachable beside the blocked action.
UX guidance
  • Help users understand whether the block is missing input, invalid data, permission, quota, dependency, safety policy, or temporary processing.
  • Turn action availability into a discoverable lifecycle: unavailable with reason, partially eligible, recoverable, eligible, processing, and completed.
Implementation contract

What the implementation must handle

States

  • Unavailable action state with visible reason and affected requirement.
  • Partially eligible state that shows which requirements are complete and which remain.
  • Actionable recovery state such as edit field, accept terms, request access, retry later, or contact owner.
  • Eligible state where the action becomes available or an enabled submit can validate remaining issues.

Interaction

  • Users can discover why the action is unavailable without hovering a disabled control or guessing from color alone.
  • The explanation is adjacent to the action or requirement list, not hidden in a detached tooltip or unrelated help page.
  • Keyboard and assistive technology users can reach the requirement text and any recovery controls even if the unavailable action itself cannot receive focus.
  • Eligibility changes update the visible requirement state and action state in the same region.

Accessibility

  • Do not make the only explanation unreachable because the control is disabled, skipped by focus, or hidden behind hover.
  • Keep requirement text in normal reading order and near the unavailable action.
  • Expose requirement descriptions programmatically when a disabled or aria-disabled control remains visible.
  • Ensure recovery controls such as Request access, Edit field, or Contact owner are keyboard reachable.

Review

  • Can users tell exactly which requirement blocks the action before they try random changes?
  • Can keyboard and screen reader users reach the explanation and recovery path?
  • Is this a field validation problem, a permission problem, a system state, or a safety lock?
  • Would an enabled submit with validation teach the next step better than a disabled button?
Interactive lab

Inspect the states before you copy the pattern

Reveal why an action is blocked

Change requirements and compare a visible blocked-action path with a grey button that gives no next step.

Disabled button with no explanation
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

Unavailable action state with visible reason and affected requirement.

Keyboard / Access

Keyboard users can reach the fields, requirement text, and recovery controls even when the blocked action itself is not focusable.

Avoid Generating

Greying out Continue until every field is valid without showing the missing or invalid answers.

Evidence trail

Source-backed claims behind this guidance

GOV.UK Design System Button Component

GOV.UK Design System - checked

GOV.UK button guidance documents disabled behavior and recommends giving users information about what is happening during slow post-action states.

VA.gov Design System Button

VA.gov Design System - checked

VA.gov button guidance strongly discourages disabled controls except in narrow processing contexts and emphasizes correct button/link use.

Full agent/debug reference

Problem Context

  • A form, setup flow, permission model, quota, dependency, or safety gate controls whether an action can run.
  • The primary action is greyed out, skipped by keyboard focus, or visually present but functionally unavailable.
  • The reason may be a missing field, invalid format, unchecked agreement, insufficient permission, pending system state, or locked account.
  • Users need to know what to change, who can grant access, or when the action will become available.

Selection Rules

  • Flag this anti-pattern when an unavailable action has no visible requirement, cause, owner, or next step near the control.
  • Show a requirement checklist or status message for eligibility gates such as missing name, terms acceptance, permission, quota, setup, or dependency state.
  • Keep the action enabled and validate on activation when users benefit from seeing exactly which fields failed after an attempted submit.
  • Use inline validation when one field has a local correctable problem and the action itself does not need to explain a wider eligibility gate.
  • Use an error summary when a submitted page or step returns multiple validation errors that may be spread across the page.
  • For permission or system locks, show who can resolve the block, whether the user can request access, and what data remains safe.
  • Disable only during short in-progress states such as preventing duplicate submit, and pair that state with visible progress or completion feedback.

Required States

  • Unavailable action state with visible reason and affected requirement.
  • Partially eligible state that shows which requirements are complete and which remain.
  • Actionable recovery state such as edit field, accept terms, request access, retry later, or contact owner.
  • Eligible state where the action becomes available or an enabled submit can validate remaining issues.
  • Submitted or completed state after the action succeeds.
  • Permission-denied or system-locked state with an escalation route.

Interaction Contract

  • Users can discover why the action is unavailable without hovering a disabled control or guessing from color alone.
  • The explanation is adjacent to the action or requirement list, not hidden in a detached tooltip or unrelated help page.
  • Keyboard and assistive technology users can reach the requirement text and any recovery controls even if the unavailable action itself cannot receive focus.
  • Eligibility changes update the visible requirement state and action state in the same region.
  • If submit remains enabled, failed activation preserves user input and moves focus or reading order to actionable validation.
  • Permission locks distinguish missing user input from account, role, quota, dependency, or system constraints.

Implementation Checklist

  • Name the exact condition blocking the action, such as Enter a workspace name, Accept billing terms, or Ask an admin for owner access.
  • Place requirement text, checklist, or field errors before the action or directly beside it.
  • Use enabled submit plus validation when disabling would hide field requirements or prevent users from learning what remains.
  • Use aria-describedby or equivalent relationships for nearby requirement text when an unavailable control remains in the UI.
  • Keep recovery links, request-access controls, edit fields, and support routes keyboard reachable.
  • Avoid hover-only explanations on disabled controls because disabled elements may not receive focus or pointer events consistently.
  • Update the action label or status during short processing states so users know the button is busy, not permanently unavailable.

Common Generated-UI Mistakes

  • Greying out Continue until every field is valid without showing the missing or invalid answers.
  • Putting the only explanation in a tooltip attached to a disabled button that keyboard and touch users cannot open.
  • Using disabled state to hide permission, quota, account lock, or system dependency problems.
  • Changing the button from disabled to enabled silently after a requirement changes elsewhere on the page.
  • Disabling a destructive action without explaining the safety prerequisite or alternate route.
  • Using low contrast disabled styling as the only signal that an action is unavailable.

Critique Questions

  • Can users tell exactly which requirement blocks the action before they try random changes?
  • Can keyboard and screen reader users reach the explanation and recovery path?
  • Is this a field validation problem, a permission problem, a system state, or a safety lock?
  • Would an enabled submit with validation teach the next step better than a disabled button?
  • Does the UI distinguish temporary processing from a longer blocked state?
Accessibility
  • Do not make the only explanation unreachable because the control is disabled, skipped by focus, or hidden behind hover.
  • Keep requirement text in normal reading order and near the unavailable action.
  • Expose requirement descriptions programmatically when a disabled or aria-disabled control remains visible.
  • Ensure recovery controls such as Request access, Edit field, or Contact owner are keyboard reachable.
  • Use sufficient contrast for disabled-looking text that communicates required information.
Keyboard Behavior
  • Keyboard users can reach the fields, requirement text, and recovery controls even when the blocked action itself is not focusable.
  • If an enabled submit is used, Enter or Space activates it and focus moves to inline validation or error summary after failure.
  • When requirements are satisfied, the newly available action appears in a predictable tab order.
  • For permission locks, focus can move to Request access or Contact admin instead of landing on an inert button.
  • Short processing states prevent duplicate activation without trapping focus or erasing the status message.
Variants
  • Disabled submit without requirements
  • Permission-gated disabled action
  • Disabled destructive action
  • Disabled payment button
  • Locked quota action
  • Disabled invite or publish control
  • Hover-only disabled tooltip

Verification

Last verified: