协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
enhance-ux-laws【开发与工程】Measured fix pass on one screen or flow against seven Laws of UX: Fitts, Hick, Miller, Jakob, Zeigarnik, Goal-Gradient, Von Restorff. Use when "too many choices", "hard to tap", or "users drop off mid-flow". NN/g pass → enhance-web-ux.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Degree of freedom: MIXED. Probe run, thresholds, and re-measure
[LOW freedom — run exactly]; scoping, diagnosis, law conflicts, and fix
design [HIGH freedom].
Takes one screen or flow and improves it against seven behavioural laws, using measured values in place of impressions. Each law answers one question about the person using the screen:
| Question | Law | Lever |
|---|---|---|
| Can they hit it? | Fitts | target size and travel distance |
| Can they decide? | Hick | number and weight of simultaneous choices |
| Do they see what matters? | Von Restorff | one distinct element per view |
| Can they hold it in mind? | Miller | chunking; nothing carried between screens |
| Does it work the way they expect? | Jakob | conventions from products they already use |
| Will they come back and finish? | Zeigarnik | visible, resumable unfinished work |
| Will they push through to the end? | Goal-Gradient | visible, honest progress |
Fix by default. When the request is for a review only, stop after the findings table.
Illustrative. Probe values are from a real run against a test booking page.
Scope:
/book, phone (touch) and desktop. Primary task: pick a site type and pay. First-time visitors. Measure @390×844:under2417 of 38 targets; Edit/Delete 23×14 and 39×14, 2px apart;accentsInFold8 filled blue;repeatedActionsChoose ×6; nav 14 flat links; form 11 fields, 0 groups, 8placeholderOnly, 3unlabeled;longCodesone 16-digit reference;stepButtonsBack/Next with 0indicators;fakeControlsdiv:Pay now;homeLinkfalse. Flow walk: reload at step 2 empties the form; Next does nothing; a pasted card number with spaces is cut short. Diagnose: Jakob — "Pay now" is adivthat submits nothing and the keyboard cannot reach (blocker). Zeigarnik — reload wipes the form (blocker). Fitts — Delete is 14px tall, 2px from Edit: destructive mis-tap (blocker). Von Restorff + Hick — 8 equal accents, six equally weighted plans (major). Miller — labels vanish on typing; reference must be retyped by hand (major). Goal-Gradient — no position in a 3-step flow (major). Not a finding: the prefecture select has 21 options, but people look up a known answer in a conventional order, so Hick does not apply. Left as is. Resolve: hiding three plans under "More site types" adds a tap (Hick vs Fitts); accepted because those three are 8% of bookings. Fix:<button type="submit">and working steps first;Buttonprimitive gets a 44px min height and 8px gap; Delete moves away from Edit, behind a confirm; three plans visible, one preselected "Most booked"; one filled CTA per view, the rest outline; persistent labels in three fieldsets; reference rendered8842 0193 7745 1206with Copy; "Step 2 of 3" from the real step index; draft saved per field, card number excluded. Verify:under2417 → 0,accentsInFold8 → 1,placeholderOnly8 → 0,fakeControls1 → 0,indicators0 → 1; reload at step 2 restores input; the pasted card number is kept whole. Contract change:/booknow receives aplanfield; the plan was never submitted before.
accentsInFold shows one filled accent action per view at both widthsaudit-accessibility; breakpoints → audit-responsive; NN/g page pass → enhance-web-uxMost damage done in the name of these laws comes from applying one outside its precondition. Check the claim, the "applies when" condition, and the "it does not say" column before writing a finding: references/thresholds-and-fixes.md §What each law claims.
Read the route file and its top-level components. Record:
Button, Input, Field, Badge, progress component, colour tokensSave the probe as ux-laws-probe.js in a scratch directory outside the repo and work from there: the CLI writes its .playwright-cli/ folder, the JSON, and the screenshots into the current directory. Evaluate it in the live page at a phone width and a desktop width, resizing before navigating; repeat for each state that matters (filled, error, menu open, every step) by driving the same session there and evaluating again to a new file. With the pack installed, follow protocol-browser-anti-stall for browser sessions.
Run loop, probe script, and the candidate-confirmation notes (what the probe cannot see): references/probe.md.
Eight checks the DOM cannot answer. Record one line each.
4242 4242 4242 4242). Is it kept whole and grouped?One row per finding: law, evidence, threshold, why the precondition holds, severity. Thresholds marked house are working targets, adjustable for a dense professional tool with a stated reason.
Threshold table — law | evidence | threshold | basis, with WCAG, HIG, Material, and house targets: references/thresholds-and-fixes.md §Thresholds.
Severity. Blocker: the task fails or work is lost (a primary target under 24px, a control that does nothing or that the keyboard cannot reach, input wiped on Back or reload). Major: the primary task is measurably slower or misleading (several equal accents, placeholder-only labels on a long form, a 5-step flow with no position). Minor: secondary paths and polish.
The laws optimise different things, so a fix for one can break another.
| Conflict | Resolution |
|---|---|
| Hick vs Fitts — hiding options adds taps and travel | Keep the top 3–5 options by real usage visible; hide only the long tail. One extra tap costs more than two extra options |
| Hick vs Jakob — trimming an item users expect to find | Conventional items stay (search, cart, account, back). Trim what is specific to this product |
| Von Restorff vs Jakob — a distinct control that no longer reads as a control | Differ in colour, size, or position; keep the conventional shape and behaviour |
| Fitts vs density — larger targets push content off screen and into memory | On dense desktop tools, enlarge the hit area with padding or a pseudo-element while the visible control stays compact |
| Miller vs Goal-Gradient — more, smaller steps lengthen the road | Split until each step holds one decision or 3–5 fields, then show position and total |
| Zeigarnik and Goal-Gradient vs calm — every cue is a demand on attention | One open-loop cue per surface, tied to real state, with a way to finish it or dismiss it |
When no row applies, order by what fails hardest: can't hit or can't operate → breaks an expectation → too many choices → weak emphasis → weak motivation. The first two stop the task; the rest slow it.
Repair a broken flow before tuning it: no law helps a task that cannot complete. Dead controls get behaviour or get removed, and a choice the user makes has to reach the submitted data. Record every resulting change to what the backend receives.
Then fix in the shared component or token when a finding repeats, and use the design system's existing variants. Progress, drafts, and completeness cues read real state; when the state does not exist, add the smallest persistence that makes the cue true, or propose it.
Per-law fix catalogue (Fitts, Hick, Von Restorff, Miller, Jakob, Zeigarnik, Goal-Gradient): references/thresholds-and-fixes.md §Fixes.
Cues with no state behind them are out of scope as fixes: unread badges for nothing, a meter that cannot reach 100%, a bar driven by a timer, a head start that was not earned. They work once and cost the product its credibility.
after-*.json and after-*.pngmobile-rn-screen owns the screenenhance-web-ux — NN/g heuristics and DOM forensics for one pageaudit-ux — heuristic report without fixesaudit-accessibility — full WCAG sweep; this skill uses a few criteria as thresholdsenhance-web-forms — validation, schema parity, form structureenhance-onboarding — activation event and steps to first valueenhance-web-conversion — pricing and landing-page persuasionaudit-responsive — breakpoint layout