mirror of
https://github.com/nexu-io/open-design.git
synced 2026-06-01 03:14:35 +07:00
craft: add laws-of-ux guidance
Adds the laws-of-ux craft guidance for generated UI work.
This commit is contained in:
parent
7ce4eb4e82
commit
bc9a49ff48
7 changed files with 304 additions and 4 deletions
|
|
@ -69,6 +69,7 @@ A purely behavioral craft file (state-coverage, animation-discipline) is guidanc
|
|||
| `accessibility-baseline.md` | `accessibility-baseline` | Any skill that ships interactive UI: dashboards, forms, mobile flows, anything with focus/labels/keyboard paths |
|
||||
| `rtl-and-bidi.md` | `rtl-and-bidi` | Any skill that ships localized text or layout: blogs, docs, financial tables, mobile apps, anything that may render Arabic / Hebrew / Persian |
|
||||
| `form-validation.md` | `form-validation` | Any skill whose primary artifact contains an interactive form: lead capture, sign-in, signup, settings, multi-step intake |
|
||||
| `laws-of-ux.md` | `laws-of-ux` | Any skill whose composition decisions hit named cognitive limits: pricing pages (Hick's, Choice Overload, Von Restorff), dashboards (Pareto, Selective Attention, Working Memory), onboarding (Goal-Gradient, Zeigarnik, Peak-End), modals (Fitts's, Tesler's). Sibling axis to the rendering-rule files above — covers what to compose, not how to render. |
|
||||
|
||||
**Partial-stateful skills.** A skill that's mostly static but contains an embedded form, data table, or query surface should opt in. State-coverage rules apply to the stateful component, not the whole page.
|
||||
|
||||
|
|
|
|||
297
craft/laws-of-ux.md
Normal file
297
craft/laws-of-ux.md
Normal file
|
|
@ -0,0 +1,297 @@
|
|||
# Laws of UX craft rules
|
||||
|
||||
Universal cognitive, perceptual, and behavioral heuristics that decide
|
||||
what a UI composes — how many pricing tiers fit on a screen, where a
|
||||
primary action anchors in scanning order, when a progress indicator
|
||||
earns its place, why a settings list needs grouping. The active
|
||||
`DESIGN.md` decides brand visual language; the existing craft files
|
||||
decide rendering rules (color, typography, motion, states, ARIA, RTL,
|
||||
forms); this file decides composition rules grounded in named research.
|
||||
|
||||
> Distilled from primary sources: Hick (1952) + Hyman (1953), Miller
|
||||
> (1956) for chunking / `7±2` channel capacity, Cowan (2001) for the
|
||||
> modern ~4 working-memory bound, Fitts (1954), Wertheimer (1923) for
|
||||
> proximity / similarity / Prägnanz, Palmer (1992) for Common Region,
|
||||
> Palmer & Rock (1994) for Uniform Connectedness, Kahneman /
|
||||
> Fredrickson / Schreiber / Redelmeier (1993) for Peak-End, Zeigarnik
|
||||
> (1927), Csíkszentmihályi (1975), Hull (1932), von Restorff (1933),
|
||||
> Broadbent (1958), Sweller (1988), Postel (RFC 760, 1980), Carroll &
|
||||
> Rosson (1987), Tversky & Kahneman (1974) for Anchoring, Kurosu &
|
||||
> Kashimura (1995), Iyengar & Lepper (2000), Toffler (1970), Pareto
|
||||
> (c.1906) / Juran (*Quality Control Handbook*, 1951), Ebbinghaus
|
||||
> (1885), Ockham (14th c.), Tesler at Apple (1980s), Nielsen (2000),
|
||||
> Norman *POET* (1988), Parkinson (1955).
|
||||
|
||||
## Prior art and scope
|
||||
|
||||
Existing public catalogs of UX heuristics (Yablonski's lawsofux.com,
|
||||
NN/g's 10 usability heuristics, Material 3 motion + interaction
|
||||
guidance, Apple HIG, Baymard Institute checkout research) inventory the
|
||||
laws but rarely tie each one to a concrete code-gen directive. This
|
||||
file does the translation: every entry ends with one actionable move
|
||||
for an HTML / Tailwind / React-emitting agent. Sibling craft files
|
||||
(`accessibility-baseline.md`, `state-coverage.md`, `typography.md`,
|
||||
`anti-ai-slop.md`, `color.md`, `animation-discipline.md`,
|
||||
`form-validation.md`) own the auto-checked rules; this file names the
|
||||
underlying law and surfaces the folklore. Out of scope: Weber-Fechner
|
||||
psychophysics and Signal Detection Theory — both apply to UI but the
|
||||
prompt-emission directives are too narrow to earn a slot here. Add
|
||||
later if a skill needs them.
|
||||
|
||||
The rules below are guidance, not auto-checked. Reviewers and the agent
|
||||
apply them; the linter does not. Where a law has a sibling rule already
|
||||
auto-checked elsewhere — touch-target floor in
|
||||
`accessibility-baseline.md`, the 300 ms / 2 s / 10 s / 30 s / 60 s
|
||||
loading thresholds in `state-coverage.md`, ALL CAPS letter-spacing in
|
||||
`typography.md`, the indigo / gradient / emoji-icon list in
|
||||
`anti-ai-slop.md` — the entry below cross-references rather than
|
||||
duplicates.
|
||||
|
||||
## Perception and visual grouping
|
||||
|
||||
Five Gestalt laws plus three attention-and-recognition laws govern how
|
||||
the eye groups elements before the brain reads them.
|
||||
|
||||
- **Law of Proximity** (Wertheimer, 1923). Objects near each other read
|
||||
as a group. Cheapest grouping signal — cheaper than borders or shared
|
||||
color. Apply variable vertical rhythm: 8–12 px within a group,
|
||||
32–48 px between groups. Uniform spacing reads as nothing being
|
||||
grouped.
|
||||
- **Law of Similarity** (Wertheimer, 1923). Visually similar elements
|
||||
read as a group. Equivalent affordances must share treatment — every
|
||||
list row identical class set, every secondary button identical, every
|
||||
destructive action identical. Visible deviation is reserved for the
|
||||
one item meant to draw attention (the recommended pricing tier, the
|
||||
selected nav item).
|
||||
- **Law of Common Region** (Palmer, 1992). A shared bounded area binds
|
||||
enclosed elements. Use enclosure when proximity is not enough — and
|
||||
reserve it. Concrete numbers: padding ≥16 px inside the region,
|
||||
distinct surface (border + tinted background, or card chrome at
|
||||
≥1 px hairline). A page where every section is bordered destroys the
|
||||
signal.
|
||||
- **Law of Prägnanz / Good Figure** (Wertheimer, 1923). The eye
|
||||
resolves complex layouts into the simplest underlying form. Designs
|
||||
that align with a clear underlying grid (12-column, F-pattern,
|
||||
4-quadrant) feel inevitable; ornate breaks that add nothing semantic
|
||||
feel arbitrary.
|
||||
- **Law of Uniform Connectedness** (Palmer & Rock, 1994). The
|
||||
strongest grouping signal in the Gestalt hierarchy: connected lines,
|
||||
shared toolbars, or bracketing containers tie items together more
|
||||
strongly than proximity or similarity. Use for wizard steps,
|
||||
comparison sets, and explicit navigation flows.
|
||||
- **Selective Attention** (Broadbent, *Perception and Communication*,
|
||||
1958). Cognitive bandwidth is finite. Users filter aggressively and
|
||||
ignore anything that looks irrelevant to their goal — banner blindness
|
||||
comes from this. Reserve the strongest visual contrast for the single
|
||||
goal-relevant action; let supporting content recede in weight.
|
||||
- **Von Restorff Effect** (von Restorff, 1933). The item that differs
|
||||
from a uniform field is the one most likely to be remembered. Make
|
||||
the recommended pricing tier, the active nav item, the warning state
|
||||
visually distinct. Pair contrast with a non-color signal (icon, text
|
||||
label, position) — `accessibility-baseline.md` rules out color-alone
|
||||
signaling.
|
||||
- **Aesthetic-Usability Effect** (Kurosu & Kashimura, Hitachi Design
|
||||
Center, 1995). Visual polish biases perceived usability. Refined
|
||||
typography, generous whitespace, and a calm palette earn the benefit
|
||||
of the doubt for minor friction. Never substitutes for measurable
|
||||
usability or for `state-coverage.md`'s required-states rule.
|
||||
|
||||
## Decision-making
|
||||
|
||||
Six laws govern how fast and how well users decide when an interface
|
||||
offers a choice.
|
||||
|
||||
- **Hick's Law** (Hick, 1952; Hyman, 1953 replication). Decision time
|
||||
grows roughly log(n+1) with the number of equivalent options. Cap any
|
||||
single decision-screen to 3–5 visible primary options; collapse the
|
||||
rest behind a "More" / progressive disclosure pattern; visually
|
||||
distinguish the recommended choice. Aggressive truncation that hides
|
||||
the path forward is the opposite failure mode — surface the full
|
||||
option set, just don't render every option at the same visual weight.
|
||||
- **Choice Overload** (Iyengar & Lepper, *Journal of Personality and
|
||||
Social Psychology*, 2000; framing dates to Toffler, *Future Shock*,
|
||||
1970). Too many roughly-equivalent options stall or abandon the
|
||||
decision. Pricing pages: 3–4 tiers, exactly one marked recommended.
|
||||
Product grids: 6–9 hero cards above the fold. Settings panels: ≤5
|
||||
named groups. Never emit a flat wall of equivalents.
|
||||
- **Anchoring** (Tversky & Kahneman, *Science* 185:1124–1131, 1974).
|
||||
The first number a user sees re-weights every subsequent number.
|
||||
Place the recommended pricing tier where it anchors the comparison;
|
||||
render yearly-billing savings as concrete dollar deltas, not just
|
||||
percentage badges; pre-select the safer default in radio groups.
|
||||
Visual weight matches intended decision weight.
|
||||
- **Pareto Principle / 80-20** (Pareto, c.1906; Juran, *Quality Control
|
||||
Handbook*, 1951 — popularized the management-application framing). A
|
||||
small share of features drives most of the value. Identify the 2–3 actions
|
||||
that drive the dominant journey for the target persona; emphasize
|
||||
those visually; demote the long tail to overflow menus, footer
|
||||
surfaces, or settings.
|
||||
- **Tesler's Law / Conservation of Complexity** (Tesler, Apple, 1980s).
|
||||
Every product has an irreducible amount of complexity. The design
|
||||
choice is *where* it lives — engineering team, interface, user — not
|
||||
whether to eliminate it. When complexity reaches the user, surface
|
||||
contextual guidance (tooltips, smart defaults, inline empty-state
|
||||
coaching, progressive disclosure) at the exact step where it
|
||||
surfaces. Hiding it is not the same as removing it.
|
||||
- **Occam's Razor** (Ockham, 14th c.). Among options that explain the
|
||||
data equally well, prefer the one with the fewest assumptions. Specify
|
||||
a minimal element inventory; forbid decorative chrome that doesn't
|
||||
serve a stated user task. The law constrains assumptions, not feature
|
||||
count — a "minimum viable" framing misreads it.
|
||||
|
||||
## Memory and learning
|
||||
|
||||
Five laws cover how working memory handles information density and
|
||||
what the user retains afterward.
|
||||
|
||||
- **Miller's Law and Chunking** (Miller, *The Magical Number Seven,
|
||||
Plus or Minus Two*, *Psychological Review*, 1956 — channel capacity /
|
||||
`7±2` and chunking; Cowan, *Behavioral and Brain Sciences* 24:1, 2001
|
||||
for the modern ~4-item working-memory bound). Working memory holds
|
||||
about four items reliably and up to seven for short-term recall. Each
|
||||
slot can hold a *larger familiar unit*, constrained by the user's
|
||||
domain knowledge — chunking does not let you pack arbitrary content
|
||||
into a single slot. Often misread as a rule about menu length;
|
||||
Miller's paper is about chunks. Group related fields with clear
|
||||
section headings, dividers, or card containers. A settings page with
|
||||
sections "Account / Notifications / Privacy / Billing / Danger zone"
|
||||
beats one flat list of 30 toggles.
|
||||
- **Working Memory** (Baddeley & Hitch, 1974; lineage to Atkinson &
|
||||
Shiffrin, 1968). Items decay in seconds without rehearsal. Recognition
|
||||
beats recall: persisting prior context across screens, marking visited
|
||||
elements, and surfacing comparison views beats forcing the user to
|
||||
memorize. On dashboards specifically: sticky filter chips, last-N
|
||||
selections persisted, breadcrumbs that include applied filters.
|
||||
- **Serial Position Effect** (Ebbinghaus, *Über das Gedächtnis*, 1885).
|
||||
Recall favors the extremes — primacy at the start, recency at the
|
||||
end — while middle items fade. Anchor the most important nav items at
|
||||
the leftmost and rightmost positions of a horizontal menu; cluster
|
||||
utilities in the middle.
|
||||
- **Peak-End Rule** (Kahneman, Fredrickson, Schreiber, Redelmeier,
|
||||
*Psychological Science*, 1993). Memory of an experience is dominated
|
||||
by the emotional peak and the ending, not the average. Stage a
|
||||
high-effort celebratory success state; let intermediate steps stay
|
||||
calm. Mediocre middles matter less than a strong close. The peak
|
||||
belongs at the *end* of a flow, not as arbitrary mid-flow motion —
|
||||
`animation-discipline.md` rejects motion that performs (rather than
|
||||
confirms) a state change.
|
||||
- **Zeigarnik Effect** (Zeigarnik, *Über das Behalten erledigter und
|
||||
unerledigter Handlungen*, 1927). Uncompleted tasks create cognitive
|
||||
tension that pulls the user back. Visible progress ("3 of 5 steps",
|
||||
greyed-out next sections) converts that tension into completion
|
||||
pressure. Reserve for genuinely beneficial flows like onboarding;
|
||||
applying the same lever to streaks, daily-quest counters, or notification-
|
||||
reduction nags is a dark pattern.
|
||||
|
||||
## Interaction and motor
|
||||
|
||||
Five laws cover how fast and how accurately users can act on the UI.
|
||||
|
||||
- **Fitts's Law** (Fitts, *Journal of Experimental Psychology*, 1954).
|
||||
Time to acquire a target depends on its distance and size — bigger
|
||||
and closer is faster. Spacing between adjacent hit zones matters as
|
||||
much as size. Pair with `accessibility-baseline.md`'s 24 × 24 CSS px
|
||||
AA touch-target floor; on mobile, place high-frequency controls in
|
||||
the natural thumb arc.
|
||||
- **Doherty Threshold** (Doherty & Thadani, *IBM Systems Journal*,
|
||||
1982). Sub-second feedback keeps users in flow; latency above ~1 s
|
||||
breaks attention. The implementable directive lives in
|
||||
`state-coverage.md`'s loading-threshold table (no indicator under
|
||||
300 ms; skeleton 300 ms – 2 s; labelled spinner 2 – 10 s; determinate
|
||||
bar with cancel 10 – 60 s; stop and offer error/retry past 60 s).
|
||||
This entry exists to name the underlying law and flag its folklore
|
||||
(the 400 ms number doesn't appear in the 1982 paper — see
|
||||
`animation-discipline.md` for the 400 ms folklore trace).
|
||||
- **Flow** (Csíkszentmihályi, *Beyond Boredom and Anxiety*, 1975). Flow
|
||||
sits in the balance between challenge and skill — too hard breeds
|
||||
frustration, too easy breeds boredom. Continuous feedback and a clear
|
||||
sense of control keep the user inside the state. System friction and
|
||||
latency are the fastest ways to break it.
|
||||
- **Goal-Gradient Effect** (Hull, *Psychological Review*, 1932; Kivetz,
|
||||
Urminsky, Zheng, 2006 for the punch-card replication). Motivation to
|
||||
finish rises as the goal gets closer. Multi-step flows render with a
|
||||
prominent progress indicator that reflects *real* endowed progress —
|
||||
show completed prerequisites when they truly exist (saved profile,
|
||||
imported team, prior survey answer). When no real prerequisite
|
||||
exists, render the current step honestly as `1 of N` with the
|
||||
empty/current-step state clearly marked. Hull's hypothesis is
|
||||
descriptive; treating it as license for fabricated progress, streak
|
||||
dark patterns, or loyalty-program quota inflation is a misread.
|
||||
- **Postel's Law / Robustness Principle** (Postel, RFC 760, 1980). "Be
|
||||
liberal in what you accept, conservative in what you send." Take
|
||||
input in whatever shape users naturally give it (phone numbers with
|
||||
or without dashes, dates in mixed formats, percentages with or
|
||||
without `%`); normalize internally to a canonical form; emit one
|
||||
consistent format on output. The error-timing and ARIA-wiring half
|
||||
lives in `form-validation.md`; the input-tolerance half is the
|
||||
directive above. RFC 9413 (Thomson, IAB, 2023; built on the earlier
|
||||
`draft-iab-protocol-maintenance`) retracts the maxim for protocol
|
||||
design citing security surface; the UX-input application stands.
|
||||
|
||||
## Behavior and expectation
|
||||
|
||||
Five laws cover what users predict and how that prediction interacts
|
||||
with the rendered surface.
|
||||
|
||||
- **Jakob's Law** (Nielsen, Nielsen Norman Group, 2000). Users spend
|
||||
most of their time on other sites and expect yours to work the same.
|
||||
Reuse category convention — nav placement, cart icon, settings gear,
|
||||
primary CTA in the upper right of a SaaS landing — so the user spends
|
||||
zero cycles relearning interaction grammar. Novelty must earn its
|
||||
keep against the convention's ROI; "innovate everywhere" is the
|
||||
opposite failure mode.
|
||||
- **Mental Model** (Craik, *The Nature of Explanation*, 1943; Norman,
|
||||
*POET / The Psychology of Everyday Things*, 1988). Every user
|
||||
arrives with a prior built from competitor products and the physical
|
||||
world. When the prediction holds, the product feels intuitive; when
|
||||
it breaks, friction shows up as confusion, not curiosity. When the
|
||||
brief names a reference product, anchor explicitly — capture the
|
||||
reference in the prompt and the agent inherits a transferable
|
||||
interaction grammar.
|
||||
- **Paradox of the Active User** (Carroll & Rosson, in *Interfacing
|
||||
Thought: Cognitive Aspects of Human-Computer Interaction*, MIT Press,
|
||||
1987, pp. 80–111). Users skip the manual and start using the
|
||||
software immediately, even when reading it would speed them up. Bake
|
||||
guidance into the surface itself — empty-state coaching, inline
|
||||
tooltips, contextual hints — at the action point.
|
||||
- **Parkinson's Law** (Parkinson, *The Economist*, 1955). Work expands
|
||||
to fill the time allotted to it. Loose interfaces let users dawdle;
|
||||
cut friction and pre-fill what you can — autofill, smart defaults,
|
||||
saved state — so a checkout finishes faster than the user expected.
|
||||
Beating anticipated duration becomes the felt win.
|
||||
- **Cognitive Load** (Sweller, *Cognitive Science*, 1988). Total
|
||||
mental effort splits into intrinsic (the task's inherent difficulty)
|
||||
and extraneous (poor layout, jargon, inconsistent patterns, visual
|
||||
noise). Designers can't reduce intrinsic load; they own extraneous
|
||||
fully. The visual-restraint directives (single accent in `color.md`,
|
||||
three-weight typography rhythm in `typography.md`, P0 anti-default
|
||||
list in `anti-ai-slop.md`) already constrain extraneous load; this
|
||||
entry exists to name the cognitive cost the sibling rules reduce.
|
||||
|
||||
## Common mistakes (lint these)
|
||||
|
||||
Folklore corrections that don't survive a primary-source check, in the
|
||||
same vein as the busts already documented in `animation-discipline.md`
|
||||
and `accessibility-baseline.md`. The first three are attribution
|
||||
corrections (year / venue / institution) the body entries already
|
||||
applied — restated here so a reviewer reading just this section sees
|
||||
them. The remainder are folklore not addressed in the body.
|
||||
|
||||
- "Anchoring effect = Tversky & Kahneman 1972." Wrong year. The
|
||||
*Science* paper introducing the anchoring framing is 1974; the 1972
|
||||
paper is "Subjective probability: A judgment of representativeness"
|
||||
(different work).
|
||||
- "Tesler's Law was developed at Xerox PARC." Tesler left PARC for
|
||||
Apple in 1980; the Conservation-of-Complexity formulation traces to
|
||||
his Apple years.
|
||||
- "Paradox of the Active User was a CACM article." It's a chapter in
|
||||
Carroll's *Interfacing Thought* (MIT Press, 1987), not CACM.
|
||||
- "Selective Attention = solved by red dots and badges." Repeated
|
||||
attention-grabbers train banner blindness. Reserve the strongest
|
||||
contrast for one goal-relevant action per surface.
|
||||
- "Fitts's Law alone is enough for touch targets." Fitts gives the
|
||||
speed-accuracy tradeoff. WCAG 2.2 SC 2.5.8 sets the AA floor at
|
||||
24 × 24 CSS px (`accessibility-baseline.md`); iOS HIG suggests
|
||||
44 × 44 pt; Material 3 suggests 48 × 48 dp. Fitts plus the
|
||||
platform floor — never just Fitts.
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ od:
|
|||
requires: true
|
||||
sections: [color, typography, layout, components]
|
||||
craft:
|
||||
requires: [state-coverage, accessibility-baseline]
|
||||
requires: [state-coverage, accessibility-baseline, laws-of-ux]
|
||||
---
|
||||
|
||||
# Dashboard Skill
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ od:
|
|||
requires: true
|
||||
sections: [color, typography, layout, components]
|
||||
craft:
|
||||
requires: [state-coverage]
|
||||
requires: [state-coverage, laws-of-ux]
|
||||
example_prompt: "Make me a kanban board for a 5-person growth squad mid-sprint — backlog, doing, review, done."
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ od:
|
|||
requires: true
|
||||
sections: [color, typography, layout, components]
|
||||
craft:
|
||||
requires: [state-coverage, animation-discipline, accessibility-baseline, form-validation]
|
||||
requires: [state-coverage, animation-discipline, accessibility-baseline, form-validation, laws-of-ux]
|
||||
example_prompt: "Design a 3-screen mobile onboarding flow for a meditation app — welcome, value props, sign-in."
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ od:
|
|||
design_system:
|
||||
requires: true
|
||||
sections: [color, typography, layout, components]
|
||||
craft:
|
||||
requires: [laws-of-ux]
|
||||
---
|
||||
|
||||
# Pricing Page Skill
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ od:
|
|||
requires: true
|
||||
sections: [color, typography, layout, components]
|
||||
craft:
|
||||
requires: [typography, color, anti-ai-slop]
|
||||
requires: [typography, color, anti-ai-slop, laws-of-ux]
|
||||
inputs:
|
||||
- name: product_name
|
||||
type: string
|
||||
|
|
|
|||
Loading…
Reference in a new issue