@hegemonart/get-design-done 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +11 -5
- package/.claude-plugin/plugin.json +10 -4
- package/CHANGELOG.md +27 -0
- package/README.md +7 -0
- package/agents/design-auditor.md +5 -0
- package/agents/design-context-builder.md +6 -1
- package/agents/design-executor.md +1 -1
- package/agents/design-pattern-mapper.md +1 -0
- package/agents/design-phase-researcher.md +1 -1
- package/package.json +9 -3
- package/reference/data-visualization.md +333 -0
- package/reference/form-patterns.md +245 -0
- package/reference/information-architecture.md +255 -0
- package/reference/onboarding-progressive-disclosure.md +250 -0
- package/reference/platforms.md +346 -0
- package/reference/registry.json +402 -360
- package/reference/rtl-cjk-cultural.md +353 -0
- package/reference/user-research.md +360 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Form Patterns
|
|
2
|
+
|
|
3
|
+
Forms are one of the highest-friction surfaces in any product. Every unnecessary click, ambiguous label, or poorly-timed error message is a conversion lost or a user abandoned mid-task. The patterns below are grounded in empirical research — primarily Luke Wroblewski's eye-tracking studies, WCAG 2.1 requirements, and NCSC/NIST guidance on authentication UX.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Label Position
|
|
8
|
+
|
|
9
|
+
Wroblewski's eye-tracking research measured the number of eye fixations required to move from label to field across the three common label placements. The findings are decisive: top-aligned labels are fastest because the eye travels in one direction — down — without a horizontal context switch.
|
|
10
|
+
|
|
11
|
+
**Top-aligned labels** are the default for most forms. Completion time is fastest because the label and input form a single vertical unit. They also accommodate longer translated strings without breaking layout, making them the correct default for internationalised products. Use top-aligned labels whenever form complexity is moderate to high or field types are mixed.
|
|
12
|
+
|
|
13
|
+
**Left-aligned labels** create the slowest completion time because the eye must saccade horizontally from label to field on every row. They earn their place only when scannability of values matters more than speed — settings pages, data-entry tables, or read-heavy forms where users compare label and value together. In these contexts the horizontal alignment aids review, not input.
|
|
14
|
+
|
|
15
|
+
**Floating labels (Material 3 style)** are an acceptable middle ground when screen real estate is severely constrained. The label begins as visible hint text above the field and remains visible (shrunk, repositioned) after the user starts typing. This pattern is distinct from — and incompatible with — placeholder-as-label. Never use placeholder text as the sole label: when the field receives focus the placeholder disappears, leaving the user to recall what was asked. This is a WCAG 2.1 failure under criterion 1.3.5 (Identify Input Purpose) and a general usability failure on any form longer than three fields.
|
|
16
|
+
|
|
17
|
+
| Label position | Completion speed | Best use case |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| Top-aligned | Fastest | Most forms; mixed field types; long forms |
|
|
20
|
+
| Left-aligned | Slowest | Settings pages; data comparison; values matter |
|
|
21
|
+
| Floating (Material 3) | Medium | Space-constrained mobile forms |
|
|
22
|
+
| Placeholder-only | — | **Never** — WCAG 1.3.5 failure |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 2. Inline Validation Timing
|
|
27
|
+
|
|
28
|
+
The timing of inline validation determines whether it helps or hinders. Validate too early and you penalise users for typing incomplete but valid input. Validate too late and users reach the submit button without knowing several fields are wrong.
|
|
29
|
+
|
|
30
|
+
**On-submit only** carries the lowest cognitive load during form completion and is appropriate for short forms (three fields or fewer). The cost is UX debt on long forms: when multiple fields fail at once, the user must scroll up to find errors, fix one, scroll back, and repeat. Provide an error summary at the top if using submit-only validation on long forms (see Section 3).
|
|
31
|
+
|
|
32
|
+
**On-blur (field exit)** is the recommended default for most forms. Validation fires after the user leaves the field, not while they are in it. This prevents the jarring experience of an error appearing mid-keystroke. The critical rule: never validate on first focus — only after the field has been blurred at least once. A pristine, untouched field should never show an error state.
|
|
33
|
+
|
|
34
|
+
**On-change (real-time)** is appropriate for two specific cases: password strength meters and character counters. It is not appropriate for format validation such as email addresses. Validating email format on every keystroke flags `hello@` as invalid before the user has finished typing the domain — a false negative that erodes trust in the form.
|
|
35
|
+
|
|
36
|
+
Never show a red error state before the user has had a realistic opportunity to complete the field. The error state is a signal that something is wrong; triggering it prematurely teaches users to ignore it.
|
|
37
|
+
|
|
38
|
+
| Timing | When to use | When to avoid |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| On-submit | Short forms (≤ 3 fields) | Long multi-section forms |
|
|
41
|
+
| On-blur | Default for most fields | — |
|
|
42
|
+
| On-change | Password strength, character count | Format validation (email, phone) |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 3. Error Placement and Recovery Copy
|
|
47
|
+
|
|
48
|
+
Errors placed far from their source — in a top banner, a modal, or a footer — force the user to map the error message back to the problematic field. Errors belong immediately below the field they describe, appearing between the field and the next element in the flow.
|
|
49
|
+
|
|
50
|
+
**Visual treatment**: error messages must never rely on color alone. A red border communicates nothing to users with red-green color deficiency. Use an error icon alongside the message text. The field border color change is acceptable as a supplemental indicator, not the primary one.
|
|
51
|
+
|
|
52
|
+
**Copy quality matters enormously.** "Invalid input" is useless. The error message must name what went wrong and specify how to fix it. Write the copy in plain language from the user's perspective:
|
|
53
|
+
|
|
54
|
+
| Poor copy | Better copy |
|
|
55
|
+
|---|---|
|
|
56
|
+
| Invalid input | Email must include an @ symbol |
|
|
57
|
+
| Password error | Password must be at least 8 characters |
|
|
58
|
+
| Required field | Enter your first name to continue |
|
|
59
|
+
| Invalid date | Enter a date in DD/MM/YYYY format |
|
|
60
|
+
|
|
61
|
+
**Focus management on submit**: when a form submits with errors, move programmatic focus to the first error field or to an error summary element. Leaving focus on the submit button and expecting the user to visually scan for errors is a significant accessibility failure and a poor experience on any device.
|
|
62
|
+
|
|
63
|
+
**Error summary for long forms**: any form with more than five fields should include an error summary at the top of the form when the user attempts to submit. The summary lists each error with a jump-link that moves focus directly to the relevant field. The summary element should receive focus automatically on submit-with-errors. This pattern is required for WCAG 2.4.3 (Focus Order) on complex forms.
|
|
64
|
+
|
|
65
|
+
```html
|
|
66
|
+
<div role="alert" aria-labelledby="error-summary-title" tabindex="-1">
|
|
67
|
+
<h2 id="error-summary-title">There are 3 errors in this form</h2>
|
|
68
|
+
<ul>
|
|
69
|
+
<li><a href="#email">Email must include an @ symbol</a></li>
|
|
70
|
+
<li><a href="#phone">Enter a valid phone number</a></li>
|
|
71
|
+
<li><a href="#dob">Date of birth must be in the past</a></li>
|
|
72
|
+
</ul>
|
|
73
|
+
</div>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 4. Required Field Conventions
|
|
79
|
+
|
|
80
|
+
Marking required fields unambiguously prevents submission errors and sets accurate expectations before the user invests time in a form.
|
|
81
|
+
|
|
82
|
+
The **asterisk (*) convention** is the web default. Mark every required field with `*` and place the legend "* Required" near the top of the form, before the first field. Users arriving mid-page may not see a legend placed at the bottom.
|
|
83
|
+
|
|
84
|
+
The **"(optional)" alternative** is better when most fields are required and only a few are not. Marking three optional fields "(optional)" is less visual noise than marking fifteen fields with `*`. Choose one convention per form — never mix both. A form that marks some fields `*` and labels others "(optional)" implies that unlabelled fields are neither required nor optional, which is simply confusing.
|
|
85
|
+
|
|
86
|
+
Regardless of which visual convention is used, every required field must carry `aria-required="true"` or the native `required` attribute. Screen readers announce the required state from these attributes, not from the visible asterisk.
|
|
87
|
+
|
|
88
|
+
```html
|
|
89
|
+
<!-- Native required attribute (preferred) -->
|
|
90
|
+
<input type="email" id="email" name="email" required>
|
|
91
|
+
|
|
92
|
+
<!-- Or explicit ARIA -->
|
|
93
|
+
<input type="text" id="name" name="name" aria-required="true">
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 5. Multi-Step Forms
|
|
99
|
+
|
|
100
|
+
Multi-step forms break long processes into manageable stages, but they introduce navigation complexity that must be managed explicitly. A user who does not know how many steps remain cannot calibrate effort and is more likely to abandon.
|
|
101
|
+
|
|
102
|
+
**Show total step count upfront** and maintain it throughout. "Step 2 of 4" gives the user a completion model. Never add steps mid-flow; if a conditional step becomes necessary, it must have been accounted for in the total from the beginning. Surprise steps feel like bait-and-switch.
|
|
103
|
+
|
|
104
|
+
**Preserve state between steps** unconditionally. Browser back must restore the previous step with all previously-entered values intact. Losing data on back-navigation is one of the most damaging patterns in multi-step forms — it destroys user trust and forces re-entry of work already done. Use session storage, URL state, or in-memory state managed at the form's root level.
|
|
105
|
+
|
|
106
|
+
**Allow non-linear completion where the domain permits.** If a user wants to skip to step 3 and complete step 2 later, let them. Stepped progress indicators (like a horizontal stepper component) should be interactive links, not decorative labels, unless there is a hard dependency that makes out-of-order completion genuinely impossible.
|
|
107
|
+
|
|
108
|
+
**Summary step before final submission.** Any multi-step form that results in a consequential action — purchase, account creation, booking — should include a review step that shows all entered values before the commit action. The CTA on the summary step should name the action ("Place order", "Create account") not just "Submit".
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 6. Autofill Hints — `autocomplete` Taxonomy
|
|
113
|
+
|
|
114
|
+
The `autocomplete` attribute tells the browser — and password managers, autofill services, and mobile OS keyboards — exactly what category of data a field expects. Proper use of `autocomplete` tokens reduces form completion time by 15–30% in controlled studies, primarily because browsers and password managers can populate multiple fields in a single tap. Always pair each token with the correct `input type`.
|
|
115
|
+
|
|
116
|
+
| Token | Meaning | Recommended `input type` |
|
|
117
|
+
|---|---|---|
|
|
118
|
+
| `name` | Full name | `text` |
|
|
119
|
+
| `email` | Email address | `email` |
|
|
120
|
+
| `tel` | Full telephone number | `tel` |
|
|
121
|
+
| `username` | Account username | `text` or `email` |
|
|
122
|
+
| `current-password` | Existing password (login) | `password` |
|
|
123
|
+
| `new-password` | New or changed password | `password` |
|
|
124
|
+
| `street-address` | Full street address (multi-line) | `text` or `textarea` |
|
|
125
|
+
| `postal-code` | Postal / zip code | `text` |
|
|
126
|
+
| `country` | Country code (ISO 3166-1 alpha-2) | `select` |
|
|
127
|
+
| `cc-number` | Credit/debit card number | `text` (`inputmode="numeric"`) |
|
|
128
|
+
| `cc-exp` | Card expiry (MM/YY) | `text` (`inputmode="numeric"`) |
|
|
129
|
+
| `cc-csc` | Card security code | `text` (`inputmode="numeric"`) |
|
|
130
|
+
| `bday` | Full date of birth | `date` |
|
|
131
|
+
| `sex` | Gender identity | `select` or `text` |
|
|
132
|
+
| `language` | Preferred language | `select` |
|
|
133
|
+
| `url` | Web address | `url` |
|
|
134
|
+
|
|
135
|
+
For address fields that are split across multiple inputs, use the sub-tokens (`address-line1`, `address-line2`, `address-level1` for state/province, `address-level2` for city) rather than the generic `street-address` token.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 7. Input Mode and Enter Key Hints
|
|
140
|
+
|
|
141
|
+
On mobile devices, `inputmode` controls which virtual keyboard the OS presents, independently of the input's semantic type. `enterkeyhint` controls the label shown on the Enter/Go key. Both attributes are pure UX signals — they carry no validation meaning — and they cost nothing to add.
|
|
142
|
+
|
|
143
|
+
### `inputmode` values
|
|
144
|
+
|
|
145
|
+
| Value | Keyboard shown | Use for |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| `none` | No keyboard | Fields with custom picker UI (date pickers, custom selects) |
|
|
148
|
+
| `text` | Standard keyboard | Default; general text |
|
|
149
|
+
| `decimal` | Numeric with decimal separator | Prices, measurements, quantities with fractions |
|
|
150
|
+
| `numeric` | Numeric only (0–9) | Quantities, PIN codes, verification codes |
|
|
151
|
+
| `tel` | Phone dialpad | Phone numbers, even when `type="text"` |
|
|
152
|
+
| `email` | Keyboard with @ and . prominent | Email; `type="email"` sets this implicitly |
|
|
153
|
+
| `search` | Keyboard with Search action | Search fields |
|
|
154
|
+
| `url` | Keyboard with / and . prominent | URLs; `type="url"` sets this implicitly |
|
|
155
|
+
|
|
156
|
+
### `enterkeyhint` values
|
|
157
|
+
|
|
158
|
+
| Value | Key label shown | Use for |
|
|
159
|
+
|---|---|---|
|
|
160
|
+
| `enter` | Return / Enter | Multi-line text areas; default where no hint applies |
|
|
161
|
+
| `done` | Done | Last field in a form; closes keyboard |
|
|
162
|
+
| `go` | Go | Single-field forms that submit on Enter |
|
|
163
|
+
| `next` | Next | Fields where Enter moves to the next input |
|
|
164
|
+
| `previous` | Previous | Back-navigation within a multi-step form |
|
|
165
|
+
| `search` | Search | Search fields |
|
|
166
|
+
| `send` | Send | Message composition fields |
|
|
167
|
+
|
|
168
|
+
```html
|
|
169
|
+
<input
|
|
170
|
+
type="text"
|
|
171
|
+
inputmode="numeric"
|
|
172
|
+
enterkeyhint="next"
|
|
173
|
+
autocomplete="cc-number"
|
|
174
|
+
placeholder="Card number"
|
|
175
|
+
>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 8. Password UX
|
|
181
|
+
|
|
182
|
+
Password fields carry more UX debt than almost any other input type, largely due to outdated security theatre that made passwords harder to use without making them more secure.
|
|
183
|
+
|
|
184
|
+
**Show/hide toggle** is mandatory on any password field. The eye icon is the standard affordance. Both states must have accessible labels: `aria-label="Show password"` and `aria-label="Hide password"`. The toggle should be positioned as a button inside the trailing edge of the input, using `type="button"` to prevent accidental form submission.
|
|
185
|
+
|
|
186
|
+
**Never block paste** on password fields. The UK National Cyber Security Centre (NCSC) explicitly recommends against paste-blocking. The rationale is simple: blocking paste discourages the use of password managers, which in turn pushes users toward shorter, simpler, more memorable — and therefore weaker — passwords. Paste-blocking does not prevent any known attack vector on the server side. Remove any `onpaste="return false"` or equivalent.
|
|
187
|
+
|
|
188
|
+
**Password strength meters** belong on new-password creation flows only. Displaying a strength meter on a login form reveals information about the stored password and adds noise to a flow where speed matters. Use `zxcvbn` or an equivalent entropy-based library rather than simple length/character-class rules, which users learn to game (e.g., "Password1!" satisfies most naive rules but is trivially guessable).
|
|
189
|
+
|
|
190
|
+
**Show requirements before the user types**, not as errors after they fail. If a password must be at least 10 characters and contain a number, display those requirements beneath the field before the field receives focus. The moment requirements appear only as error messages after submission, the form has trained the user to fail before they can succeed.
|
|
191
|
+
|
|
192
|
+
```html
|
|
193
|
+
<div class="field">
|
|
194
|
+
<label for="new-password">Create password</label>
|
|
195
|
+
<div class="input-with-toggle">
|
|
196
|
+
<input type="password" id="new-password" autocomplete="new-password" aria-describedby="pw-requirements">
|
|
197
|
+
<button type="button" aria-label="Show password"><!-- eye icon --></button>
|
|
198
|
+
</div>
|
|
199
|
+
<ul id="pw-requirements" class="requirements">
|
|
200
|
+
<li>At least 10 characters</li>
|
|
201
|
+
<li>At least one number or symbol</li>
|
|
202
|
+
</ul>
|
|
203
|
+
</div>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 9. Consent, Confirmation, and Destructive-Confirmation
|
|
209
|
+
|
|
210
|
+
These three patterns all involve the user acknowledging an outcome, but they operate at different risk levels and require different interaction costs to match.
|
|
211
|
+
|
|
212
|
+
**Consent checkboxes** govern communication preferences and data use. For marketing communications, the checkbox must be unchecked by default — opt-in is required under GDPR and comparable legislation in most jurisdictions. Pre-checked opt-out is only permissible for certain transactional communications or in jurisdictions that explicitly permit it; assume opt-in required unless legal has confirmed otherwise. The checkbox label must be specific about what the user is consenting to — "I agree to receive marketing emails from Acme Ltd." rather than "I accept the terms."
|
|
213
|
+
|
|
214
|
+
**Confirmation dialogs** are appropriate for irreversible actions that affect data the user owns — deleting a file, cancelling a subscription, archiving a project. The confirmation dialog must state exactly what will happen. "Are you sure?" is not a confirmation. "Delete the project 'Website Redesign'? This cannot be undone." is a confirmation. The destructive action button should be visually distinct (typically red or a warning tone) and should not be the default focused element.
|
|
215
|
+
|
|
216
|
+
**Destructive-confirmation with typed phrase** applies to catastrophic, irreversible operations: deleting an account, purging all data, permanently revoking access. Require the user to type a specific phrase — the account name, the word "DELETE", the number of items being erased — before the action becomes available. This pattern exists not to prevent accidents but to ensure the user is making a conscious, deliberate decision. GitHub, Heroku, and most infrastructure tools use this pattern for account deletion. The required phrase should be shown plainly; do not require the user to guess it.
|
|
217
|
+
|
|
218
|
+
| Risk level | Pattern | Example |
|
|
219
|
+
|---|---|---|
|
|
220
|
+
| Low — reversible | None needed | Moving a file to trash |
|
|
221
|
+
| Medium — data loss possible | Confirmation dialog with specific text | Deleting a saved draft |
|
|
222
|
+
| High — irreversible | Dialog + destructive button style | Cancelling a paid subscription |
|
|
223
|
+
| Critical — catastrophic | Dialog + type-to-confirm phrase | Deleting an account and all its data |
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 10. CAPTCHA Ethics and Fallbacks
|
|
228
|
+
|
|
229
|
+
CAPTCHA presents a genuine tension: friction added to stop bots is friction experienced by every human user, disproportionately by users with cognitive and motor disabilities.
|
|
230
|
+
|
|
231
|
+
**Invisible CAPTCHA v3** (Google reCAPTCHA v3, Cloudflare Turnstile, hCaptcha Invisible) is the preferred approach. These services score user behaviour in the background and surface a challenge only when the risk score exceeds a threshold. Typical deployments have challenge rates under 1% for real users. There is no visible puzzle, no audio fallback needed for the happy path.
|
|
232
|
+
|
|
233
|
+
**When a visible challenge is unavoidable**, WCAG 1.1.1 requires a non-visual alternative. Every visual CAPTCHA must have an audio alternative that is solvable with a screen reader and no visual ability. Text-based CAPTCHAs distorted beyond normal variance effectively exclude users with dyslexia and cognitive disabilities — treat this as a legal and ethical risk, not just a UX inconvenience.
|
|
234
|
+
|
|
235
|
+
**Time-limited CAPTCHAs** — those that expire while a slow or motor-impaired user is completing them — are inaccessible by design and should never be used. If a CAPTCHA session can time out, the user must be able to request a refresh without losing their form data.
|
|
236
|
+
|
|
237
|
+
**Progressive trust** is the most human approach for authenticated flows. A logged-in user with a verified email and account history presents a negligible bot risk. Do not require CAPTCHA from authenticated users unless there is a specific elevated-risk action (e.g., a bulk API call or mass send). Reserve CAPTCHA friction for unauthenticated, rate-limited, or anomalous-behaviour scenarios.
|
|
238
|
+
|
|
239
|
+
| Approach | User friction | Accessibility | When to use |
|
|
240
|
+
|---|---|---|---|
|
|
241
|
+
| Invisible CAPTCHA v3 (Turnstile, reCAPTCHA v3) | None | Full | Default for public forms |
|
|
242
|
+
| Visible challenge with audio fallback | Medium | Conditional (audio required) | High-risk unauthenticated flows |
|
|
243
|
+
| Progressive trust (authenticated) | None | Full | Logged-in users with account history |
|
|
244
|
+
| Time-limited CAPTCHA | High | Inaccessible | **Never** |
|
|
245
|
+
| Inaccessible visual-only CAPTCHA | High | None | **Never** |
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Information Architecture
|
|
2
|
+
|
|
3
|
+
Information architecture (IA) is the structural design of shared information environments. In practice, it answers three questions for every user at every moment: Where am I? Where can I go? What will I find there? Poor IA is invisible to designers because they already know the answers — it becomes visible only when users get lost, give up, or call support. The sections below cover navigation patterns, depth rules, research methods, wayfinding signals, and the IA decisions embedded in URLs and search.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Navigation Pattern Catalog
|
|
8
|
+
|
|
9
|
+
No single navigation pattern fits all products. The right choice depends on content volume, user task type, frequency of use, and platform constraints. Each pattern below carries a definition, the conditions under which it is the correct choice, the conditions under which it is the wrong choice, and the mistakes that appear most often in implementations.
|
|
10
|
+
|
|
11
|
+
### Hub-and-Spoke
|
|
12
|
+
|
|
13
|
+
**Definition:** A central home or dashboard acts as the hub; users travel outward to destination screens and return to the hub to begin the next task. There is no direct path between spokes — every journey passes through the center.
|
|
14
|
+
|
|
15
|
+
**When to use:** Hub-and-spoke is correct for mobile applications where tasks are discrete and sequential — banking apps, food delivery, ride-hailing, onboarding flows, and multi-step transaction flows all fit this model. It is also appropriate when users complete one task at a time and context from one task does not carry over to another.
|
|
16
|
+
|
|
17
|
+
**When NOT to use:** Do not use hub-and-spoke when users need to cross-reference content across destinations, move fluidly between sections, or maintain spatial awareness of a larger content body. A CMS, a design tool, or an analytics dashboard all require users to hold multiple contexts simultaneously — forcing every transition through a hub creates unnecessary friction.
|
|
18
|
+
|
|
19
|
+
**Common mistakes:** Adding too many spokes to the hub turns the dashboard into an unnavigable index. More than seven to nine top-level destinations on the hub signals that the IA needs a different model, not more spokes. A second mistake is designing spokes that are so isolated they cannot share context — users who need to compare information from two spokes are forced into a hub-and-spoke-and-hub-and-spoke sequence that creates unnecessary cognitive overhead.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
### Nested (Hierarchical)
|
|
24
|
+
|
|
25
|
+
**Definition:** Content is organized as a tree: parent categories contain child categories, which contain grandchild items. Navigation moves explicitly from broader to narrower — drilling down to reach specific content.
|
|
26
|
+
|
|
27
|
+
**When to use:** Nested navigation suits content that is genuinely taxonomic — file explorers, e-commerce category trees, documentation sites with chapters and sub-chapters, and administrative settings panels. The model works when the hierarchy reflects real-world mental models that users arrive with. A user who already knows they want "Electronics → Laptops → 15-inch" will find nested navigation fast and satisfying.
|
|
28
|
+
|
|
29
|
+
**When NOT to use:** Do not use nested navigation when items belong to more than one parent category, when users lack a pre-formed mental model of the hierarchy, or when the tree depth exceeds four levels. Nested navigation also breaks down when the category labels are ambiguous — users cannot commit to a branch when they are uncertain which branch contains their target.
|
|
30
|
+
|
|
31
|
+
**Common mistakes:** The most damaging mistake is designing a hierarchy that reflects the organization's internal structure rather than the user's mental model. An insurance company's product hierarchy follows business lines; a customer's mental model follows life events ("I'm buying a car," "I'm having a baby"). These rarely align without deliberate IA research. A second mistake is creating leaf nodes that are too shallow — a category containing only two or three items signals that the hierarchy was over-specified and should be collapsed upward.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
### Faceted
|
|
36
|
+
|
|
37
|
+
**Definition:** Content is filtered through multiple parallel, independent attributes simultaneously. Users narrow a result set by selecting values across dimensions — price range, color, brand, rating — without committing to a single hierarchical path.
|
|
38
|
+
|
|
39
|
+
**When to use:** Faceted navigation is correct for large, multi-attribute content sets where users approach from different starting points. Product catalogs, job boards, property listings, academic literature search, and any context where users have heterogeneous filtering priorities all benefit from faceted navigation. It respects the fact that different users weight attributes differently — one shopper leads with price, another with brand, another with availability.
|
|
40
|
+
|
|
41
|
+
**When NOT to use:** Do not apply faceted navigation to small content sets (fewer than ~50 items), to content where attributes are not independent of each other, or to contexts where discovery is the primary goal. A curated editorial experience should not be faceted — it should be sequenced. Faceted navigation also fails when the attribute vocabulary is opaque to users: if users do not understand what a facet means, they cannot use it to filter.
|
|
42
|
+
|
|
43
|
+
**Common mistakes:** Showing too many facets at once overwhelms users and buries the most useful filters beneath low-value ones. The correct approach is to surface the three to five highest-signal facets and hide the rest behind progressive disclosure. A second mistake is allowing facet combinations that produce zero results without feedback — a user who selects three facets and sees an empty state has been failed by the system, which should prevent impossible combinations or warn before they occur.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### Flat (Same-Level)
|
|
48
|
+
|
|
49
|
+
**Definition:** All content lives at a single depth. There are no parent-child relationships — every item is a peer. Navigation means moving laterally across a collection rather than drilling down into it.
|
|
50
|
+
|
|
51
|
+
**When to use:** Flat navigation is correct for streams, feeds, and timelines — social media feeds, notification inboxes, activity logs, and news aggregators. It is also appropriate for small, finite content sets where every item is equally accessible and no meaningful taxonomy exists. A settings panel with twelve options can be flat; a settings panel with sixty options cannot.
|
|
52
|
+
|
|
53
|
+
**When NOT to use:** Do not use flat navigation for large content sets. A flat structure with more than thirty to forty items becomes a scroll-based search problem, not a navigation problem. Flat navigation also fails when items have meaningful relationships that should be surfaced — if items cluster into natural groups, those groups should be represented in the structure.
|
|
54
|
+
|
|
55
|
+
**Common mistakes:** Treating flat navigation as the absence of IA rather than a deliberate structural choice. Flat does not mean unorganized — items in a flat structure still need to be sequenced, grouped visually, or sorted in a way that supports the user's task. A flat feed with no sorting or grouping is a list of equal noise.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### Mega-Menu
|
|
60
|
+
|
|
61
|
+
**Definition:** A persistent top navigation bar expands on hover or click to reveal a large, structured panel — often with multiple columns, category headers, images, and links — without navigating away from the current page.
|
|
62
|
+
|
|
63
|
+
**When to use:** Mega-menus are correct for large e-commerce sites, enterprise software with many feature areas, and any product where users need to move between dozens of top-level destinations without losing their current context. They are effective when the content taxonomy is stable, well-understood by users, and dense enough that a standard dropdown would require three or more levels of nesting.
|
|
64
|
+
|
|
65
|
+
**When NOT to use:** Do not use a mega-menu for products with fewer than eight to ten top-level destinations — a standard nav bar or sidebar handles this more cleanly. Mega-menus are also wrong for mobile-first products, where the interaction model (hover) does not translate to touch and the screen real estate does not accommodate wide panels.
|
|
66
|
+
|
|
67
|
+
**Common mistakes:** Hover-triggered mega-menus introduce a Fitts's Law problem — users must move the pointer from the trigger to the panel without accidentally leaving the hover zone, which closes the menu. The fix is a diagonal tolerance zone (mouse movement toward the panel keeps the menu open) or switching to click-triggered behavior. A second mistake is including too many items without meaningful grouping — a mega-menu with sixty links in a single undifferentiated column is not better than a standard dropdown; it is worse.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### Command Palette (Cmd+K)
|
|
72
|
+
|
|
73
|
+
**Definition:** A modal search-and-command interface, triggered by a keyboard shortcut, that allows users to navigate to any destination, trigger any action, or run any command by typing a query — without using the visible navigation at all.
|
|
74
|
+
|
|
75
|
+
**When to use:** Command palettes are correct for developer tools, design applications, text editors, and any product where a significant portion of users are power users who build muscle memory for frequent actions. They are additive, not primary — they exist alongside conventional navigation and accelerate users who have internalized the product's vocabulary.
|
|
76
|
+
|
|
77
|
+
**When NOT to use:** Do not treat a command palette as a substitute for coherent navigation. A command palette cannot help a user who does not know what to ask for — it is a speed tool for users who already know the destination, not a discovery tool for users who do not. It is also inappropriate as a primary navigation mechanism in consumer products where most users are occasional visitors.
|
|
78
|
+
|
|
79
|
+
**Common mistakes:** Omitting fuzzy matching forces users to type exact command names, which punishes imperfect recall. The palette should match partial strings and surface close alternatives. A second mistake is limiting the palette to navigation links and excluding commands — the value of a command palette compounds when it surfaces actions (create new file, assign to user, publish draft) that would otherwise require three or four clicks through modal interfaces.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 2. Menu Depth Rules
|
|
84
|
+
|
|
85
|
+
### The 3-Click Rule Debunked
|
|
86
|
+
|
|
87
|
+
The "3-click rule" — the folk wisdom that users should reach any content within three clicks or they will abandon the site — has been tested empirically and found to be false. Research by Joshua Porter (2003) showed no significant increase in task abandonment at three clicks compared to twelve clicks, provided that each click felt like progress. Users tolerate many clicks when they trust that each click is moving them toward their goal. They abandon quickly when a single click feels uncertain or misdirected. The implication is that click count is the wrong metric; navigational confidence is the right one.
|
|
88
|
+
|
|
89
|
+
### Scent-of-Information
|
|
90
|
+
|
|
91
|
+
Information scent is the term usability researchers use for the cues that tell users whether they are on the right path. Strong scent means the link label, category name, or navigation item clearly implies the content waiting behind it. Weak scent means the label is ambiguous, jargon-heavy, or internally meaningful but user-opaque. Users follow high-scent paths confidently; they hesitate at low-scent labels and backtrack when the destination does not match their expectation. This means that IA quality is determined more by label writing than by structural depth. A five-level hierarchy with precise, descriptive labels will outperform a two-level hierarchy with vague ones.
|
|
92
|
+
|
|
93
|
+
### Practical Depth Limits
|
|
94
|
+
|
|
95
|
+
Research on spatial disorientation in hierarchical navigation consistently finds that users begin to lose track of their location at depth four and beyond. Three levels is comfortable for most users; four is acceptable with strong wayfinding support; five or more requires aggressive orientation aids and should be avoided unless the content taxonomy genuinely demands it. The practical guidance is:
|
|
96
|
+
|
|
97
|
+
| Depth | Requirement |
|
|
98
|
+
|-------|-------------|
|
|
99
|
+
| 1–2 levels | Standard navigation; no special wayfinding required |
|
|
100
|
+
| 3 levels | Breadcrumbs required on all interior pages |
|
|
101
|
+
| 4 levels | Breadcrumbs required; consider collapsing the hierarchy |
|
|
102
|
+
| 5+ levels | Structural problem; restructure before shipping |
|
|
103
|
+
|
|
104
|
+
### Wide vs. Deep
|
|
105
|
+
|
|
106
|
+
When the content volume forces a choice between a wide structure (many items per level, fewer levels) and a deep structure (fewer items per level, more levels), prefer wide. Seven options across two levels gives the user a manageable decision at each step — they scan seven options, make a choice, scan seven options again. Three options across four levels forces four sequential decisions with three options each, compounding uncertainty at every step. The combinatorial clarity of a wide structure is almost always easier to navigate than the sequential uncertainty of a deep one.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 3. Card Sort Output Interpretation
|
|
111
|
+
|
|
112
|
+
Card sorting is a generative research method that reveals users' mental models for organizing content. The three variants produce different outputs and serve different purposes in the IA design process.
|
|
113
|
+
|
|
114
|
+
### Open Card Sort
|
|
115
|
+
|
|
116
|
+
In an open card sort, participants are given cards labeled with content items and asked to group the cards however makes sense to them, then name each group. The designer provides no predefined categories. The output is a collection of emergent groupings and participant-generated labels. Analysis identifies clusters — items that multiple participants placed together — and the vocabulary participants used to name those clusters. Open card sorts are the right method when the IA is being designed from scratch or when there is genuine uncertainty about how users conceptualize the content domain.
|
|
117
|
+
|
|
118
|
+
### Closed Card Sort
|
|
119
|
+
|
|
120
|
+
In a closed card sort, participants sort cards into predefined categories chosen by the designer. The output is a fit score: what percentage of participants placed each item in the intended category. High fit scores confirm that the proposed structure matches users' mental models; low fit scores identify items that users associate with a different category than the designer assumed. Closed card sorts are the right method for validating a proposed structure before it is built.
|
|
121
|
+
|
|
122
|
+
### Hybrid Card Sort
|
|
123
|
+
|
|
124
|
+
In a hybrid card sort, participants sort into predefined categories but may also create new categories when existing ones do not fit. This balances validation (closed) with discovery (open). Hybrid sorts are best for early-stage IA validation when the designer has a candidate structure but wants to discover blind spots — items that users persistently refuse to place in the predefined categories signal that the taxonomy is missing a meaningful grouping.
|
|
125
|
+
|
|
126
|
+
### Reading a Dendrogram
|
|
127
|
+
|
|
128
|
+
Card sort analysis tools generate a dendrogram — a tree diagram showing how often items were placed together across participants. Items that cluster at the top of the dendrogram (joined early, with high similarity scores) belong together in the navigation; items that cluster late (joined only because everything must eventually merge) are weakly associated. Items that appear in multiple clusters across different participants are IA ambiguities: users genuinely disagree about where they belong, which signals that the item's label or scope is unclear. Ambiguous items require either better labeling, placement in multiple locations, or redesign of the item's concept before the IA can be finalized.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 4. Tree Testing
|
|
133
|
+
|
|
134
|
+
Tree testing validates an IA structure by presenting users with the navigation tree — text only, no visual design — and asking them to find specific items. Because there is no visual design to influence behavior, tree testing isolates the IA's structural clarity from its visual presentation.
|
|
135
|
+
|
|
136
|
+
### Success Rate
|
|
137
|
+
|
|
138
|
+
Success rate measures the percentage of participants who found the correct item. The interpretation thresholds are:
|
|
139
|
+
|
|
140
|
+
| Success Rate | Interpretation |
|
|
141
|
+
|--------------|----------------|
|
|
142
|
+
| >75% | Good IA; proceed with confidence |
|
|
143
|
+
| 60–75% | Acceptable; improve labeling before launch |
|
|
144
|
+
| <60% | Structural problem; restructure required |
|
|
145
|
+
|
|
146
|
+
A success rate below 60% is not a labeling problem — it is a structure problem. Improving labels on a fundamentally wrong structure will raise the score modestly but will not fix the underlying mismatch between the IA and users' mental models.
|
|
147
|
+
|
|
148
|
+
### Directness
|
|
149
|
+
|
|
150
|
+
Directness measures what percentage of users navigated directly to the correct branch without backtracking. A high success rate with low directness reveals a specific failure mode: users eventually found the item, but only after exploring wrong branches first. This pattern indicates that labels are misleading even when the structure is correct — users are being drawn to the wrong branch by a label that implies the target content, then redirected. Low directness is a reliable signal that high-scent labels on incorrect branches are competing with the correct destination.
|
|
151
|
+
|
|
152
|
+
### Time-on-Task
|
|
153
|
+
|
|
154
|
+
Time-on-task compares user navigation time against an expert baseline. An expert who knows the structure performs the task to establish a reference time. Users who take more than twice the expert time are experiencing significant navigational friction — they are backtracking, hesitating at ambiguous labels, or exploring dead ends before finding the correct path. Time-on-task above 2× the expert baseline should trigger qualitative follow-up to understand where users are stalling.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 5. Wayfinding
|
|
159
|
+
|
|
160
|
+
Wayfinding is the set of signals that answer the user's question "where am I?" at every point in the product. Users need orientation cues at every level of the hierarchy — without them, the product feels like a maze even when the structure is correct.
|
|
161
|
+
|
|
162
|
+
### Breadcrumbs
|
|
163
|
+
|
|
164
|
+
Breadcrumbs are mandatory at navigation depth three and above. They provide both a location signal (you are here) and an escape route (return to a higher level without using the back button). Implementation requires two accessibility attributes: `aria-label="Breadcrumb"` on the containing `<nav>` element, and `aria-current="page"` on the final item in the trail. Breadcrumbs should reflect the IA hierarchy, not the user's click history — they are a map, not a path trace. Do not use breadcrumbs at depth one or two; they add visual noise without navigational value at shallow depths.
|
|
165
|
+
|
|
166
|
+
### Progress Indicators
|
|
167
|
+
|
|
168
|
+
Progress indicators serve wayfinding in multi-step flows by answering "how far along am I and how much remains?" They should communicate the total number of steps upfront — users make commitment decisions based on total cost, and hiding the endpoint is a dark pattern that erodes trust when the true length is revealed. Never add steps to a flow mid-sequence after the user has begun; if the flow must branch, show the branch as a conditional path rather than as a surprise extension. The visual treatment should distinguish completed steps, the current step, and remaining steps — active state alone is insufficient.
|
|
169
|
+
|
|
170
|
+
### Orientation Cues
|
|
171
|
+
|
|
172
|
+
Every screen needs at least three orientation signals: the active state in the navigation (which section is selected), the page title (what this page is called), and section headings within the content (how this page is organized). These signals work together to maintain the user's spatial model of the product. When any of the three is missing, users compensate by re-reading navigation labels or scrolling back to the top — both are friction that well-designed orientation cues eliminate.
|
|
173
|
+
|
|
174
|
+
### Back-Button Contract
|
|
175
|
+
|
|
176
|
+
The browser back button carries a strong user expectation: pressing it returns to the previous logical state. This contract is violated whenever back navigates to an unexpected location, triggers a data loss warning, or causes a full page reload that discards scroll position or filled form data. Single-page applications must manage browser history explicitly to honor this contract — pushState for new views, replaceState for filter changes that should not create new history entries. A back-button that shows a "you will lose your changes" modal is almost always a sign that the state management design is wrong, not that users should save more often.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 6. URL Design as IA
|
|
181
|
+
|
|
182
|
+
### URL Structure Reflects IA
|
|
183
|
+
|
|
184
|
+
The URL is the IA made visible. A well-structured URL encodes the user's location in the hierarchy and gives users a mental model of the content space before the page loads. `/products/electronics/laptops/macbook-pro` communicates four levels of IA at a glance; a user who reads that URL understands where they are, what the parent categories are, and can predict what they will find by truncating the path. URLs should be designed in parallel with the IA structure, not retrofitted afterward — mismatches between the URL structure and the navigation structure create disorientation.
|
|
185
|
+
|
|
186
|
+
### Canonical URLs
|
|
187
|
+
|
|
188
|
+
Every content page should have exactly one canonical URL. Parameter proliferation — multiple URL forms that all resolve to the same content — fragments link equity, confuses users who share URLs, and makes it impossible to use the URL as an orientation tool. Filter and sort parameters in primary navigation (category pages, search results) should use clean path segments or a minimal, consistent parameter scheme. Session tokens, tracking parameters, and internal state identifiers should not appear in canonical URLs. The `<link rel="canonical">` tag is a fallback for URL normalization, not a substitute for URL discipline.
|
|
189
|
+
|
|
190
|
+
### Semantic Slugs
|
|
191
|
+
|
|
192
|
+
Content URLs should use human-readable slugs derived from the content title, not opaque numeric identifiers. `/articles/how-to-center-a-div` tells a user — and a search engine — what the page contains before they visit it. `/articles/1234` communicates nothing. Semantic slugs serve three IA purposes: they reinforce content identity, they aid orientation in the URL bar, and they build trust by making the destination legible before the page loads. When titles change, retain the original slug and redirect to the new one rather than changing the canonical URL — URL stability is a form of user trust.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 7. Search vs. Browse Trade-offs
|
|
197
|
+
|
|
198
|
+
Search and browse are complementary navigation strategies, not competing ones. They serve different user states, and a product that forces users to choose only one will fail a significant portion of its audience.
|
|
199
|
+
|
|
200
|
+
### When Search Wins
|
|
201
|
+
|
|
202
|
+
Search is the fastest path for users who know what they want and can express it in words. A user who wants "MacBook Pro 14-inch M3" will find it faster by typing than by navigating five levels of product hierarchy. Search also scales to large content sets where browse becomes impractical — a catalog of one million products cannot be browsed; it must be searched. The failure mode for search is vocabulary mismatch: users who do not know the product's terminology cannot formulate a successful query. A user who wants "noise-canceling headphones" may not know a specific brand name or model identifier, and a search engine that requires precise vocabulary will return nothing useful.
|
|
203
|
+
|
|
204
|
+
### When Browse Wins
|
|
205
|
+
|
|
206
|
+
Browse is necessary for discovery — users who are exploring rather than seeking a specific target, users who are learning the product's content space, and users who do not yet know the vocabulary of the domain. A first-time visitor to an e-commerce site discovers product categories by browsing; they cannot search for a category they did not know existed. Browse also serves users who make decisions through comparison — seeing all options in a category simultaneously is a different cognitive task than searching for options one at a time.
|
|
207
|
+
|
|
208
|
+
### Providing Both
|
|
209
|
+
|
|
210
|
+
The rule is to provide both search and browse, and to ensure that neither is the only path to deep content. Placing valuable content behind search-only access excludes users who browse; placing it behind browse-only access excludes users who search. The two systems should be complementary: browsing should surface search when the category is large; search should surface browsing when the query is broad or ambiguous.
|
|
211
|
+
|
|
212
|
+
### Autocomplete
|
|
213
|
+
|
|
214
|
+
Autocomplete reduces the vocabulary mismatch problem by surfacing valid query terms as users type. It must handle synonyms (headphones / earphones / earbuds should all surface the same category), common misspellings (a typo-tolerant matching algorithm, not exact string matching), and partial matches (the query "mac" should surface MacBook before the user has finished typing). Autocomplete that returns zero results for a near-miss query fails silently — the user sees nothing and concludes that the content does not exist. The system should always return something, even if it is a suggestion to browse a related category.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 8. Faceted Navigation
|
|
219
|
+
|
|
220
|
+
Faceted navigation is a specific navigation pattern that deserves its own detailed treatment because its implementation quality directly determines whether large content sets are navigable or overwhelming.
|
|
221
|
+
|
|
222
|
+
### Attribute Facets
|
|
223
|
+
|
|
224
|
+
Attribute facets are non-hierarchical, independent dimensions — color, size, price range, rating, availability. Users may select multiple values within a single facet (red or blue) and across multiple facets (red, size M, under $50) simultaneously. Each selection narrows the result set by the intersection of all active filters. Attribute facets should be multi-select by default within a single facet — requiring users to choose only one value per facet (single-select) is a common implementation mistake that forces sequential filtering rather than parallel narrowing.
|
|
225
|
+
|
|
226
|
+
### Hierarchical Facets
|
|
227
|
+
|
|
228
|
+
Hierarchical facets have parent-child relationships: selecting a parent value constrains the available child values. A "Category" facet that shows Electronics → Laptops → Gaming Laptops is hierarchical — selecting "Laptops" hides subcategories from other categories and reveals laptop-specific subcategories. Hierarchical facets are appropriate when the attribute space is genuinely taxonomic and when child values are meaningless without their parent context. They are inappropriate when users need to select values from multiple branches of the hierarchy simultaneously.
|
|
229
|
+
|
|
230
|
+
### Progressive Disclosure of Facets
|
|
231
|
+
|
|
232
|
+
Showing all available facets simultaneously creates a filtering interface that resembles a form more than a navigation tool. The correct approach is progressive disclosure: surface the three to five facets that are most frequently used and most useful for narrowing the result set, then hide the remaining facets behind a "More filters" or "Advanced filters" control. Which facets to surface by default should be determined by usage data, not by the designer's assumptions about what users care about. Surfacing rarely-used facets above frequently-used ones is a common IA mistake that buries the most valuable filtering controls.
|
|
233
|
+
|
|
234
|
+
### Facet Count Display
|
|
235
|
+
|
|
236
|
+
Showing the item count beside each facet value communicates two things: the density of information behind that filter value, and whether a given combination is possible. A facet value showing "(0)" tells users that selecting it in combination with existing filters will produce an empty result — this information should be surfaced before the user clicks, not after. Count display also helps users calibrate their filtering strategy: a facet value with 847 items and one with 3 items communicate different search territory. Hiding counts forces users to click and discover, which creates unnecessary round-trips between the filter controls and the result set.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Audit Checklist
|
|
241
|
+
|
|
242
|
+
Use this checklist when reviewing the IA of an existing product or evaluating a proposed structure.
|
|
243
|
+
|
|
244
|
+
| Check | Pass criteria |
|
|
245
|
+
|-------|--------------|
|
|
246
|
+
| Navigation pattern matches content type | The structural model (hub-and-spoke, nested, faceted, etc.) fits the content volume and user task type |
|
|
247
|
+
| Depth is ≤4 levels | No path from root to leaf requires more than four navigation steps |
|
|
248
|
+
| Breadcrumbs present at depth ≥3 | All pages at depth three and above display a breadcrumb with correct ARIA attributes |
|
|
249
|
+
| Labels use user vocabulary | Navigation labels match the words users use, not internal jargon or org-chart terms |
|
|
250
|
+
| Search and browse both provided | Users can reach all content by both search and browsing |
|
|
251
|
+
| URLs are semantic and canonical | Every content page has one clean, readable, stable URL |
|
|
252
|
+
| Facet counts are visible | Each facet value shows item count; zero-result combinations are flagged before selection |
|
|
253
|
+
| Back button behaves predictably | Pressing back returns to the previous logical state without data loss warnings |
|
|
254
|
+
| Tree test success rate >75% | Validated by tree testing before launch, or flagged for post-launch testing |
|
|
255
|
+
| Progress indicators show total steps | Multi-step flows communicate total step count upfront |
|