Interface Lab
Back to knowledge
Design Systems Page Patterns

Progressive Disclosure for Complexity

Complex settings, forms, and admin pages should expose common tasks first, then place advanced, risky, rare, or conditional options in predictable secondary paths.

Design Principle

Progressive disclosure is not hiding things. It sequences visibility by task, risk, and frequency so novices make fewer errors while expert users can still find advanced controls.

Large Theory

Complex products often place all settings, permissions, integrations, billing, notifications, export, automation, and dangerous actions on one page. Users cannot understand the page and are more likely to make mistakes. Progressive disclosure separates the interface into main path, conditional expansion, detail panel, advanced area, and danger zone so users complete common tasks first and enter deeper control only when needed.

Small Points

  1. Layer by task frequency first: primary everyday, secondary occasional, advanced rare, and dangerous irreversible.
  2. Disclosure triggers should say what is inside; advanced notification rules has stronger information scent than more settings.
  3. Conditional fields preserve parent/child relationships: changing the parent reveals child fields and explains why they appear or disappear.
  4. High-risk operations are not merely hidden in an accordion; they need an independent danger zone, confirmation, impact preview, permission hints, and audit reason.
  5. Disclosure state should be recoverable through URL, local state, or saved state so users can continue work after returning.
  6. Mobile disclosure should limit nesting depth; accordion inside accordion can make users lose their path.

Design Judgment

Progressive disclosure is healthy when the default screen handles most common tasks, expert users can find deep controls through explicit paths, and dangerous actions show impact, permission, and confirmation before execution.

Implementation Notes

Create a disclosure model: section, taskFrequency, riskLevel, defaultVisible, triggerLabel, expandedState, dependsOn, saveBoundary, permissionRequired, impactPreview, and auditRequired. In settings pages, use left section navigation and clear headings for major categories; use disclosure/accordion for ordinary advanced options; use detail panels for cross-object impact; keep danger zones visually and procedurally separate. In forms, conditional fields follow their parent field and explain whether hiding them clears child values.

Counterexamples/Risks

All settings are expanded into one very long page; common options are hidden under Advanced; account deletion looks like ordinary preferences inside an accordion; conditional fields appear without explanation; errors are hidden inside collapsed sections; mobile users get three nested drawers and no clear return path.

Case Study

NN/g defines progressive disclosure as deferring advanced or rarely used features to a secondary interface to reduce learning cost and errors. Carbon patterns for read-only, empty, and loading states show that complex state needs clear expression, not only control visibility. Product patterns in GitHub settings, Atlassian admin, and Polaris admin commonly separate ordinary settings, permissions, billing, integrations, and danger zones. The reusable lesson is that disclosure levels express frequency, risk, and state together, not just visual collapse.

Source Links

NN/g Progressive Disclosure: https://www.nngroup.com/articles/progressive-disclosure/ Carbon Read-only States: https://carbondesignsystem.com/patterns/read-only-states-pattern/ Carbon Empty States: https://carbondesignsystem.com/patterns/empty-states-pattern/ GitHub Repository Settings: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings

Agent Directive

Before generating complex settings or long forms, output a disclosure model marking default-visible, advanced, conditional, dangerous, and permission-gated controls; errors, save state, and return state must not be hidden by collapse.