Skip to main content

The problem

Every screen accumulates options over time: a filter someone asked for once, an advanced field that matters for one integration, a setting nine out of ten accounts never touch. Show all of it and the page a new user opens looks nothing like the task they came to do. Hide too much of it, or hide the wrong thing, and the interface has quietly removed a control people actually need — which is worse than cluttering the page, because a hidden-but-needed setting reads as “not supported” rather than “one click away.” Progressive disclosure is not a single control. It is a decision about scope — how much of the page is affected by hiding something — made three different ways depending on that scope: a text link revealing a few more rows of the same list, a collapsible section holding a self-contained block of secondary content, or an entirely separate area reached by its own navigation. Treating all three as interchangeable is how a setting that deserved its own tab ends up buried one click inside an accordion, or a two-field toggle gets promoted to a whole settings screen nobody needed.

Decide first: how much of the page is affected?

The heuristic is testable, not a vibe. Before disclosing anything, name who uses it and how often: “used by fewer than X% of accounts, in fewer than Y% of their sessions” is a claim someone can check against real usage. “This feels advanced” is not.

Vocabulary

When this applies

  • The content is genuinely secondary or advanced, by the heuristic above — not merely “would make the page shorter.”
  • Hiding it does not remove the only way to discover that the capability exists at all.

When it doesn’t

Structure

Behavior

Constraints

Content

Accessibility

A collapsed section is not a hidden one — it is a keyboard- and screen-reader-operable control that happens to be closed. The trigger must be reachable by keyboard and must state, in its accessible name, what it reveals — not “toggle” or “expand,” which say nothing about the content. Accordion’s own documentation does not confirm that aria-expanded is set automatically on the trigger. Its accessibility section states only what the underlying elements provide natively, with no test asserting specific ARIA attributes. Verify this at the call site rather than assuming the component supplies it — the same caution that already applies to wiring aria-controls and id by hand. A validation error inside a collapsed section must force it open, and must be announced. A screen-reader user who submits a form and hears nothing, because the only invalid field is inside a section that stayed collapsed, has no path to the problem — see Form validation.

Variations

Anti-patterns

Disclosure as camouflage for a setting most people need. Burying a control the majority of users touch in most sessions behind a collapsed accordion doesn’t simplify the page — it moves the complexity from “visible” to “undiscoverable,” which is worse. A chevron with no label. An icon-only trigger asks the reader to open something before telling them what it is. The label is what lets them decide whether opening it is worth the click. A validation error hidden inside a collapsed section. A form that reports “something is wrong” without opening the section containing the actual invalid field sends the reader hunting through every collapsed area to find it. Reinventing “only one open at a time” per screen. Accordion ships with no group behavior, so every list of mutually exclusive sections either gets this built fresh or gets left without it — a smaller version of the same duplication already recorded for skeleton screens (see Known issues).

Known issues

Gaps in the current rules

  • Whether disclosure state should persist across a page reload or a later session — Behavior already flags this as undecided rather than guessing.
  • What the actual usage threshold is behind “a minority of users in a minority of sessions” — the heuristic is stated as testable, but no specific percentage is set anywhere in Titan.
  • Whether a “Show more” link’s revealed rows should animate into place or simply appear, and whether that differs from an Accordion’s own expand transition.

Why it works this way

The three disclosure mechanisms are matched to scope, not to preference, because the cost of getting the scope wrong is different in each direction. Using an Accordion for what should be its own settings tab hides an entire area behind a control a reader might never notice was there. Using a settings tab for two fields sends the reader on a navigation for something that fit in the space of a single click. The heuristic is written to be checkable, because “this feels advanced” is exactly the kind of claim that never gets revisited. A stated threshold — a percentage of accounts, a percentage of sessions — is either true or it isn’t, and can be re-measured as usage changes; a feeling has no such correction. Accordion, the component this pattern’s collapsible-section variant composes. Tabs, for the settings-tab variant when the secondary area is large enough to be its own screen. Form validation, for the validation-error exception to the collapsed-by-default rule.

Status

First-pass proposal, not established policy. No audited Invoca screen backs this page — Titan’s design library was not available while writing it. It is built from general interaction-design practice and from what Accordion already establishes. Treat every threshold below as a starting point to check against real product screens, not as a rule already enforced.
Last modified on September 17, 2026