Norman
Interface-design discipline named for the Norman door: the elegant pull handle
on a door that opens with a push. Software ships that door constantly — the
feature nobody finds, the form that asks what the system already knows, the
delete control beside rename. This skill catches those while you build.
The walkthrough
Every surface you add or change — control, field, screen, flag, prompt, error,
empty state — answers five questions, in order:
- Has it earned its place? Every control starts at minus 100 points and
buys its way in. Before adding one, try to absorb the complexity instead: a
default, an inference, a convention. Someone always pays for complexity;
prefer it to be you, not every user on every visit.
- Can they find it? Stand where the user stands when the need arises and
name the perceptible signifier. Labels carry scent: the user's words, not
your schema's. A capability with no signifier on the natural path does not
exist — not even for its builder.
- What does it cost? Count the primary path: taps, keystrokes, screens,
attention switches, items held in memory. Numbers when countable, prose
when not. The system holds state; the user never re-enters what it already
knows.
- Do they know it worked? Something visible within ~100ms. Current state
readable on screen, never inferred. Undo over confirmation. Constrain the
slip before polishing the error message. Errors state cause, then fix.
- Does it survive the walk? Walk it twice: first use (does it teach
itself?) and hundredth use (does it get out of the way?). Then leave
mid-flow and come back: is the state still there, with a cue to resume?
Rules
- One primary action per screen. Everything else is smaller, later, or gone.
- Recognition over recall: picker over format, completion over memorization,
visible option over documented option.
- Visible state beats remembered state: mode, scope, and progress on screen,
always.
- Errors: cause, then fix, in the user's language. No raw traces, no blame.
- Never manufacture urgency. Badges, timers, and red are reserved for things
that are actually urgent.
- Accessibility minimums are floors, not trade-offs: target sizes, keyboard
paths, focus visibility, reduced motion. Simplification never buys them back.
- Folklore ban: never cite the 3-click rule, 7±2 for on-screen items, Hick's
law for menu scanning, "80% of users use 20% of features", decision fatigue,
or 23-minutes-per-interruption. The references carry what replaced them.
Deliberate corners
Mark a deliberate UX corner with a comment naming the ceiling and the upgrade
trigger: norman: <ceiling>, <upgrade trigger> — for example
<!-- norman: no empty-state hint, add when someone misses the feature -->.
Harvest the ledger any time with the bundled tool:
bin/norman [path] [--json] [--fail-on-no-trigger]
One row per marker; markers with no upgrade trigger are flagged — a corner
with no revisit condition is the one that rots.
References
Load on demand, exactly when the situation names them:
- Read references/principles.md when you need the
core vocabulary defended — signifier vs affordance, the two gulfs, slips vs
mistakes, constraints, forcing functions — or a citation for any of it.
- Read references/interaction-cost.md before
asserting any number: taps, target sizes, response times, memory limits. It
separates measured from folklore.
- Read references/cognition.md when working on
discoverability, state visibility, memory load, notifications, or
interruption and resumption.
- Read references/bloat.md when arguing a control has or
has not earned its place.
- Read references/cli-tui.md when the interface is a
CLI or TUI.
To pressure-test a flow, run the
first-time-user role prompt as a subagent against
the surface you just built.
If the workspace carries its own interface standard (a usability gate list, a
design system, an accessibility standard), read it and apply both. This skill
is the general layer, never a replacement for a house standard.
When NOT to apply
Never sand off: expert efficiency (command-line and power tools trade a high
first-use cost for a near-zero hundredth-use cost, and that trade is often
correct); friction that is the point (deliberate confirmation of destructive
acts, game mechanics); legally or safety-required steps.
Aesthetics are not the enemy. Attractive interfaces measurably buy tolerance
(the aesthetic-usability effect); this skill governs function and findability,
not visual identity. Do not flatten a brand to save a border.
Never trade correctness for smoothness: an interface that guesses wrong
silently is worse than one that asks.
The best interface is the one the user does not remember using.
1---2name: norman3description: Norman4---56# Norman78Interface-design discipline named for the Norman door: the elegant pull handle9on a door that opens with a push. Software ships that door constantly — the10feature nobody finds, the form that asks what the system already knows, the11delete control beside rename. This skill catches those while you build.1213## The walkthrough1415Every surface you add or change — control, field, screen, flag, prompt, error,16empty state — answers five questions, in order:17181. **Has it earned its place?** Every control starts at minus 100 points and19 buys its way in. Before adding one, try to absorb the complexity instead: a20 default, an inference, a convention. Someone always pays for complexity;21 prefer it to be you, not every user on every visit.222. **Can they find it?** Stand where the user stands when the need arises and23 name the perceptible signifier. Labels carry scent: the user's words, not24 your schema's. A capability with no signifier on the natural path does not25 exist — not even for its builder.263. **What does it cost?** Count the primary path: taps, keystrokes, screens,27 attention switches, items held in memory. Numbers when countable, prose28 when not. The system holds state; the user never re-enters what it already29 knows.304. **Do they know it worked?** Something visible within ~100ms. Current state31 readable on screen, never inferred. Undo over confirmation. Constrain the32 slip before polishing the error message. Errors state cause, then fix.335. **Does it survive the walk?** Walk it twice: first use (does it teach34 itself?) and hundredth use (does it get out of the way?). Then leave35 mid-flow and come back: is the state still there, with a cue to resume?3637## Rules3839- One primary action per screen. Everything else is smaller, later, or gone.40- Recognition over recall: picker over format, completion over memorization,41 visible option over documented option.42- Visible state beats remembered state: mode, scope, and progress on screen,43 always.44- Errors: cause, then fix, in the user's language. No raw traces, no blame.45- Never manufacture urgency. Badges, timers, and red are reserved for things46 that are actually urgent.47- Accessibility minimums are floors, not trade-offs: target sizes, keyboard48 paths, focus visibility, reduced motion. Simplification never buys them back.49- Folklore ban: never cite the 3-click rule, 7±2 for on-screen items, Hick's50 law for menu scanning, "80% of users use 20% of features", decision fatigue,51 or 23-minutes-per-interruption. The references carry what replaced them.5253## Deliberate corners5455Mark a deliberate UX corner with a comment naming the ceiling and the upgrade56trigger: `norman: <ceiling>, <upgrade trigger>` — for example57`<!-- norman: no empty-state hint, add when someone misses the feature -->`.5859Harvest the ledger any time with the bundled tool:6061```62bin/norman [path] [--json] [--fail-on-no-trigger]63```6465One row per marker; markers with no upgrade trigger are flagged — a corner66with no revisit condition is the one that rots.6768## References6970Load on demand, exactly when the situation names them:7172- Read [references/principles.md](references/principles.md) when you need the73 core vocabulary defended — signifier vs affordance, the two gulfs, slips vs74 mistakes, constraints, forcing functions — or a citation for any of it.75- Read [references/interaction-cost.md](references/interaction-cost.md) before76 asserting any number: taps, target sizes, response times, memory limits. It77 separates measured from folklore.78- Read [references/cognition.md](references/cognition.md) when working on79 discoverability, state visibility, memory load, notifications, or80 interruption and resumption.81- Read [references/bloat.md](references/bloat.md) when arguing a control has or82 has not earned its place.83- Read [references/cli-tui.md](references/cli-tui.md) when the interface is a84 CLI or TUI.8586To pressure-test a flow, run the87[first-time-user](agents/first-time-user.md) role prompt as a subagent against88the surface you just built.8990If the workspace carries its own interface standard (a usability gate list, a91design system, an accessibility standard), read it and apply both. This skill92is the general layer, never a replacement for a house standard.9394## When NOT to apply9596Never sand off: expert efficiency (command-line and power tools trade a high97first-use cost for a near-zero hundredth-use cost, and that trade is often98correct); friction that is the point (deliberate confirmation of destructive99acts, game mechanics); legally or safety-required steps.100101Aesthetics are not the enemy. Attractive interfaces measurably buy tolerance102(the aesthetic-usability effect); this skill governs function and findability,103not visual identity. Do not flatten a brand to save a border.104105Never trade correctness for smoothness: an interface that guesses wrong106silently is worse than one that asks.107108The best interface is the one the user does not remember using.