Progressive Disclosure Without Hiding the Product
Revealing complexity in stages helps, until the user cannot find the thing they need.
Thicket makes email automation for online shops. Its campaign editor once showed 30 settings on one screen. After a redesign it shows four, with the rest behind a link called Advanced. Support tickets about confusion drop. Six months later, a different problem: nobody is using send-time optimisation, the feature the team considers their edge. It lives under Advanced, three panels deep.
progressive disclosure: Showing the few controls most people need, and keeping the rest one step away. worked exactly as designed, and the design was wrong. Hiding is a cost as well as a benefit, and teams usually only account for the benefit.
Collapsing without burying
The principle, and the constraint
The idea is old and well supported. Carroll and Carrithers published work in 1984 on training wheels interfaces, where blocking access to advanced functions helped novices learn a word processor faster and with fewer errors. Nielsen's work at NN Group makes the same argument for staging complexity: show the small set that covers the common case, keep the rest one step away.
The constraint is discoverability. Don Norman's central worry in The Design of Everyday Things is that people cannot use what they cannot find, and a control that leaves no trace on the screen has been removed from the product for practical purposes. The job is choosing what to stage, and leaving a visible handle on what you staged.
Deciding what to disclose later
- Frequency
- Used in most sessions, keep it visible. Used a few times a year, stage it. Look at real event data rather than intuition; teams badly overestimate how often advanced settings are touched and underestimate how often one specific advanced setting is.
- Consequence
- A setting that can break a live campaign needs to be findable when someone is debugging, even if it is rarely changed. Rare and important is a different case from rare and trivial.
- Whether it changes the outcome
- If a hidden option would substantially improve the result the user gets, hiding it is quietly making their work worse. Surface it as a suggestion at the moment it applies.
Disclosure that hides
- Advanced
- More options
- Settings
- Show 26 more fields
Disclosure that signposts
- Delivery timing (currently: send immediately)
- Audience filters (2 active: Bought in last 90 days, Not in Lapsed)
- Sending domain, unsubscribe text, reply-to address
- Send-time optimisation: we can send each contact at the hour they usually open. Turn on
Every string in the right column does two things a generic label cannot: it says what lives in there, and it reports the current state. Delivery timing (currently: send immediately) means a user debugging a badly timed campaign knows where to look without opening anything. Advanced means they have to go fishing.
The last row is the most useful pattern. Instead of waiting to be discovered, a staged feature can appear as a one-line offer at the moment it is relevant, with its benefit stated. This is not a tour and it is not a tooltip that fires on load. It is a contextual suggestion sitting next to the setting it would change.
Worked example
Thicket fixes it without un-hiding everything
They keep Advanced collapsed, but rename the sections and add state. Delivery timing moves out of Advanced and onto the main panel as a single row reading Send: immediately, with a link, Optimise per contact. The campaign preview then shows a second line: With optimisation, 60% of this list would receive it between 7 and 9am. Adoption of send-time optimisation goes from 3 percent of campaigns to 41 percent. The editor still shows four primary settings.
Failure modes to watch
- Accordion soup. Eight collapsed sections is not simpler than one long page, it is a long page you have to open eight times and cannot search with Ctrl+F.
- Hiding state. Collapsing a section that contains an active setting means the user cannot see what is configured. Always show the count or the current value on the header.
- Staging for the wrong user. If a setting is advanced for a first-time user and routine for a returning one, the split should follow the user, not the feature. Remember expanded sections.
- Using disclosure to avoid deciding. Twelve settings behind a link is often twelve settings nobody was willing to make a default for.
The last one is the real trap. Progressive disclosure is sometimes used to dodge the harder work of picking good defaults and deleting options. If Advanced keeps growing, the panel is not the problem.
Quick check
Why is Delivery timing (currently: send immediately) better than a section labelled Advanced?
The takeaway
Stage complexity by frequency and consequence, and label every collapsed section with what is inside and what it is currently set to.
Try this tomorrow
Rename every collapsed section in one screen so the header states its contents and current value, and move any rarely-changed but high-consequence setting into view.
Answer the check above, then bank the day.
Where this comes from
- Training wheels in a user interface (1984), John Carroll and Caroline Carrithers
- Progressive Disclosure, Jakob Nielsen, NN Group
- The Design of Everyday Things, Don Norman
Craft is one of six tracks. These lessons summarise and build on the work above, they do not reproduce it. Buy the books, they are better.
