@schilling.mark.a/software-methodology 1.0.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/.github/copilot-instructions.md +106 -0
- package/LICENSE +21 -0
- package/README.md +174 -0
- package/atdd-workflow/SKILL.md +117 -0
- package/atdd-workflow/references/green-phase.md +38 -0
- package/atdd-workflow/references/red-phase.md +62 -0
- package/atdd-workflow/references/refactor-phase.md +75 -0
- package/bdd-specification/SKILL.md +88 -0
- package/bdd-specification/references/example-mapping.md +105 -0
- package/bdd-specification/references/gherkin-patterns.md +214 -0
- package/cicd-pipeline/SKILL.md +64 -0
- package/cicd-pipeline/references/deployment-rollback.md +176 -0
- package/cicd-pipeline/references/environment-promotion.md +159 -0
- package/cicd-pipeline/references/pipeline-stages.md +198 -0
- package/clean-code/SKILL.md +77 -0
- package/clean-code/references/behavioral-patterns.md +329 -0
- package/clean-code/references/creational-patterns.md +197 -0
- package/clean-code/references/enterprise-patterns.md +334 -0
- package/clean-code/references/solid.md +230 -0
- package/clean-code/references/structural-patterns.md +238 -0
- package/continuous-improvement/SKILL.md +69 -0
- package/continuous-improvement/references/measurement.md +133 -0
- package/continuous-improvement/references/process-update.md +118 -0
- package/continuous-improvement/references/root-cause-analysis.md +144 -0
- package/dist/atdd-workflow.skill +0 -0
- package/dist/bdd-specification.skill +0 -0
- package/dist/cicd-pipeline.skill +0 -0
- package/dist/clean-code.skill +0 -0
- package/dist/continuous-improvement.skill +0 -0
- package/dist/green-implementation.skill +0 -0
- package/dist/product-strategy.skill +0 -0
- package/dist/story-mapping.skill +0 -0
- package/dist/ui-design-system.skill +0 -0
- package/dist/ui-design-workflow.skill +0 -0
- package/dist/ux-design.skill +0 -0
- package/dist/ux-research.skill +0 -0
- package/docs/INTEGRATION.md +229 -0
- package/docs/QUICKSTART.md +126 -0
- package/docs/SHARING.md +828 -0
- package/docs/SKILLS.md +296 -0
- package/green-implementation/SKILL.md +155 -0
- package/green-implementation/references/angular-patterns.md +239 -0
- package/green-implementation/references/common-rejections.md +180 -0
- package/green-implementation/references/playwright-patterns.md +321 -0
- package/green-implementation/references/rxjs-patterns.md +161 -0
- package/package.json +57 -0
- package/product-strategy/SKILL.md +71 -0
- package/product-strategy/references/business-model-canvas.md +199 -0
- package/product-strategy/references/canvas-alignment.md +108 -0
- package/product-strategy/references/value-proposition-canvas.md +159 -0
- package/project-templates/context.md.template +56 -0
- package/project-templates/test-strategy.md.template +87 -0
- package/story-mapping/SKILL.md +104 -0
- package/story-mapping/references/backbone.md +66 -0
- package/story-mapping/references/release-planning.md +92 -0
- package/story-mapping/references/task-template.md +78 -0
- package/story-mapping/references/walking-skeleton.md +63 -0
- package/ui-design-system/SKILL.md +48 -0
- package/ui-design-system/references/accessibility.md +134 -0
- package/ui-design-system/references/components.md +257 -0
- package/ui-design-system/references/design-tokens.md +209 -0
- package/ui-design-system/references/layout.md +136 -0
- package/ui-design-system/references/typography.md +114 -0
- package/ui-design-workflow/SKILL.md +90 -0
- package/ui-design-workflow/references/acceptance-targets.md +144 -0
- package/ui-design-workflow/references/component-selection.md +108 -0
- package/ui-design-workflow/references/scenario-to-ui.md +151 -0
- package/ui-design-workflow/references/screen-flows.md +116 -0
- package/ux-design/SKILL.md +75 -0
- package/ux-design/references/information-architecture.md +144 -0
- package/ux-design/references/interaction-patterns.md +141 -0
- package/ux-design/references/onboarding.md +159 -0
- package/ux-design/references/usability-evaluation.md +132 -0
- package/ux-research/SKILL.md +75 -0
- package/ux-research/references/journey-mapping.md +168 -0
- package/ux-research/references/mental-models.md +106 -0
- package/ux-research/references/personas.md +102 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Screen Flows
|
|
2
|
+
|
|
3
|
+
## What is a Screen Flow?
|
|
4
|
+
|
|
5
|
+
A screen flow documents every screen a feature touches, how they connect, what each screen contains, and how it behaves. It is the design specification that acceptance tests verify against.
|
|
6
|
+
|
|
7
|
+
## Design Principles
|
|
8
|
+
|
|
9
|
+
**Follow the user, not the feature.** Order screens by the path the user walks, not by technical grouping. A user creating an invoice starts at the list, moves to the form, ends at the detail. Design in that order.
|
|
10
|
+
|
|
11
|
+
**One screen flow per feature.** A feature file maps to one screen flow document. If a feature touches screens that already exist, document what changes on those screens — don't redesign from scratch.
|
|
12
|
+
|
|
13
|
+
**Design for the walking skeleton first.** The minimum viable version of each screen. Depth (sorting, filtering, pagination) comes in later releases.
|
|
14
|
+
|
|
15
|
+
**Annotate with scenario references.** Every design decision should trace back to a specific scenario. This makes acceptance tests straightforward to write.
|
|
16
|
+
|
|
17
|
+
## Screen Document Structure
|
|
18
|
+
|
|
19
|
+
Each screen within the flow follows this structure:
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
### [Screen Name]
|
|
23
|
+
|
|
24
|
+
**Entry from:** [Previous screen] via [action — e.g., "Create button"]
|
|
25
|
+
**Scenario refs:** [TASK-ID], Scenario: [scenario name]
|
|
26
|
+
|
|
27
|
+
#### Layout
|
|
28
|
+
[Describe the spatial arrangement — what's at the top, middle, bottom.
|
|
29
|
+
Use a simple ASCII wireframe or prose description.]
|
|
30
|
+
|
|
31
|
+
#### Data Displayed
|
|
32
|
+
| Element | Source | Format |
|
|
33
|
+
|---------|--------|--------|
|
|
34
|
+
| [Label] | [where data comes from] | [how it's formatted] |
|
|
35
|
+
|
|
36
|
+
#### Actions
|
|
37
|
+
| Action | Control Type | Outcome |
|
|
38
|
+
|--------|-------------|---------|
|
|
39
|
+
| [What user does] | [button/input/select/link] | [what happens next] |
|
|
40
|
+
|
|
41
|
+
#### States
|
|
42
|
+
- **Default:** [what the screen looks like when first loaded]
|
|
43
|
+
- **Loading:** [what the user sees while data is fetching]
|
|
44
|
+
- **Empty:** [what the user sees when there's no data]
|
|
45
|
+
- **Error:** [what the user sees when something fails]
|
|
46
|
+
- **Success:** [what the user sees after a successful action]
|
|
47
|
+
|
|
48
|
+
#### Accessibility
|
|
49
|
+
- [Key keyboard navigation path]
|
|
50
|
+
- [Screen reader label for primary action]
|
|
51
|
+
- [Any ARIA roles or states needed]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## File Format
|
|
55
|
+
|
|
56
|
+
Create: `/docs/ui-design/screen-flows/[feature-name].md`
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
# Screen Flow: [Feature Name]
|
|
60
|
+
|
|
61
|
+
**Feature file:** `/features/[domain]/[feature].feature`
|
|
62
|
+
**Story map task:** [TASK-ID]
|
|
63
|
+
**Release:** [Release name]
|
|
64
|
+
|
|
65
|
+
## Flow Summary
|
|
66
|
+
|
|
67
|
+
[Simple prose description of the user's path through the feature.
|
|
68
|
+
2-3 sentences maximum.]
|
|
69
|
+
|
|
70
|
+
## Flow Diagram
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
[Screen A] --[action]--> [Screen B] --[action]--> [Screen C]
|
|
74
|
+
|
|
|
75
|
+
[error] --> [Screen B with error state]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Screens
|
|
79
|
+
|
|
80
|
+
[Screen documents in user-flow order, using the structure above]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Notation for Flow Diagrams
|
|
84
|
+
|
|
85
|
+
Keep diagrams simple. ASCII is fine — the point is connectivity, not visual polish.
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
[List Page] --[Create button]--> [Create Form]
|
|
89
|
+
[Create Form] --[Save]--> [Detail Page]
|
|
90
|
+
[Create Form] --[Cancel]--> [List Page]
|
|
91
|
+
[Create Form] --[validation error]--> [Create Form, error state]
|
|
92
|
+
[Detail Page] --[Edit button]--> [Edit Form]
|
|
93
|
+
[Detail Page] --[Back]--> [List Page]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Designing for Existing Screens
|
|
97
|
+
|
|
98
|
+
When a new feature adds to a screen that already exists, document only the delta:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
### Invoice List (modified)
|
|
102
|
+
|
|
103
|
+
**Changes for this feature:**
|
|
104
|
+
- New column: "Status" — displays invoice state (Draft/Sent/Paid/Cancelled)
|
|
105
|
+
- New filter: "Status" dropdown in filter bar
|
|
106
|
+
- New action: "Export" button in toolbar
|
|
107
|
+
|
|
108
|
+
**Unchanged:** Sorting, pagination, search, row selection
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Common Mistakes
|
|
112
|
+
|
|
113
|
+
- Designing screens that no scenario requires — stick to what the scenarios describe
|
|
114
|
+
- Skipping the empty and error states — these are scenarios too
|
|
115
|
+
- Making screens too dense — if a screen has more than 7 primary actions, it's doing too much. Split into sub-screens or progressive disclosure
|
|
116
|
+
- Ignoring mobile — if the product will be used on mobile, note responsive breakpoints
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ux-design
|
|
3
|
+
description: UX design skill for information architecture, interaction design patterns, usability evaluation, and onboarding strategy. Use after BDD scenarios are written and before UI design workflow runs. Triggered when the user says "design the experience", "plan the IA", "how should this interact", "is this usable", or "design onboarding". Reads personas, mental models, and feature files. Produces IA documents, interaction specs, and usability evaluations. Ensures the product is findable, learnable, and recoverable before any screens are designed.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# UX Design
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Bridges research and visual design. Takes what ux-research learned about users and what bdd-specification defined as scenarios, then answers the structural questions: How is the product organized? How do controls behave? Will users actually be able to use this? How do first-time users learn it? These questions must be answered before screen flows are designed.
|
|
11
|
+
|
|
12
|
+
## When to Run This Skill
|
|
13
|
+
|
|
14
|
+
- **New feature with UI:** After scenarios are written, before ui-design-workflow runs
|
|
15
|
+
- **Restructuring existing features:** When navigation is confusing or task completion rates are low
|
|
16
|
+
- **New user segment:** When the product must now serve users with different mental models or skill levels
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### Step 1: Define Information Architecture
|
|
21
|
+
|
|
22
|
+
IA is how the product is organized — what lives where, how users find things, how the mental hierarchy maps to navigation. A wrong IA means users can't find what they need. A right IA feels obvious.
|
|
23
|
+
|
|
24
|
+
See `references/information-architecture.md` for structure, navigation patterns, and how to derive IA from mental models.
|
|
25
|
+
|
|
26
|
+
Create: `/docs/ux-design/information-architecture.md`
|
|
27
|
+
|
|
28
|
+
### Step 2: Define Interaction Patterns
|
|
29
|
+
|
|
30
|
+
Interaction patterns are the rules that govern how controls behave. Consistency across the product means users learn once and apply everywhere. Inconsistency means every screen feels like a new product.
|
|
31
|
+
|
|
32
|
+
See `references/interaction-patterns.md` for the pattern catalog — feedback loops, form behavior, progressive disclosure, error recovery, and state transitions.
|
|
33
|
+
|
|
34
|
+
Create or update: `/docs/ux-design/interaction-patterns.md`
|
|
35
|
+
|
|
36
|
+
### Step 3: Evaluate Usability
|
|
37
|
+
|
|
38
|
+
Before any screen is designed, evaluate the planned experience against established usability heuristics. Catch problems at the cheapest possible point — on paper, not after implementation.
|
|
39
|
+
|
|
40
|
+
See `references/usability-evaluation.md` for the evaluation framework, heuristics, and how to produce an evaluation report.
|
|
41
|
+
|
|
42
|
+
Create: `/docs/ux-design/usability-evaluation/[feature-name].md`
|
|
43
|
+
|
|
44
|
+
### Step 4: Design Onboarding Strategy
|
|
45
|
+
|
|
46
|
+
First-time users have no context. They don't know what the product does, where things are, or what to do first. Onboarding bridges that gap — but only if it's designed intentionally.
|
|
47
|
+
|
|
48
|
+
See `references/onboarding.md` for onboarding patterns, when to use each, and how to design for the empty state.
|
|
49
|
+
|
|
50
|
+
Create: `/docs/ux-design/onboarding.md`
|
|
51
|
+
|
|
52
|
+
## File Structure
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
docs/ux-design/
|
|
56
|
+
├── information-architecture.md ← Product organization and navigation
|
|
57
|
+
├── interaction-patterns.md ← How controls behave across the product
|
|
58
|
+
├── onboarding.md ← First-time user experience strategy
|
|
59
|
+
└── usability-evaluation/
|
|
60
|
+
└── [feature-name].md ← Evaluation report per feature
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Integration
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
ux-research → personas, mental models, journeys
|
|
67
|
+
↓
|
|
68
|
+
bdd-specification → scenarios (Given/When/Then)
|
|
69
|
+
↓
|
|
70
|
+
ux-design (this skill) → IA, interaction patterns, usability check, onboarding
|
|
71
|
+
↓
|
|
72
|
+
ui-design-workflow → screen flows and component specs
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
IA determines the navigation structure that screen flows follow. Interaction patterns determine how components behave in every screen. Usability evaluation catches problems before screens are designed. Onboarding strategy determines what the empty state and first-use experience look like.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Information Architecture
|
|
2
|
+
|
|
3
|
+
## What Is Information Architecture?
|
|
4
|
+
|
|
5
|
+
IA is the structure of the product — how content and features are organized, categorized, and labeled so users can find what they need. It determines what appears in the navigation, how pages relate to each other, and what mental categories the product uses.
|
|
6
|
+
|
|
7
|
+
Good IA feels invisible. Users find things where they expect them without thinking about it. Bad IA feels like a maze — users know what they want but can't find it.
|
|
8
|
+
|
|
9
|
+
## Deriving IA from Mental Models and Story Maps
|
|
10
|
+
|
|
11
|
+
IA is not invented. It is derived from two sources:
|
|
12
|
+
|
|
13
|
+
### Source 1: Mental Models (from ux-research)
|
|
14
|
+
|
|
15
|
+
Read `/docs/ux-research/mental-models/`. The mental model defines the categories users expect. If the user thinks of their work in terms of "invoices", "customers", and "payments", those are the top-level categories — regardless of how the database is structured.
|
|
16
|
+
|
|
17
|
+
**Rule:** Navigation labels match mental model vocabulary. Never expose system terminology in navigation.
|
|
18
|
+
|
|
19
|
+
### Source 2: Story Map Backbone (from story-mapping)
|
|
20
|
+
|
|
21
|
+
Read `/docs/story-map/backbone.md`. Each activity on the backbone is a potential top-level navigation item. The backbone is already ordered by user flow — IA follows that order.
|
|
22
|
+
|
|
23
|
+
**Rule:** If an activity has enough tasks to warrant its own section, it becomes a nav item. If it has 1–2 tasks, it may live inside a parent section.
|
|
24
|
+
|
|
25
|
+
## Navigation Patterns
|
|
26
|
+
|
|
27
|
+
Choose ONE pattern for the product. Do not mix patterns. Consistency is more important than any individual pattern being "better."
|
|
28
|
+
|
|
29
|
+
### Top Navigation Bar
|
|
30
|
+
**When to use:** 3–6 top-level sections. Desktop-primary products. Products where users switch between sections frequently.
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
[Logo] [Section A] [Section B] [Section C] [Section D] [User]
|
|
34
|
+
^^^^^^^^^^
|
|
35
|
+
Active section highlighted
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Rules:**
|
|
39
|
+
- Maximum 6 items. More = group into a dropdown or rethink the IA.
|
|
40
|
+
- Active section is always visually distinct.
|
|
41
|
+
- Sub-sections appear as a secondary nav row or dropdown on hover/click.
|
|
42
|
+
|
|
43
|
+
### Sidebar Navigation
|
|
44
|
+
**When to use:** 5+ top-level sections with sub-sections. App-style products where users spend long sessions inside one section. Products with hierarchical content.
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
┌─────────────┐
|
|
48
|
+
│ [Logo] │
|
|
49
|
+
│ │
|
|
50
|
+
│ [Section A] │ ← active
|
|
51
|
+
│ [Sub 1] │
|
|
52
|
+
│ [Sub 2] │
|
|
53
|
+
│ [Section B] │
|
|
54
|
+
│ [Section C] │
|
|
55
|
+
└─────────────┘
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Rules:**
|
|
59
|
+
- Expandable/collapsible sections keep the sidebar scannable.
|
|
60
|
+
- Active item + active section are both highlighted.
|
|
61
|
+
- On mobile, sidebar becomes a drawer opened by hamburger menu.
|
|
62
|
+
|
|
63
|
+
### Bottom Navigation (Mobile Only)
|
|
64
|
+
**When to use:** Mobile-first products with 3–5 primary sections. Users need one-thumb access to all major areas.
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
┌───────────────────────┐
|
|
68
|
+
│ │
|
|
69
|
+
│ [Content] │
|
|
70
|
+
│ │
|
|
71
|
+
├───────────────────────┤
|
|
72
|
+
│ [A] [B] [C] [D] │ ← icons + labels, active highlighted
|
|
73
|
+
└───────────────────────┘
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Rules:**
|
|
77
|
+
- Maximum 5 items (4 is ideal).
|
|
78
|
+
- Icons must be universally understood or labeled.
|
|
79
|
+
- Current section is highlighted. Badges show counts (unread, pending).
|
|
80
|
+
|
|
81
|
+
## Labeling Rules
|
|
82
|
+
|
|
83
|
+
Labels are the words that appear in navigation and headings. They must match the mental model vocabulary exactly.
|
|
84
|
+
|
|
85
|
+
- Use the terms from `/docs/ubiquitous-language.md`
|
|
86
|
+
- Use nouns for sections ("Invoices"), not verbs ("Create Invoice")
|
|
87
|
+
- Use plural for collections ("Invoices", "Customers"), singular for individual items ("Invoice #001")
|
|
88
|
+
- Never use internal system names, database table names, or technical terms in navigation
|
|
89
|
+
|
|
90
|
+
## Hierarchy Rules
|
|
91
|
+
|
|
92
|
+
- **Maximum depth: 3 levels.** Top section → Sub-section → Detail page. Deeper than 3 means the IA is too complex. Flatten or split.
|
|
93
|
+
- **Breadcrumbs for depth.** Any page more than 2 levels deep shows breadcrumbs so users know where they are and can navigate back.
|
|
94
|
+
- **Current location is always visible.** The user must always be able to answer "where am I?" by looking at the navigation.
|
|
95
|
+
|
|
96
|
+
## File Format
|
|
97
|
+
|
|
98
|
+
Create: `/docs/ux-design/information-architecture.md`
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
# Information Architecture
|
|
102
|
+
|
|
103
|
+
**Navigation pattern:** [Top nav / Sidebar / Bottom nav]
|
|
104
|
+
**Source:** Derived from personas [list] and backbone activities [list]
|
|
105
|
+
|
|
106
|
+
## Navigation Structure
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
[Section A: Label]
|
|
110
|
+
├── [Sub-section A1: Label]
|
|
111
|
+
├── [Sub-section A2: Label]
|
|
112
|
+
└── Detail: [Individual item page]
|
|
113
|
+
|
|
114
|
+
[Section B: Label]
|
|
115
|
+
├── [Sub-section B1: Label]
|
|
116
|
+
└── Detail: [Individual item page]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Section Definitions
|
|
120
|
+
|
|
121
|
+
### [Section A: Label]
|
|
122
|
+
**Mental model source:** [Which mental model this maps to]
|
|
123
|
+
**Backbone activity:** [Which story map activity]
|
|
124
|
+
**Contains:** [What the user finds here]
|
|
125
|
+
**Entry point:** [How users get here — nav item, link, etc.]
|
|
126
|
+
|
|
127
|
+
### [Section B: Label]
|
|
128
|
+
[Same structure]
|
|
129
|
+
|
|
130
|
+
## Labeling Decisions
|
|
131
|
+
| Label used | Why | Alternative rejected | Why rejected |
|
|
132
|
+
|---|---|---|---|
|
|
133
|
+
| [Label] | [Reason — matches mental model / ubiquitous language] | [Alt] | [Why not] |
|
|
134
|
+
|
|
135
|
+
## Navigation Rules (product-specific)
|
|
136
|
+
- [Any rules specific to this product's IA]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Common IA Mistakes
|
|
140
|
+
|
|
141
|
+
- **Organizing by feature instead of by user goal.** "Reports" is a feature. "My Business Health" is a user goal. Organize around what the user wants to accomplish.
|
|
142
|
+
- **Too many top-level sections.** If navigation has 8+ items, users can't scan it. Group related sections. Reduce scope.
|
|
143
|
+
- **Inconsistent labeling.** Calling something "Invoices" in the nav but "Bills" in the content. Pick one term. Use it everywhere.
|
|
144
|
+
- **Burying critical actions.** If the primary action (create invoice) requires more than 2 clicks from any page, the IA is wrong. Primary actions should be reachable from anywhere.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Interaction Patterns
|
|
2
|
+
|
|
3
|
+
## What Are Interaction Patterns?
|
|
4
|
+
|
|
5
|
+
Interaction patterns are the rules that govern how controls behave. They are product-wide conventions. A button behaves the same way on every screen. A form validates the same way everywhere. An error is presented the same way throughout.
|
|
6
|
+
|
|
7
|
+
Consistency here is the difference between a product that feels like one cohesive tool and a product that feels like a collection of unrelated screens.
|
|
8
|
+
|
|
9
|
+
## Pattern 1: Feedback Loops
|
|
10
|
+
|
|
11
|
+
Every action the user takes must produce a visible result. Without feedback, users don't know if their action worked, repeat it (causing duplicates), or lose trust.
|
|
12
|
+
|
|
13
|
+
### Feedback Timing
|
|
14
|
+
|
|
15
|
+
| Action type | Feedback timing | Feedback type |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| Button click (instant action) | Immediate (< 200ms) | Visual state change on button |
|
|
18
|
+
| Form submission | Immediate (button shows loading) | Loading state, then success or error |
|
|
19
|
+
| Data save (auto-save) | Within 2 seconds | Subtle "Saved" indicator, fades after 3s |
|
|
20
|
+
| Background process | Within 5 seconds | Progress indicator or status update |
|
|
21
|
+
| Long-running process (> 10s) | Ongoing | Progress bar with estimated time, or "We're working on it" |
|
|
22
|
+
|
|
23
|
+
### Feedback Hierarchy
|
|
24
|
+
|
|
25
|
+
- **Micro-feedback:** Button press ripple, checkbox toggle animation. Confirms the control registered the interaction.
|
|
26
|
+
- **Action feedback:** Toast notification, inline status change. Confirms the action completed.
|
|
27
|
+
- **State feedback:** Page updates, data refreshes. Confirms the result is reflected.
|
|
28
|
+
|
|
29
|
+
**Rule:** Never skip a level. If a button click triggers a save, the user needs micro-feedback (button reacts), action feedback (save confirmed), AND state feedback (the saved data appears).
|
|
30
|
+
|
|
31
|
+
## Pattern 2: Form Behavior
|
|
32
|
+
|
|
33
|
+
Forms are the most common interaction pattern. Consistency here has the highest impact.
|
|
34
|
+
|
|
35
|
+
### Validation Timing
|
|
36
|
+
|
|
37
|
+
| Validation type | When to validate | Why |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| Required field | On blur (when user leaves the field) | Validates too early (on focus) is annoying. Too late (on submit) wastes time. |
|
|
40
|
+
| Format validation (email, phone) | On blur | Same reasoning as required fields |
|
|
41
|
+
| Cross-field validation (password confirm) | On blur of the second field | Can't validate until both fields have values |
|
|
42
|
+
| Business rule validation (unique name) | On blur, requires server call | Must check against existing data |
|
|
43
|
+
| Form-level validation | On submit | Catches anything field-level missed |
|
|
44
|
+
|
|
45
|
+
### Error Presentation
|
|
46
|
+
|
|
47
|
+
- Field-level errors appear **inline, directly below the field**. Never at the top of the form alone.
|
|
48
|
+
- The field border changes to error state (see ui-design-system components reference).
|
|
49
|
+
- Focus moves to the first field with an error on submit.
|
|
50
|
+
- Error messages are specific: "Email must contain @" not "Invalid input".
|
|
51
|
+
- Error messages suggest correction: "Must be at least 8 characters (currently 5)" not just "Too short".
|
|
52
|
+
|
|
53
|
+
### Success After Submit
|
|
54
|
+
|
|
55
|
+
- Form disappears or transitions to a confirmation/detail view
|
|
56
|
+
- A success indicator confirms what was created or saved
|
|
57
|
+
- The user can immediately see the result of their action — no need to navigate elsewhere to verify
|
|
58
|
+
|
|
59
|
+
## Pattern 3: Progressive Disclosure
|
|
60
|
+
|
|
61
|
+
Show only what the user needs right now. Reveal more as their context develops. Overwhelming users with all options at once increases cognitive load and reduces task completion.
|
|
62
|
+
|
|
63
|
+
### Levels of Disclosure
|
|
64
|
+
|
|
65
|
+
**Level 1 — Default view:** The minimum controls needed for the most common action. Everything else is hidden.
|
|
66
|
+
|
|
67
|
+
**Level 2 — Expanded view:** Additional options revealed when the user indicates they need them (clicks "More options", selects a specific variant, etc.)
|
|
68
|
+
|
|
69
|
+
**Level 3 — Advanced view:** Power-user options behind a clearly labeled "Advanced" toggle or section. Most users never see this.
|
|
70
|
+
|
|
71
|
+
### When to Disclose
|
|
72
|
+
|
|
73
|
+
| Trigger | Pattern |
|
|
74
|
+
|---|---|
|
|
75
|
+
| User clicks "More options" | Expand additional fields/controls inline |
|
|
76
|
+
| User selects a specific type | Show fields relevant to that type only |
|
|
77
|
+
| User has completed the basic flow | Offer enhancements ("Want to add a discount?") |
|
|
78
|
+
| User explicitly opts in | Show advanced configuration panel |
|
|
79
|
+
|
|
80
|
+
### Rules
|
|
81
|
+
- The default view must be sufficient to complete the primary task
|
|
82
|
+
- Disclosed content appears adjacent to the trigger, not in a separate location
|
|
83
|
+
- Disclosure state persists within the session — don't collapse it every time
|
|
84
|
+
- Label what's hidden: "3 more options available" not just a vague "More" button
|
|
85
|
+
|
|
86
|
+
## Pattern 4: Error Recovery
|
|
87
|
+
|
|
88
|
+
Errors will happen. The product's job is to make recovery as painless as possible. A product that handles errors gracefully builds more trust than a product that never has errors but recovers badly when it does.
|
|
89
|
+
|
|
90
|
+
### Error Categories and Recovery Patterns
|
|
91
|
+
|
|
92
|
+
**Validation error (user input is wrong):**
|
|
93
|
+
- Show inline error message
|
|
94
|
+
- Keep all entered data intact — don't clear the form
|
|
95
|
+
- Focus on the first error field
|
|
96
|
+
- User corrects and resubmits — no penalty, no restart
|
|
97
|
+
|
|
98
|
+
**Not found (resource doesn't exist):**
|
|
99
|
+
- Show a clear message: "[Entity] not found"
|
|
100
|
+
- Suggest what to do next: "Check the ID and try again" or link to the list view
|
|
101
|
+
- Never show a blank page or a generic error code
|
|
102
|
+
|
|
103
|
+
**Permission denied (user can't do this):**
|
|
104
|
+
- Show a clear message: "You don't have permission to [action]"
|
|
105
|
+
- Explain what permission is needed or who to contact
|
|
106
|
+
- Don't hide the feature entirely — that makes it invisible and confusing
|
|
107
|
+
|
|
108
|
+
**Server error (something went wrong on our side):**
|
|
109
|
+
- Show a human-readable message: "Something went wrong. Please try again."
|
|
110
|
+
- Preserve entered data wherever possible
|
|
111
|
+
- Offer a retry button
|
|
112
|
+
- If the error persists, suggest contacting support
|
|
113
|
+
|
|
114
|
+
**Network error (connectivity lost):**
|
|
115
|
+
- Show a connection status indicator
|
|
116
|
+
- Queue actions locally if possible — complete them when reconnected
|
|
117
|
+
- Never lose unsaved work due to a network blip
|
|
118
|
+
|
|
119
|
+
### Recovery Rules
|
|
120
|
+
- **Never blame the user.** Error messages describe what happened, not what the user did wrong.
|
|
121
|
+
- **Always provide a path forward.** Every error state has at least one action the user can take.
|
|
122
|
+
- **Preserve context.** The user should never have to start over after an error.
|
|
123
|
+
|
|
124
|
+
## Pattern 5: State Transitions
|
|
125
|
+
|
|
126
|
+
Many entities in the product move through states (Draft → Sent → Paid). How these transitions are presented determines whether the user understands what's happening or is confused by unexplained changes.
|
|
127
|
+
|
|
128
|
+
### Visibility Rules
|
|
129
|
+
- The current state is always visible on the entity's detail view
|
|
130
|
+
- State is shown as a badge or status indicator (see ui-design-system components)
|
|
131
|
+
- Available transitions (actions the user can take) are shown as buttons, labeled with the resulting state: "Send Invoice" not just "Next"
|
|
132
|
+
- Unavailable transitions are either hidden or shown as disabled with an explanation
|
|
133
|
+
|
|
134
|
+
### Transition Feedback
|
|
135
|
+
- Transitioning state shows a brief loading indicator
|
|
136
|
+
- After transition, the state badge updates immediately
|
|
137
|
+
- A confirmation message states what changed: "Invoice sent to ACME Corp"
|
|
138
|
+
- If the transition fails, show an error and return to the previous state — no ambiguous in-between
|
|
139
|
+
|
|
140
|
+
### State Visibility by Persona
|
|
141
|
+
Different personas may see different states. An accountant reviewing invoices sees "Pending Review" and "Approved". A business owner sending invoices sees "Draft" and "Sent". The state model is the same underneath — the UI filters what's relevant per persona.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Onboarding
|
|
2
|
+
|
|
3
|
+
## Why Onboarding Matters
|
|
4
|
+
|
|
5
|
+
First-time users have zero context. They don't know what the product does, where things are, or what to do first. The first 60 seconds determine whether a user stays or leaves. Onboarding is not a feature — it is the product's first conversation with the user.
|
|
6
|
+
|
|
7
|
+
The goal of onboarding is not to teach the entire product. It is to get the user to their first success as fast as possible. Once they experience success, they are motivated to explore further.
|
|
8
|
+
|
|
9
|
+
## The First Success Principle
|
|
10
|
+
|
|
11
|
+
Every onboarding strategy must answer one question: **What is the single most valuable thing this user can accomplish in the first session, and how do we get them there with zero friction?**
|
|
12
|
+
|
|
13
|
+
This is the "first success." Everything in onboarding is optimized to reach it. Features, settings, and advanced capabilities wait until after first success.
|
|
14
|
+
|
|
15
|
+
**Example:** For an invoicing product, first success = "User creates and sends their first invoice." Onboarding does not teach reporting, settings, or integrations first. It guides the user straight to creating an invoice.
|
|
16
|
+
|
|
17
|
+
## Onboarding Patterns
|
|
18
|
+
|
|
19
|
+
Choose the pattern(s) appropriate for the product and primary persona. Most products use a combination.
|
|
20
|
+
|
|
21
|
+
### Pattern 1: Empty State Design
|
|
22
|
+
|
|
23
|
+
The most important onboarding moment is often the first screen the user sees after signing up — which is empty. An empty screen with no guidance causes immediate abandonment. An empty screen with a clear next step causes immediate engagement.
|
|
24
|
+
|
|
25
|
+
**Structure of an effective empty state:**
|
|
26
|
+
```
|
|
27
|
+
[Icon or illustration — relates to the domain, not generic]
|
|
28
|
+
|
|
29
|
+
[Headline — what the user will be able to do here]
|
|
30
|
+
"Your invoices will appear here"
|
|
31
|
+
|
|
32
|
+
[Body — one sentence of context]
|
|
33
|
+
"Create your first invoice to get started."
|
|
34
|
+
|
|
35
|
+
[Primary action button — the single most important thing to do]
|
|
36
|
+
[Create Invoice]
|
|
37
|
+
|
|
38
|
+
[Optional: secondary link for users who need context first]
|
|
39
|
+
"Not sure where to start? See how it works →"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Rules:**
|
|
43
|
+
- Every list, table, or data view has a designed empty state
|
|
44
|
+
- The empty state is not a blank page with a generic "No data" message
|
|
45
|
+
- The primary action in the empty state is the same action that leads to first success
|
|
46
|
+
- The empty state disappears completely once data exists — it is not a persistent element
|
|
47
|
+
|
|
48
|
+
### Pattern 2: Guided First Action
|
|
49
|
+
|
|
50
|
+
After the user clicks the empty state's primary action, guide them through the first completion without interruption.
|
|
51
|
+
|
|
52
|
+
**How it works:**
|
|
53
|
+
- The form or flow for the first action is pre-populated with sensible defaults wherever possible
|
|
54
|
+
- Required fields are minimal for the first action — reduce friction to zero
|
|
55
|
+
- Helper text or placeholder text explains what to put in each field
|
|
56
|
+
- No optional fields are shown on the first pass (progressive disclosure — see interaction-patterns.md)
|
|
57
|
+
- After completion, a clear success state confirms what was accomplished
|
|
58
|
+
|
|
59
|
+
**Example flow:**
|
|
60
|
+
```
|
|
61
|
+
1. Empty state: "Create your first invoice" → [Create Invoice]
|
|
62
|
+
2. Form appears with:
|
|
63
|
+
- Customer name (helper: "Who is this invoice for?")
|
|
64
|
+
- Amount (helper: "How much do they owe?")
|
|
65
|
+
- Due date (default: 30 days from today)
|
|
66
|
+
- [Send Invoice] button
|
|
67
|
+
3. Success: "Invoice sent to [Customer]! They'll receive it by email."
|
|
68
|
+
4. User lands on invoice detail — first success achieved.
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Pattern 3: Contextual Tooltips
|
|
72
|
+
|
|
73
|
+
After first success, reveal additional capabilities at the point where they become relevant — not all at once.
|
|
74
|
+
|
|
75
|
+
**Rules:**
|
|
76
|
+
- Tooltips appear only when the user navigates to a new area for the first time
|
|
77
|
+
- One tooltip at a time. Never show multiple tooltips simultaneously.
|
|
78
|
+
- Each tooltip explains one thing: what this control does and why it matters
|
|
79
|
+
- Tooltips are dismissible. They do not block interaction.
|
|
80
|
+
- Tooltips do not reappear after dismissal (within the same session or across sessions, depending on product)
|
|
81
|
+
- Tooltips are not shown for controls that are self-explanatory (a button labeled "Save" needs no tooltip)
|
|
82
|
+
|
|
83
|
+
**Trigger rules:**
|
|
84
|
+
- First visit to a new section → show tooltip for the primary action in that section
|
|
85
|
+
- First time a new feature becomes available (e.g., after completing a prerequisite) → show tooltip explaining the new capability
|
|
86
|
+
- Never show tooltips based on time alone ("You've been using this for 5 minutes, here's a tip") — this interrupts flow
|
|
87
|
+
|
|
88
|
+
### Pattern 4: Progress Indication
|
|
89
|
+
|
|
90
|
+
For products where setup requires multiple steps (profile completion, integrations, configuration), show progress so the user knows what remains.
|
|
91
|
+
|
|
92
|
+
**Structure:**
|
|
93
|
+
```
|
|
94
|
+
Setup Progress: ██████░░░░ 60% complete
|
|
95
|
+
|
|
96
|
+
✅ Create account
|
|
97
|
+
✅ Send first invoice
|
|
98
|
+
○ Connect bank account
|
|
99
|
+
○ Set up recurring invoices
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Rules:**
|
|
103
|
+
- Progress indication is only used when there are 3+ distinct setup steps
|
|
104
|
+
- Each step has a clear completion condition — no ambiguity about whether it's done
|
|
105
|
+
- Steps are ordered by value: the most valuable actions first
|
|
106
|
+
- Completing all steps is encouraged but never required — the product is fully usable after first success
|
|
107
|
+
- Progress indication disappears once all steps are complete or after a reasonable time (it does not linger forever)
|
|
108
|
+
|
|
109
|
+
## Onboarding Strategy Document
|
|
110
|
+
|
|
111
|
+
Create: `/docs/ux-design/onboarding.md`
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
# Onboarding Strategy
|
|
115
|
+
|
|
116
|
+
**Primary persona:** [Name — from personas]
|
|
117
|
+
**First success definition:** [The single most valuable accomplishment in the first session]
|
|
118
|
+
**Patterns used:** [List: empty state design, guided first action, contextual tooltips, progress indication]
|
|
119
|
+
|
|
120
|
+
## First Success Flow
|
|
121
|
+
|
|
122
|
+
[Step-by-step description of how the primary persona reaches first success.
|
|
123
|
+
Include what they see at each step, what is pre-populated, what is hidden.]
|
|
124
|
+
|
|
125
|
+
1. [Step 1 — what the user sees and does]
|
|
126
|
+
2. [Step 2]
|
|
127
|
+
3. [Step N — first success achieved]
|
|
128
|
+
|
|
129
|
+
## Empty States
|
|
130
|
+
|
|
131
|
+
| Screen | Empty state message | Primary action | Secondary link |
|
|
132
|
+
|---|---|---|---|
|
|
133
|
+
| [Screen name] | [Headline] | [Button label] | [Link text → destination] |
|
|
134
|
+
| [Screen name] | [Headline] | [Button label] | [Link text → destination] |
|
|
135
|
+
|
|
136
|
+
## Contextual Tooltips
|
|
137
|
+
|
|
138
|
+
| Location | Trigger | Tooltip text | Why here |
|
|
139
|
+
|---|---|---|---|
|
|
140
|
+
| [Control or section] | [What triggers it] | [What the tooltip says] | [Why this is the right moment] |
|
|
141
|
+
|
|
142
|
+
## Progress Steps (if applicable)
|
|
143
|
+
|
|
144
|
+
| Step | Completion condition | Value delivered |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| [Step name] | [How we know it's done] | [What the user gains] |
|
|
147
|
+
|
|
148
|
+
## Secondary Persona Onboarding
|
|
149
|
+
|
|
150
|
+
[How does the secondary persona's first experience differ? Do they need a different first success path? Are there empty states specific to their view?]
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Common Onboarding Mistakes
|
|
154
|
+
|
|
155
|
+
- **Teaching the product before the user has a reason to care.** A video tour on signup teaches nothing — the user has no context to attach the information to. Guide them to first success first. Then teach.
|
|
156
|
+
- **Requiring setup before first value.** If the user must complete a 10-step setup before they can do anything useful, they leave. Make first success possible with zero setup.
|
|
157
|
+
- **Showing everything at once.** A dashboard full of empty widgets and "Get started" prompts everywhere is as confusing as an empty page. One clear next step at a time.
|
|
158
|
+
- **Never letting go.** Tooltips and guides that persist forever become noise. They should fade as the user becomes comfortable. The product should feel clean and uncluttered after the first session.
|
|
159
|
+
- **Ignoring the returning user.** A user who left mid-onboarding and returns should pick up where they left off, not restart. Preserve state.
|