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.