@thebassclef/lite 1.1.0 → 1.2.0-alpha.1
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/dist/cli.cjs +258 -63
- package/dist/cli.js +258 -63
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/bassclef-configs.jsonc +56 -0
- package/dist/lite/.claude/bassclef-orientation.md +120 -0
- package/dist/lite/.claude/hooks/adr-discipline-check.sh +132 -0
- package/dist/lite/.claude/hooks/atomic-pr-check.sh +169 -0
- package/dist/lite/.claude/hooks/auto-save-idle.sh +51 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +51 -13
- package/dist/lite/.claude/hooks/bet-doc-gate.sh +283 -0
- package/dist/lite/.claude/hooks/bug-diagnosis.sh +64 -0
- package/dist/lite/.claude/hooks/destructive-command-guard.sh +136 -0
- package/dist/lite/.claude/hooks/file-rename-discipline-check.sh +147 -0
- package/dist/lite/.claude/hooks/hook-classifier-canary.sh +158 -0
- package/dist/lite/.claude/hooks/kiss-default-check.sh +129 -0
- package/dist/lite/.claude/hooks/multi-tenancy-check.sh +83 -0
- package/dist/lite/.claude/hooks/oo-ad-entry-point-check.sh +216 -0
- package/dist/lite/.claude/hooks/operator-private-path-check.sh +203 -0
- package/dist/lite/.claude/hooks/pattern-annotation-validate.sh +142 -0
- package/dist/lite/.claude/hooks/plain-english-steering.sh +15 -1
- package/dist/lite/.claude/hooks/post-write-trace.sh +66 -0
- package/dist/lite/.claude/hooks/pr-body-scrub-check.sh +446 -0
- package/dist/lite/.claude/hooks/pre-commit-identifier-leak-scrub.sh +137 -0
- package/dist/lite/.claude/hooks/pre-gh-pr-body-scrub.sh +192 -0
- package/dist/lite/.claude/hooks/pre-gh-pr-title-scrub.sh +172 -0
- package/dist/lite/.claude/hooks/role-entry-gate.sh +115 -0
- package/dist/lite/.claude/hooks/save-state.sh +268 -0
- package/dist/lite/.claude/hooks/session-reflection.d/08-settings-drift.sh +8 -1
- package/dist/lite/.claude/hooks/session-reflection.d/10-abrupt-stop-recovery.sh +52 -0
- package/dist/lite/.claude/hooks/session-reflection.d/55-orientation-gate.sh +40 -4
- package/dist/lite/.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh +12 -5
- package/dist/lite/.claude/hooks/session-reflection.d/81-hook-manifest-staleness.sh +18 -2
- package/dist/lite/.claude/hooks/session-reflection.d/91-npm-version-drift.sh +54 -0
- package/dist/lite/.claude/hooks/session-reflection.d/tests/10-abrupt-stop-recovery.test.sh +95 -0
- package/dist/lite/.claude/hooks/session-reflection.sh +62 -15
- package/dist/lite/.claude/hooks/tool-failure-diagnosis.sh +50 -0
- package/dist/lite/.claude/luminaries/andrej-karpathy.md +165 -0
- package/dist/lite/.claude/luminaries/dave-gray.md +155 -0
- package/dist/lite/.claude/luminaries/gary-klein.md +166 -0
- package/dist/lite/.claude/luminaries/kaoru-ishikawa.md +162 -0
- package/dist/lite/.claude/luminaries/lean-product-canvas.md +33 -0
- package/dist/lite/.claude/luminaries/luke-wroblewski.md +224 -0
- package/dist/lite/.claude/luminaries/ryan-singer.md +113 -0
- package/dist/lite/.claude/luminaries/steve-krug.md +168 -0
- package/dist/lite/.claude/luminaries/tony-ulwick.md +134 -0
- package/dist/lite/.claude/rules/arc-level-orientation-before-leaf.md +60 -0
- package/dist/lite/.claude/rules/architect-review-discipline.md +71 -0
- package/dist/lite/.claude/rules/auto-fix-criteria.md +126 -0
- package/dist/lite/.claude/rules/bassclef-hook-drift-blocker.md +144 -0
- package/dist/lite/.claude/rules/bassclef-models-discovery.md +107 -0
- package/dist/lite/.claude/rules/bassclef-workflow-parity.md +104 -0
- package/dist/lite/.claude/rules/cost-governance.md +154 -0
- package/dist/lite/.claude/rules/file-rename-discipline.md +95 -0
- package/dist/lite/.claude/rules/mechanism-fidelity.md +88 -0
- package/dist/lite/.claude/rules/prototype-production-coupling.md +125 -0
- package/dist/lite/.claude/rules/quick-fix-criteria.md +90 -0
- package/dist/lite/.claude/rules/session-artifacts.md +30 -0
- package/dist/lite/.claude/rules/sibling-smoke-after-substrate-change.md +107 -0
- package/dist/lite/.claude/rules/substrate-as-system.md +67 -0
- package/dist/lite/.claude/rules/usability.md +22 -0
- package/dist/lite/.claude/settings.json +20 -0
- package/dist/lite/.claude/skills/agent-research-spawn/SKILL.md +100 -0
- package/dist/lite/.claude/skills/architect-review/SKILL.md +201 -0
- package/dist/lite/.claude/skills/auto-fix/SKILL.md +297 -0
- package/dist/lite/.claude/skills/autonomous/SKILL.md +300 -0
- package/dist/lite/.claude/skills/bind-subdomain/SKILL.md +232 -0
- package/dist/lite/.claude/skills/canvas/SKILL.md +41 -0
- package/dist/lite/.claude/skills/deploy-prod/SKILL.md +106 -0
- package/dist/lite/.claude/skills/docs-sync/SKILL.md +188 -0
- package/dist/lite/.claude/skills/eisenhower/SKILL.md +273 -0
- package/dist/lite/.claude/skills/empathy-map/SKILL.md +168 -0
- package/dist/lite/.claude/skills/frontend-design/SKILL.md +53 -0
- package/dist/lite/.claude/skills/interview-me/SKILL.md +171 -0
- package/dist/lite/.claude/skills/journal-export/SKILL.md +293 -0
- package/dist/lite/.claude/skills/jtbd-tasks/SKILL.md +203 -0
- package/dist/lite/.claude/skills/objectory-decompose/SKILL.md +256 -0
- package/dist/lite/.claude/skills/pick-luminaries/SKILL.md +100 -0
- package/dist/lite/.claude/skills/pre-mortem/SKILL.md +180 -0
- package/dist/lite/.claude/skills/prototype-gallery/SKILL.md +264 -0
- package/dist/lite/.claude/skills/provision-deploy-host/SKILL.md +257 -0
- package/dist/lite/.claude/skills/quick-fix/SKILL.md +273 -0
- package/dist/lite/.claude/skills/release/SKILL.md +311 -0
- package/dist/lite/.claude/skills/release-notes/SKILL.md +202 -0
- package/dist/lite/.claude/skills/rfc/SKILL.md +222 -0
- package/dist/lite/.claude/skills/riff-prototypes/SKILL.md +637 -0
- package/dist/lite/.claude/skills/secrets-bootstrap/SKILL.md +209 -0
- package/dist/lite/.claude/skills/skill/SKILL.md +304 -0
- package/dist/lite/.claude/skills/smoke-test/SKILL.md +100 -0
- package/dist/lite/.claude/skills/state/SKILL.md +204 -0
- package/dist/lite/.claude/skills/substrate-check/SKILL.md +218 -0
- package/dist/lite/.claude/skills/synthetic-user/SKILL.md +381 -0
- package/dist/lite/.claude/skills/task-scenarios/SKILL.md +105 -0
- package/dist/lite/.claude/skills/tier-dependency-audit/SKILL.md +139 -0
- package/dist/lite/.claude/skills/ux-migration/SKILL.md +424 -0
- package/dist/lite/.claude/skills/value-prop-canvas/SKILL.md +297 -0
- package/dist/lite/README.md +5 -1
- package/dist/lite/gitignore +6 -0
- package/dist/lite/lib/bassclef-dir-resolver.sh +85 -0
- package/dist/lite/lib/clone-failure-classifier.sh +59 -0
- package/dist/lite/lib/fixture-builder.sh +190 -0
- package/dist/lite/lib/fresh-install-check.sh +49 -0
- package/dist/lite/lib/hook-heartbeat.sh +0 -1
- package/dist/lite/lib/mechanism-fidelity.sh +569 -0
- package/dist/lite/lib/npm-version-check.sh +112 -0
- package/dist/lite/lib/preview-state.sh +229 -0
- package/dist/lite/lib/session-rescue.sh +0 -1
- package/dist/lite/scripts/generate-lite-manifest.sh +145 -4
- package/dist/lite/scripts/lite-manifest-drift-check.sh +5 -1
- package/dist/lite/standards/architect-review-discipline.md +222 -0
- package/dist/lite/standards/bassclef-platform.md +249 -0
- package/dist/lite/standards/bassclef-test-repos.md +97 -0
- package/dist/lite/standards/bassclef-wiring-manifest.json +25 -1
- package/dist/lite/standards/cold-adopter-harness.md +205 -0
- package/dist/lite/standards/data-management.md +135 -0
- package/dist/lite/standards/frontend-stack/nextjs-prisma.md +124 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +27 -0
- package/dist/lite/standards/lite-manifest.json +1456 -14
- package/dist/lite/standards/mechanism-fidelity.md +205 -0
- package/dist/lite/standards/operator-private-discipline.md +200 -0
- package/dist/lite/standards/operator-to-public-flow.md +195 -0
- package/dist/lite/standards/prototype-gallery.md +251 -0
- package/dist/lite/standards/pseudonym-key-schema.md +109 -0
- package/dist/lite/standards/sibling-validation-checklist.md +181 -0
- package/dist/lite/standards/slack-notifications.md +161 -0
- package/dist/lite/standards/synthetic-user-testing.md +173 -0
- package/dist/lite/standards/vendor-bindings.md +165 -0
- package/dist/lite/standards/vendor-plugins/frontend-design.md +66 -0
- package/dist/lite/standards/vpc-fit-validation.md +167 -0
- package/dist/lite/templates/gallery-yml.md +113 -0
- package/dist/lite/templates/product-canvas.md +169 -0
- package/dist/lite/templates/value-prop-canvas.md +180 -0
- package/package.json +12 -5
- /package/dist/lite/{whereami.md → docs/whereami.md} +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Ryan Singer
|
|
4
|
+
slug: ryan-singer
|
|
5
|
+
claimed_by: [shaper]
|
|
6
|
+
referenced_by_skills: [canvas, spec, sprint]
|
|
7
|
+
primary_domain: shaping
|
|
8
|
+
depth: full
|
|
9
|
+
solves_problems_brownfield:
|
|
10
|
+
- "Work items enter the sprint without a clear scope boundary; scope expands as implementation reveals unknowns"
|
|
11
|
+
- "Teams estimate time required and are wrong predictably; the estimates create false confidence and real frustration"
|
|
12
|
+
- "Nobody decides which projects to work on in a principled way — the loudest voice or the oldest request wins"
|
|
13
|
+
- "Feature work runs indefinitely because there is no defined stopping condition"
|
|
14
|
+
solves_problems_greenfield:
|
|
15
|
+
- "Designing a planning process for a small team that replaces estimation with explicit appetite"
|
|
16
|
+
- "Building a governance ritual (betting table) that makes scope decisions explicit and time-bounded"
|
|
17
|
+
- "Planning the first product cycle with a fixed time budget and variable scope"
|
|
18
|
+
- "Creating a progress visualization that distinguishes problem-understanding from execution"
|
|
19
|
+
anti_patterns:
|
|
20
|
+
- "Large teams with formal dependency management — Shape Up is designed for small autonomous teams"
|
|
21
|
+
- "Regulated industries requiring fixed-scope fixed-time delivery (contracts, compliance milestones)"
|
|
22
|
+
- "Teams that need to coordinate tightly across multiple work streams — Shape Up optimizes for single-team autonomy"
|
|
23
|
+
sources:
|
|
24
|
+
- type: book
|
|
25
|
+
title: "Shape Up: Stop Running in Circles and Ship Work That Matters"
|
|
26
|
+
authors: ["Ryan Singer"]
|
|
27
|
+
year: 2019
|
|
28
|
+
url: "https://basecamp.com/shapeup"
|
|
29
|
+
methodology_covered:
|
|
30
|
+
- "Appetite — a time budget, not an estimate; fixed time, variable scope"
|
|
31
|
+
- "Shaping — pre-work by senior people; sets appetite, problem, fat-marker solution sketch, and identified rabbit holes"
|
|
32
|
+
- "Betting table — governance ritual where shaped pitches are reviewed and chosen for the next cycle"
|
|
33
|
+
- "Hill chart — progress visualization distinguishing uphill (figuring it out) from downhill (executing)"
|
|
34
|
+
- "Cool-down — two weeks of unscheduled time after each six-week cycle"
|
|
35
|
+
- "Circuit breaker — project does not automatically roll into the next cycle; must be re-shaped and re-bet"
|
|
36
|
+
- type: website
|
|
37
|
+
title: "Felt Presence — Ryan Singer site"
|
|
38
|
+
authors: ["Ryan Singer"]
|
|
39
|
+
year: 2015
|
|
40
|
+
url: "https://feltpresence.com/"
|
|
41
|
+
methodology_covered:
|
|
42
|
+
- "Essays on product design and strategy; Singer's thinking beyond Shape Up"
|
|
43
|
+
verification_status: verified
|
|
44
|
+
description: "\"Appetite is a time budget, not an estimate."
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
# Ryan Singer
|
|
48
|
+
|
|
49
|
+
## Signature
|
|
50
|
+
|
|
51
|
+
*"Appetite is a time budget, not an estimate. We're not asking how long it will take. We're asking how much time it's worth. Fixed time, variable scope."* [ref:1]
|
|
52
|
+
|
|
53
|
+
Author of **Shape Up: Stop Running in Circles and Ship Work That Matters** (2019, free at basecamp.com/shapeup) [ref:1]. Former product strategist at Basecamp. Every "appetite," "betting table," "cool-down," "fat marker sketch," "hill chart," and "circuit breaker" in bassclef's substrate traces directly to Singer's book. Shape Up is the process methodology bassclef runs on.
|
|
54
|
+
|
|
55
|
+
## Core methods
|
|
56
|
+
|
|
57
|
+
- **Appetite** — A time budget the team is willing to spend on a solution. Two standard sizes: Small Batch (2 weeks) and Big Batch (6 weeks). Appetite replaces estimation: instead of asking "how long will this take?" ask "how much time is it worth?" Variable scope fills the fixed time. When appetite runs out, the work ships in whatever state it is — scope is cut, not time extended. [ref:1]
|
|
58
|
+
- **Shaping** — Pre-work done by senior people before a project is placed in the betting table. Shaping sets the appetite, defines the problem clearly, sketches a solution at fat-marker resolution (structural, not detailed), and explicitly identifies rabbit holes (known unknowns to fence off). Shaping output is a pitch — not a wireframe, not a spec, not a task list. [ref:1]
|
|
59
|
+
- **Betting table** — The governance ritual where shaped pitches are reviewed and chosen for the next cycle. Nothing gets built without being shaped first and placed on the table. The team bets on pitches, not on feature requests. What's not on the table does not exist for this cycle. [ref:1]
|
|
60
|
+
- **Hill chart** — Progress visualization that distinguishes two phases of work: uphill (figuring it out — problem is still being understood) and downhill (executing — the approach is clear). A project stuck on the uphill for too long is a risk signal. Hill charts make this visible at a glance. [ref:1]
|
|
61
|
+
- **Cool-down** — Two weeks of unscheduled time after each six-week cycle. No new projects during cool-down. Time for bugfixes, exploration, addressing technical debt, and recovery. Cool-down is not optional; it is structural. [ref:1]
|
|
62
|
+
- **Circuit breaker** — If a project reaches the end of its cycle without shipping, it does not automatically roll into the next cycle. The team must decide explicitly whether to shape it again and re-bet. This prevents runaway work. (Note: Singer's circuit breaker is a scope-management tool, not Nygard's electrical-pattern circuit breaker for production stability.) [ref:1]
|
|
63
|
+
|
|
64
|
+
## When to channel this luminary
|
|
65
|
+
|
|
66
|
+
When the primary risk is runaway scope, undefined stopping conditions, or a planning process that feels like continuous negotiation. Singer dominates iteration planning, appetite-setting, and the governance of what the team works on. Channel Singer at the shaping and betting stages — before any code is written. Pair with Christensen/Torres (discovery of what to shape), Cockburn (use case formalism for the shaped pitch), and Patton (story mapping for the scope slice).
|
|
67
|
+
|
|
68
|
+
INSTEAD of channeling Singer for execution discipline: once the bet is placed and the team is in the cycle, Beck (TDD), Hunt & Thomas (DRY, tracer bullets), and Cockburn (walking skeleton) govern how the work is done. Singer governs what the team bets on and how it scopes the work before committing.
|
|
69
|
+
|
|
70
|
+
## Stack translation
|
|
71
|
+
|
|
72
|
+
In bassclef's SDLC:
|
|
73
|
+
|
|
74
|
+
- **Appetite → iteration bets** — every iteration bet in `docs/iteration-bets/` has an `appetite` field (turns budget, time estimate). This is Singer's appetite operationalized.
|
|
75
|
+
- **Shaping → `/canvas` + `/spec` + `/decompose`** — the shaping process runs as `/canvas` (thesis, problem framing) → `/spec` (acceptance criteria, scope boundaries) → `/decompose` (technical decomposition, rabbit holes identified). The output is a shaped pitch ready for the betting table.
|
|
76
|
+
- **Betting table → `/sprint` and `/longrun`** — the betting table ritual runs at session start; `/sprint` reads the current bet and proposes the next one; `/longrun` runs the full cycle through multiple bets.
|
|
77
|
+
- **Hill chart → issue labels + phase-state** — "figuring it out" phases (Inception, Elaboration) map to the uphill; "executing" phases (Construction) map to the downhill. The hill metaphor makes the SDLC phase transition intuitive.
|
|
78
|
+
- **Cool-down → `/retro` + LinkedIn drafts** — bassclef's inter-iteration gap (between one bet closing and the next opening) is the cool-down. `/retro` runs; LinkedIn drafts are written; substrate improvements ship.
|
|
79
|
+
|
|
80
|
+
## Anti-patterns it prevents
|
|
81
|
+
|
|
82
|
+
- **Scope creep as feature** — a cycle that grows because "we discovered more work while building." Shape Up's response: cut scope to fit the appetite. If the discovery changes the problem fundamentally, stop, re-shape, and re-bet.
|
|
83
|
+
INSTEAD: scope cut is always in bounds; time extension is a violation of the fixed-time contract. [ref:1]
|
|
84
|
+
- **Estimation theater** — story points, planning poker, velocity tracking. These optimize for predicting how long things take rather than deciding how much time they are worth. Singer rejects them: appetite is the input, not the estimate. [ref:1]
|
|
85
|
+
- **Rabbit hole blindness** — starting a cycle without identifying the known unknowns. The shaping step explicitly names rabbit holes and fences them off. Unknowns discovered during execution that were foreseeable at shaping time are a shaping failure.
|
|
86
|
+
- **Perpetual project** — a project that rolls from cycle to cycle without shipping because "it's not quite done." The circuit breaker prevents this: at cycle end, decide whether to re-bet. The project does not own the next cycle by default. [ref:1]
|
|
87
|
+
|
|
88
|
+
## Worked example
|
|
89
|
+
|
|
90
|
+
For POA's "deal staleness detection" feature:
|
|
91
|
+
|
|
92
|
+
**Appetite**: Small Batch, 2 weeks. Reason: the solution space is well-understood and the technical implementation is straightforward. Not worth six weeks.
|
|
93
|
+
|
|
94
|
+
**Shaping**: Problem is "operators lose track of which deals need attention." Solution sketch (fat marker): a "days since last contact" indicator on the deal table, with a threshold after which the deal is flagged visually. Rabbit hole: "how should the threshold be configured?" — fenced off: use a hardcoded 14-day default; make it configurable in a future bet.
|
|
95
|
+
|
|
96
|
+
**Betting table pitch**: "Deal Staleness Indicator — 2-week Small Batch. Adds a visual age indicator to the deal table. Operators can see at a glance which deals have gone cold. Rabbit hole (configurable threshold) explicitly out of scope. Acceptance: a deal with no activity in 14+ days shows a visual flag in the deal table."
|
|
97
|
+
|
|
98
|
+
**Hill chart at week 1**: the "figuring it out" phase — how is last-contact-date tracked? Is there an existing field? How do we handle deals with no contact history? These are uphill questions.
|
|
99
|
+
|
|
100
|
+
**Hill chart at week 2**: downhill — approach is clear, implementation is in progress. If the team is still uphill at day 8 of 14, it is a risk signal that the shaping missed something.
|
|
101
|
+
|
|
102
|
+
## Sources
|
|
103
|
+
|
|
104
|
+
- *Shape Up: Stop Running in Circles and Ship Work That Matters* — Singer, Basecamp (2019, free at basecamp.com/shapeup) [ref:1]
|
|
105
|
+
- feltpresence.com — Singer's site, essays on product and design [ref:2]
|
|
106
|
+
- "Basecamp's Shape Up" — various Basecamp blog posts by Singer
|
|
107
|
+
|
|
108
|
+
## Related luminaries
|
|
109
|
+
|
|
110
|
+
- **Ryan Singer & Jason Fried / DHH** — Basecamp founders; Shape Up is the operational expression of their "It Doesn't Have to Be Crazy at Work" philosophy. Singer provides the methodology detail; Fried/DHH provide the cultural context.
|
|
111
|
+
- **Clayton Christensen** — JTBD feeds the shaping step. Understanding the job before defining the appetite makes the shaped pitch more grounded.
|
|
112
|
+
- **Alistair Cockburn** — Use cases and Shape Up pitches share structural rigor: both require clear problem framing before implementation. Cockburn's use case format is a strong input to a well-shaped pitch.
|
|
113
|
+
- **Jeff Patton** — Story mapping and shaping pitches both demand holistic scope thinking. Singer prefers appetite-defined pitches; Patton prefers journey-organized maps. Both prevent random feature drops.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Steve Krug
|
|
4
|
+
slug: steve-krug
|
|
5
|
+
claimed_by: [designer]
|
|
6
|
+
referenced_by_skills: [visual-review, visual-qa, synthetic-user]
|
|
7
|
+
primary_domain: ux
|
|
8
|
+
depth: full
|
|
9
|
+
agent_drafted: 2026-05-06
|
|
10
|
+
operator_review_pending: true
|
|
11
|
+
verification_status: verified
|
|
12
|
+
sources:
|
|
13
|
+
- type: book
|
|
14
|
+
title: "Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability"
|
|
15
|
+
authors: ["Steve Krug"]
|
|
16
|
+
year: 2014
|
|
17
|
+
isbn: "978-0321965516"
|
|
18
|
+
url: "https://sensible.com/dont-make-me-think/"
|
|
19
|
+
methodology_covered: ["Don't Make Me Think principle", "trunk test", "web usability heuristics", "scanning vs reading behavior"]
|
|
20
|
+
- type: book
|
|
21
|
+
title: "Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems"
|
|
22
|
+
authors: ["Steve Krug"]
|
|
23
|
+
year: 2009
|
|
24
|
+
isbn: "978-0321657299"
|
|
25
|
+
url: "https://sensible.com/rocket-surgery-made-easy/"
|
|
26
|
+
methodology_covered: ["guerrilla usability testing", "Krug script methodology", "discount usability testing"]
|
|
27
|
+
- type: website
|
|
28
|
+
title: "sensible.com — Steve Krug"
|
|
29
|
+
authors: ["Steve Krug"]
|
|
30
|
+
url: "https://sensible.com"
|
|
31
|
+
methodology_covered: ["ongoing resources and commentary on usability"]
|
|
32
|
+
solves_problems_brownfield:
|
|
33
|
+
- "Existing interface forces users to read or think more than the task warrants"
|
|
34
|
+
- "User testing keeps surfacing the same friction points but team can't see them"
|
|
35
|
+
- "Self-evident affordances are missing in the current UI; users hesitate before every click"
|
|
36
|
+
- "Navigation, labels, and structure aren't immediately obvious"
|
|
37
|
+
solves_problems_greenfield:
|
|
38
|
+
- "Designing a consumer or low-engagement product where 'don't make me think' is the bar"
|
|
39
|
+
- "Building a new public-facing surface where usability is the core differentiator"
|
|
40
|
+
- "Planning a tool that needs to be self-evident from first encounter"
|
|
41
|
+
- "Designing a product whose audience will not invest effort to learn the interface"
|
|
42
|
+
anti_patterns:
|
|
43
|
+
- "Power-user tools where complexity is the value (IDEs, trading platforms)"
|
|
44
|
+
- "Domain-expert surfaces where 'don't make me think' undersells the user"
|
|
45
|
+
- "Heavily customizable products where user investment in learning IS the relationship"
|
|
46
|
+
description: "\"Don't make me think.\""
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
# Steve Krug
|
|
50
|
+
|
|
51
|
+
## Signature
|
|
52
|
+
|
|
53
|
+
*"Don't make me think."*
|
|
54
|
+
|
|
55
|
+
Author of *Don't Make Me Think* (2000; 3rd ed 2014) — the canonical short book on web usability. Author of *Rocket Surgery Made Easy* (2009) — the practical guide to lightweight usability testing. Voice for **pragmatic, operator-accessible usability** and **instant-comprehension design**.
|
|
56
|
+
|
|
57
|
+
Krug's signature contribution is **the trunk test** and the discipline of **guerrilla usability testing** — accessible, cheap, repeatable methods that any team can run any week. Where Nielsen articulates expert evaluation, Krug articulates the user's actual experience: did they hesitate? Did they read when they shouldn't have to? Did they wonder?
|
|
58
|
+
|
|
59
|
+
For canonical, Krug is the pragmatic operator-friendly counterpart to Nielsen's expert-heuristics. Krug's guerrilla methods belong in `/synthetic-user` and `/visual-qa`; his "don't make me think" maxim belongs in every `/visual-review`.
|
|
60
|
+
|
|
61
|
+
## Sources
|
|
62
|
+
|
|
63
|
+
- *Don't Make Me Think: A Common Sense Approach to Web Usability* — Krug, New Riders (1st ed 2000, 2nd ed 2006, 3rd ed *Don't Make Me Think, Revisited* 2014)
|
|
64
|
+
- *Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems* — Krug, New Riders (2009)
|
|
65
|
+
- [sensible.com](https://sensible.com) — Krug's site, with usability test demo videos + scripts
|
|
66
|
+
- Krug's workshops + conference talks (UX London, IxDA, etc.)
|
|
67
|
+
|
|
68
|
+
## Core methods
|
|
69
|
+
|
|
70
|
+
- **Don't make me think** — Every element should be obvious on sight; thought is cost users won't pay. Self-evident > self-explanatory > requires explanation. [ref:1]
|
|
71
|
+
- **The trunk test** — Grab any page; can a user in 5 seconds answer: What site is this? What page am I on? What are the major sections? What can I do here? Where am I in the navigation hierarchy? If not, IA fails. [ref:1]
|
|
72
|
+
- **First law of usability**: *Don't make me think* (instant comprehension wins).
|
|
73
|
+
- **Second law of usability**: *It doesn't matter how many times I have to click, as long as each click is a mindless, unambiguous choice* (clicks are not the cost; thinking is the cost).
|
|
74
|
+
- **Third law of usability**: *Get rid of half the words on each page, then get rid of half of what's left* (page copy is mostly noise; ruthless reduction reveals essence).
|
|
75
|
+
- **Guerrilla usability testing** — 3-5 users, $50-100, one morning. Catches 80% of issues for 5% of the cost of formal studies. Test early, test often, test cheap. [ref:2]
|
|
76
|
+
- **The Krug script** — A specific, refined script for guerrilla tests: orientation, tasks, debrief. Available open-source on Krug's site. [ref:2]
|
|
77
|
+
- **Reservoir of goodwill** — Every confusing moment depletes it; every clear, easy moment refills it. Users will tolerate some friction if the goodwill reservoir is deep.
|
|
78
|
+
|
|
79
|
+
## INSTEAD-block discipline
|
|
80
|
+
|
|
81
|
+
| Anti-pattern | INSTEAD |
|
|
82
|
+
|---|---|
|
|
83
|
+
| "Users will read the help text" | Don't write help text; redesign the affordance so help isn't needed; make the obvious obvious |
|
|
84
|
+
| "We'll explain this in onboarding" | Onboarding shouldn't be needed for the basic affordances; reserve onboarding for genuinely complex multi-step workflows |
|
|
85
|
+
| "It's intuitive once you understand it" | Self-evident > requires-understanding; if it requires understanding, redesign or accept that it's a power-tool affordance |
|
|
86
|
+
| Long copy on landing pages | Get rid of half the words; then half of what's left; users skim, they don't read |
|
|
87
|
+
| Skipping user testing because "no time" | 3 users, one morning, $50; ALWAYS time; the alternative (shipping defects) is more expensive |
|
|
88
|
+
| 30-user test for fix-stage product | 3-5 users catches 80% of issues; reserve large studies for late-stage / quantitative questions |
|
|
89
|
+
| Custom navigation that "works once you know it" | Use platform conventions; users have learned other sites; meet them where they are |
|
|
90
|
+
| Hiding primary actions behind menus / hamburgers | Primary actions visible by default; hide only secondary / advanced |
|
|
91
|
+
| "Click here" as link text | Link text describes the destination ("Read the report" not "Click here") — makes scanning work, makes screen readers work |
|
|
92
|
+
| Trunk test failed but rationalized away ("the user will figure it out") | Trunk test failure = redesign; user shouldn't have to figure it out |
|
|
93
|
+
| Page with 5 competing CTAs | One primary CTA per page; secondary actions visually subordinate |
|
|
94
|
+
| Navigation that requires reading to use | Navigation icons + labels tested for instant recognition; if a user has to read every label, the icons are decoration |
|
|
95
|
+
|
|
96
|
+
## When to channel this luminary
|
|
97
|
+
|
|
98
|
+
- Always — when designing or auditing a public-facing / consumer / low-engagement surface where users won't invest in learning
|
|
99
|
+
- Especially — when the operator's complaint is "users get stuck" or "we keep getting the same support questions"
|
|
100
|
+
- Pair with `jakob-nielsen` (heuristic evaluation) — Krug's guerrilla testing + Nielsen's heuristic review = full pre-launch usability discipline
|
|
101
|
+
- Pair with `vitaly-friedman` (craft-first patterns) — Krug's "don't make me think" needs Friedman's craft to manifest in form/table/empty-state patterns
|
|
102
|
+
|
|
103
|
+
Do NOT use this luminary alone for power-user / domain-expert / customizable products. Krug's discipline is consumer-grade; "don't make me think" undersells professionals who are paid to think.
|
|
104
|
+
|
|
105
|
+
## Stack translation
|
|
106
|
+
|
|
107
|
+
In React + Tailwind + accessible primitives:
|
|
108
|
+
|
|
109
|
+
- **Self-evident affordances** → Buttons look like buttons (not styled-text); links look like links (underline + color shift on hover); inputs have visible borders; clickable items have hover states
|
|
110
|
+
- **Trunk test on every page** → Every page should answer: site identity (logo top-left), page identity (h1), navigation context (breadcrumbs or active-nav state), available actions (primary CTA visible), where-am-I (active section in sidebar/nav)
|
|
111
|
+
- **Navigation conventions** → Logo top-left links home; main nav top or left; primary CTA distinct visual weight; search where users expect (top-right or top-center)
|
|
112
|
+
- **Reduce copy** → Audit every paragraph: what's the half I can cut? What's the half I can cut from the remainder? Page copy should be ruthless
|
|
113
|
+
- **Primary action discipline** → One primary CTA per page; secondary actions in less-prominent button styles; tertiary actions as text links
|
|
114
|
+
- **Link text** → Always describes destination; never "Click here" / "Learn more" alone (instead "Read the deployment guide")
|
|
115
|
+
- **Predictable patterns** → Forms top-to-bottom, labels above; tables sortable; modals close with Esc + click-outside + X
|
|
116
|
+
- **Guerrilla test fixture** → For dev environments, a `usability-test/` directory with Krug's script + 3 task scenarios; team runs whenever before-merge
|
|
117
|
+
|
|
118
|
+
## Anti-patterns it prevents
|
|
119
|
+
|
|
120
|
+
- **Self-explanatory drift** — every element requires a small amount of thought; cumulative cognitive cost exhausts users
|
|
121
|
+
- **Help-text crutch** — design defects covered by tooltips and help articles; users miss the help, hit the defect, churn
|
|
122
|
+
- **No usability testing** — 3-user test never run; defects ship; remediation post-launch is 10x cost
|
|
123
|
+
- **Long-copy landing pages** — paragraphs of marketing prose; users skim, miss the point, bounce
|
|
124
|
+
- **Custom navigation** — designer's clever idea; users trained by the rest of the web; mismatch causes hesitation everywhere
|
|
125
|
+
- **Hidden primary actions** — primary CTA buried behind hamburger menu; conversion suffers; users don't realize the action exists
|
|
126
|
+
- **Trunk-test failure ignored** — page doesn't pass the 5-second comprehension test; team rationalizes; users don't bother
|
|
127
|
+
|
|
128
|
+
## Worked example
|
|
129
|
+
|
|
130
|
+
For canonical's hypothetical landing page (canonical.dev):
|
|
131
|
+
|
|
132
|
+
Krug's prescription:
|
|
133
|
+
- **Trunk test**: in 5 seconds, can a senior engineer answer:
|
|
134
|
+
- What site is this? → "canonical" wordmark top-left, large
|
|
135
|
+
- What is this? → h1 hero — "The shared methodology for solo builders building durable software with AI" (one sentence; user vocabulary)
|
|
136
|
+
- What can I do here? → Primary CTA: "Try it →"; Secondary: "How it works"; Tertiary text-link: "View on GitHub"
|
|
137
|
+
- Where am I in the hierarchy? → Single-page landing; top nav: Why / How / Roadmap (3 items, not 8)
|
|
138
|
+
- **Reduced copy**: Hero is 1 sentence (not 3 paragraphs); each section is ≤2 sentences before evidence/example; cut every "leverage", "synergy", "best-in-class"
|
|
139
|
+
- **Self-evident affordances**: Primary CTA is a button (filled, contrasting color); secondary is button (outlined); tertiary is text-link with underline
|
|
140
|
+
- **Navigation discipline**: Top nav 3 items; logo links home; no hamburger needed at desktop; mobile hamburger for the same 3 items
|
|
141
|
+
- **Predictable patterns**: Pricing where users expect (Pricing in nav); FAQ at bottom; contact + social bottom-footer
|
|
142
|
+
- **Guerrilla test fixture**: 3 scripted tasks: "Find out what canonical does"; "Find out how to start"; "Find out who built it"; goal is each task ≤30 seconds
|
|
143
|
+
|
|
144
|
+
What this luminary catches that "make a marketing site" misses: the trunk-test discipline, the copy-reduction ruthlessness, the conventional-navigation discipline, the one-primary-CTA discipline, the guerrilla-testable scope.
|
|
145
|
+
|
|
146
|
+
## How to use in canonical's chain
|
|
147
|
+
|
|
148
|
+
In `/visual-review`:
|
|
149
|
+
- Trunk test as a required check item; pages that fail = block merge until redesigned
|
|
150
|
+
- Copy-reduction prompt: "what's half? what's half of half?"
|
|
151
|
+
- Self-evident-affordance check: every interactive element passes "obvious-without-reading-label" test
|
|
152
|
+
|
|
153
|
+
In `/visual-qa`:
|
|
154
|
+
- Krug's guerrilla-test script + 3 task scenarios per UI surface; runs before each release
|
|
155
|
+
- 3 users; 30-min total; findings filed as substrate-defect or product-defect tickets
|
|
156
|
+
|
|
157
|
+
In `/synthetic-user`:
|
|
158
|
+
- Krug's task-script discipline informs synthetic-user persona journeys; synthetic users follow the same script form
|
|
159
|
+
|
|
160
|
+
## Related luminaries
|
|
161
|
+
|
|
162
|
+
- **Jakob Nielsen** — NNG co-founder; Krug's guerrilla testing + Nielsen's heuristic evaluation = paired pre-launch discipline
|
|
163
|
+
- **Don Norman** — Affordance theory underlies Krug's "self-evident"; Krug operationalizes Norman for the operator
|
|
164
|
+
- **Vitaly Friedman** — Craft-first patterns; Friedman's discipline manifests Krug's "don't make me think" in form/table/empty-state shapes
|
|
165
|
+
- **Susan Weinschenk** — Cognitive science backing; Weinschenk's research grounds Krug's intuitions
|
|
166
|
+
- **Erika Hall** — Pragmatic research; Hall + Krug share the "ship guerrilla discipline" stance
|
|
167
|
+
- **Aarron Walter** — Voice + microcopy; Walter's discipline complements Krug — both believe in ruthless brevity
|
|
168
|
+
- **Sophia Prater** — OOUX; Prater's object-driven IA serves Krug's trunk test (clear hierarchy = trunk-testable)
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Tony Ulwick
|
|
4
|
+
slug: tony-ulwick
|
|
5
|
+
claimed_by: [product-manager, shaper]
|
|
6
|
+
referenced_by_skills: []
|
|
7
|
+
primary_domain: product
|
|
8
|
+
depth: full
|
|
9
|
+
solves_problems_brownfield:
|
|
10
|
+
- "Product roadmap is built from feature requests instead of measured customer outcomes"
|
|
11
|
+
- "Team cannot articulate which customer outcomes are most underserved by the current product"
|
|
12
|
+
- "Job stories are missing from the spec; user stories carry behavior but not context or motivation"
|
|
13
|
+
- "Prioritization debates collapse into opinions because nobody has quantified which outcomes matter most"
|
|
14
|
+
solves_problems_greenfield:
|
|
15
|
+
- "Designing the first version of a product where outcome statements should drive the feature set"
|
|
16
|
+
- "Choosing a market entry point by finding the job step where outcomes are most undersatisfied"
|
|
17
|
+
- "Authoring requirements as job stories so the spec carries situation + motivation alongside behavior"
|
|
18
|
+
- "Building an opportunity algorithm to score where to invest first based on customer-rated importance and satisfaction"
|
|
19
|
+
anti_patterns:
|
|
20
|
+
- "Pure technology exploration where customer outcomes are deliberately undefined"
|
|
21
|
+
- "Highly personal consumer products where the unit of measurement (outcome statements) does not fit the use case"
|
|
22
|
+
- "Stable mature categories where the question is execution, not where to invest next"
|
|
23
|
+
sources:
|
|
24
|
+
- type: book
|
|
25
|
+
title: "What Customers Want: Using Outcome-Driven Innovation to Create Breakthrough Products and Services"
|
|
26
|
+
authors: ["Anthony W. Ulwick"]
|
|
27
|
+
year: 2005
|
|
28
|
+
url: "https://www.amazon.com/What-Customers-Want-Outcome-Driven-Breakthrough/dp/0071408673"
|
|
29
|
+
isbn: "0071408673"
|
|
30
|
+
methodology_covered:
|
|
31
|
+
- "Outcome statements — structured sentences naming direction, metric, object, and contextual clarifier"
|
|
32
|
+
- "Opportunity algorithm — Importance + max(Importance − Satisfaction, 0)"
|
|
33
|
+
- "Outcome-Driven Innovation (ODI) — anchoring product investment to customer-measured outcomes"
|
|
34
|
+
- type: book
|
|
35
|
+
title: "Jobs to Be Done: Theory to Practice"
|
|
36
|
+
authors: ["Anthony W. Ulwick"]
|
|
37
|
+
year: 2016
|
|
38
|
+
url: "https://www.amazon.com/Jobs-Be-Done-Theory-Practice/dp/0990576744"
|
|
39
|
+
isbn: "0990576744"
|
|
40
|
+
methodology_covered:
|
|
41
|
+
- "Job map (8 universal steps) — Define, Locate, Prepare, Confirm, Execute, Monitor, Modify, Conclude"
|
|
42
|
+
- "Jobs are stable; solutions change — anchoring strategy to outcomes across technology shifts"
|
|
43
|
+
- "Job stories — When [situation], I want to [motivation], so I can [outcome]"
|
|
44
|
+
- type: website
|
|
45
|
+
title: "Jobs-to-be-Done resource site"
|
|
46
|
+
authors: ["Tony Ulwick"]
|
|
47
|
+
year: 2016
|
|
48
|
+
url: "https://jobs-to-be-done.com/"
|
|
49
|
+
methodology_covered:
|
|
50
|
+
- "Outcome-Driven Innovation framework, outcome statement templates, opportunity algorithm reference"
|
|
51
|
+
- type: journal_article
|
|
52
|
+
title: "Turn Customer Input into Innovation"
|
|
53
|
+
authors: ["Anthony W. Ulwick"]
|
|
54
|
+
year: 2002
|
|
55
|
+
url: "https://hbr.org/2002/01/turn-customer-input-into-innovation"
|
|
56
|
+
methodology_covered:
|
|
57
|
+
- "Original ODI article introducing the opportunity algorithm to a wider business audience"
|
|
58
|
+
verification_status: verified
|
|
59
|
+
description: "\"Customers do not want features. They want outcomes. Define the outcome with a metric and a baseline. Then ask whether the current product delivers that outcome — and rank where…"
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
# Tony Ulwick
|
|
63
|
+
|
|
64
|
+
## Signature
|
|
65
|
+
|
|
66
|
+
*"Customers do not want features. They want outcomes. Define the outcome with a metric and a baseline. Then ask whether the current product delivers that outcome — and rank where it does not. That ranking is your product roadmap."* [ref:1]
|
|
67
|
+
|
|
68
|
+
Tony Ulwick (*What Customers Want* [ref:1] + *Jobs to Be Done: Theory to Practice* [ref:2]) operationalized Christensen's JTBD theory into Outcome-Driven Innovation (ODI). Where Christensen provided the frame ("people hire products to make progress"), Ulwick provided the measurement engine: outcome statements, importance + satisfaction scoring, the opportunity algorithm. The two compose; Ulwick makes JTBD actionable.
|
|
69
|
+
|
|
70
|
+
## Core methods
|
|
71
|
+
|
|
72
|
+
- **Outcome statements** — A structured sentence: "[direction of improvement] the [metric] of [object of measurement] [contextual clarifier]." Example: "Minimize the time it takes to identify which deals need attention today." Outcome statements are testable; feature ideas are not. They survive technology change because they describe what customers want done, not how. [ref:1]
|
|
73
|
+
- **Opportunity algorithm** — Score each outcome statement on importance (how much customers care) and satisfaction (how well the current solution delivers). Opportunity = Importance + max(Importance − Satisfaction, 0). Outcomes with high importance and low satisfaction are the highest-leverage product investments. Outcomes with high importance and high satisfaction are competitive moats; do not de-prioritize them. Outcomes with low importance are noise. [ref:4]
|
|
74
|
+
- **Job map (8 universal steps)** — Every job decomposes into Define + Locate + Prepare + Confirm + Execute + Monitor + Modify + Conclude. Mapping a job at this level surfaces which steps the current product covers and which steps customers complete with workarounds, other tools, or pain. Friction at any step is an opportunity. [ref:2]
|
|
75
|
+
- **Jobs are stable; solutions change** — The job a customer is trying to get done does not change much across decades. The product that helps them get it done changes often. Anchoring strategy to the job (and to outcome statements derived from it) gives the product a stable target across feature pivots, platform shifts, and competitive entries. [ref:2]
|
|
76
|
+
|
|
77
|
+
## When to channel this luminary
|
|
78
|
+
|
|
79
|
+
Channel Ulwick when product strategy needs to move from feature requests + opinion-based prioritization to measurement-based investment. The signal is: the team is debating which features to build next without a quantified view of which customer outcomes are most underserved.
|
|
80
|
+
|
|
81
|
+
Channel Ulwick when authoring a product spec where requirements must carry situation + motivation alongside behavior. Job stories preserve the why behind each requirement; user stories alone collapse it.
|
|
82
|
+
|
|
83
|
+
INSTEAD of channeling Ulwick for UX surface decisions: once the job + outcome statements + opportunity scores are clear, Cooper (personas + goal-directed design) and Norman (affordances + interaction) drive how the product surface helps customers reach the prioritized outcomes.
|
|
84
|
+
|
|
85
|
+
## Stack translation
|
|
86
|
+
|
|
87
|
+
In bassclef's SDLC:
|
|
88
|
+
|
|
89
|
+
- **Outcome statements feed `/canvas`** — the Thesis stage names the outcome statement (not the feature) the product targets. Outcome carries the metric; the metric drives acceptance.
|
|
90
|
+
- **Opportunity algorithm feeds backlog scoring** — each backlog item is tagged with the outcome it serves. Importance + satisfaction scores drive the prioritization rank. Underserved outcomes win.
|
|
91
|
+
- **Job map feeds `/ia-model`** — the 8-step structure suggests information surfaces and navigation flows. Steps where the current product covers nothing are net-new screen candidates.
|
|
92
|
+
- **Job stories feed `/spec`** — every spec section opens with the job story format: "When [situation], I want to [motivation], so I can [expected outcome]." The "so I can" links to the prioritized outcome statement.
|
|
93
|
+
|
|
94
|
+
## Anti-patterns it prevents
|
|
95
|
+
|
|
96
|
+
- **Feature-as-requirement** — writing requirements as "Add a deal staleness indicator" without naming the outcome. Ulwick would rewrite: "Minimize the time it takes for the operator to identify which deals need attention today." Now the requirement is testable + survives implementation choice. [ref:1]
|
|
97
|
+
- **Unscored prioritization** — picking what to build based on the loudest voice in the room. Ulwick's algorithm removes the debate: importance and satisfaction are measured, the opportunity score ranks the work, the room decides only the cutoff line. [ref:4]
|
|
98
|
+
- **Outcome confusion** — confusing customer outcomes (what the customer wants) with business outcomes (what the company wants). The opportunity algorithm runs on customer outcomes; business outcomes constrain the cutoff but do not change the ranking.
|
|
99
|
+
- **One-off interview synthesis** — running customer interviews without a structured outcome inventory. The team gathers anecdotes but cannot compare outcomes across customers. Ulwick's interview protocol produces measurable outcome statements that aggregate across the customer pool.
|
|
100
|
+
|
|
101
|
+
## Worked example
|
|
102
|
+
|
|
103
|
+
For POA's product strategy applied to deal management:
|
|
104
|
+
|
|
105
|
+
**Job identified (Christensen frame)**: Operators are hired to advance the pipeline so they can deploy capital.
|
|
106
|
+
|
|
107
|
+
**Job map applied (Ulwick 8-step)**:
|
|
108
|
+
|
|
109
|
+
| Step | Outcome statement | Importance | Satisfaction | Opportunity |
|
|
110
|
+
|---|---|---:|---:|---:|
|
|
111
|
+
| Locate | Minimize the time to find deals that fit the thesis | 9 | 3 | 15 |
|
|
112
|
+
| Prepare | Minimize the time to assemble the financials for a candidate deal | 8 | 5 | 11 |
|
|
113
|
+
| Monitor | Minimize the time to know which deals need attention today | 9 | 2 | 16 |
|
|
114
|
+
| Confirm | Minimize the time to verify a deal meets criteria before LOI | 7 | 6 | 8 |
|
|
115
|
+
| Modify | Minimize the effort to update the pipeline when a deal stalls | 6 | 4 | 8 |
|
|
116
|
+
|
|
117
|
+
The opportunity algorithm ranks Monitor (16) and Locate (15) as the highest-leverage investments. Prepare (11) is the third candidate. The team builds in that order; Confirm + Modify are noted as competitive parity work.
|
|
118
|
+
|
|
119
|
+
**What ODI rules out**: building broker CRM features (broker relationship management is a different job and is not on this customer's outcome map). Without ODI scoring, broker CRM might win attention via stakeholder pressure. With scoring, the absence of any broker-related outcome statement on the customer side makes the cutoff clear.
|
|
120
|
+
|
|
121
|
+
## Sources
|
|
122
|
+
|
|
123
|
+
- *What Customers Want: Using Outcome-Driven Innovation to Create Breakthrough Products and Services* — Ulwick, McGraw-Hill (2005) [ref:1]
|
|
124
|
+
- *Jobs to Be Done: Theory to Practice* — Ulwick, IDEA BITE Press (2016) [ref:2]
|
|
125
|
+
- jobs-to-be-done.com — Ulwick's Outcome-Driven Innovation framework, outcome statement templates, opportunity algorithm reference [ref:3]
|
|
126
|
+
- *Turn Customer Input into Innovation* — Ulwick, Harvard Business Review (2002) — the original ODI article that introduced the opportunity algorithm [ref:4]
|
|
127
|
+
|
|
128
|
+
## Related luminaries
|
|
129
|
+
|
|
130
|
+
- **Clayton Christensen** — Theoretical frame for JTBD. Christensen names the job + the milkshake insight; Ulwick measures the outcomes underneath the job. Channel Christensen first to identify the job, then Ulwick to score where to invest.
|
|
131
|
+
- **Teresa Torres** — Weekly continuous discovery cadence. Torres's opportunity-solution tree composes with Ulwick's outcome statements: outcomes anchor the tree, weekly interviews refresh importance + satisfaction scores.
|
|
132
|
+
- **Ryan Singer** — Shape Up appetite + betting table. Outcome scores feed the betting table directly: high-opportunity outcomes earn higher appetite.
|
|
133
|
+
- **Alan Cooper** — Once outcome statements are prioritized, Cooper's personas + goal-directed design translate them into UX surfaces. Cooper's goals map closely to Ulwick's outcome statements.
|
|
134
|
+
- **Jeff Patton** — User story mapping's backbone maps cleanly to the 8-step job map. Patton's story slices operationalize Ulwick's outcome prioritization at sprint scope.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: "/sprint and /longrun prep walk the active goal's parent_bet chain UP TO THE ROOT before proposing scope."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Parent-Goal Walk Before Scope Pick
|
|
7
|
+
|
|
8
|
+
> **Vocabulary note (2026-07-24, ADR-040 D1 rename table):** "arc" is being renamed to "thread" across bassclef prose per goal 2026-07-24c #849. The marker directory `state/markers/thread-walk/` is a symlink to `state/markers/arc-walk/`; both paths resolve during the grace window through 2026-10-31. Adopter-facing prose in this rule now prefers "thread" and "parent-goal walk"; historical mentions of "arc" and "arc-walk" in commit history, chronicle titles, and older docs still parse.
|
|
9
|
+
|
|
10
|
+
`/sprint` and `/longrun prep` walk the active goal's parent_bet chain UP TO THE ROOT before proposing scope. Walking one level only drops parent_drivers, open acceptance, and out_of_scope items from every goal beyond the immediate parent. Multi-day threads run 5-10 goals deep; ancestor context disappears when the walk is one-level.
|
|
11
|
+
|
|
12
|
+
The rule mechanizes the memory `feedback_arc_level_orientation_before_leaf` filed 2026-06-20 plus the bassclef#1347 fix shipped 2026-06-20h. Closes a 7-bet-deep arc failure observed on session 2026-06-20: agent typed `/longrun`, narrowed to the leaf ticket (bassclef#1268), missed 30+ in-flight items across the parent arc — 10 paused steps of bet 2026-06-18a, 12 still-open audit-drop tickets, 3 new tickets filed earlier the same day.
|
|
13
|
+
|
|
14
|
+
## When this rule fires
|
|
15
|
+
|
|
16
|
+
Two surfaces:
|
|
17
|
+
|
|
18
|
+
1. **Skill-invocation surface** — Any session running `/sprint` orientation OR `/longrun prep` Step 0.6 + Step 1 on a feature branch with an active iteration goal.
|
|
19
|
+
2. **Artifact-edit surface** (added per bassclef-upstream#300, 2026-06-23) — Any `Edit | Write | MultiEdit` PreToolUse on `docs/iteration-bets/*.md`. The agent can reshape WUs, update time budget, or absorb new scope into a goal doc; the gate fires on the artifact-write boundary regardless of whether `/longrun prep` or `/sprint` was invoked. Mechanical layer: `.claude/hooks/bet-doc-gate.sh` (composes with sister #21 produces/consumes substantive check).
|
|
20
|
+
|
|
21
|
+
## What the rule requires
|
|
22
|
+
|
|
23
|
+
Before proposing scope, walk the parent chain recursively:
|
|
24
|
+
|
|
25
|
+
1. Read `docs/iteration-bets/<active-bet>.md` frontmatter.
|
|
26
|
+
2. Read `parent_drivers`, open `acceptance` items, and `out_of_scope` from the active goal.
|
|
27
|
+
3. If `parent_bet:` is set, read that goal's frontmatter. Add its `parent_drivers` + open `acceptance` + `out_of_scope` to the union.
|
|
28
|
+
4. Repeat step 3 on the parent's `parent_bet`, then grandparent's `parent_bet`, until `parent_bet` is null or missing.
|
|
29
|
+
5. If any goal in the chain has `parent_roadmap:` set, read that roadmap's `last_event` + `next_pending` (per bassclef#337 state spine accessors).
|
|
30
|
+
6. Surface the unioned drivers + open acceptance + out_of_scope items in `/longrun prep` output BEFORE proposing scope-shape candidates. The shape candidates must frame the ARC, not just the leaf.
|
|
31
|
+
|
|
32
|
+
The mechanical surface for this rule:
|
|
33
|
+
|
|
34
|
+
- `.claude/skills/longrun/SKILL.md` Step 0.6 + Step 1 — procedure language
|
|
35
|
+
- `.claude/skills/sprint/SKILL.md` — orientation procedure (sister surface, separately ticketed)
|
|
36
|
+
- `.claude/hooks/session-reflection.d/55-orientation-gate.sh` — SessionStart layer; BLOCKED message displays the chain so the agent sees ancestor lineage before touching the per-branch orientation marker
|
|
37
|
+
- `.claude/hooks/bet-doc-gate.sh` — Artifact-edit layer (PreToolUse Edit|Write|MultiEdit on `docs/iteration-bets/*.md`); BLOCKs when the parent-goal walk marker missing at `state/markers/thread-walk/<goal-slug>.marker` (which symlinks to `state/markers/arc-walk/<goal-slug>.marker` during the grace window through 2026-10-31); composes with sister #21 produces/consumes substantive check. Closes bassclef-upstream#300.
|
|
38
|
+
|
|
39
|
+
## Cycle protection
|
|
40
|
+
|
|
41
|
+
Cap the walk depth at 20 ancestors. Break on a repeated slug. Cycles in `parent_bet` chains are unexpected today (no bet declares its descendant as parent) but the cap defends against future drift + bad-data edge cases.
|
|
42
|
+
|
|
43
|
+
## Override path
|
|
44
|
+
|
|
45
|
+
`SKIP_ORIENTATION_GATE=1 <command>` — logged via trace-helper per `.claude/rules/blocked-items.md`. Use rarely. Examples of legitimate overrides:
|
|
46
|
+
|
|
47
|
+
- Single-bet sessions where the goal is the arc root (no parent_bet ever existed)
|
|
48
|
+
- Read-only sessions where no scope proposal is being made
|
|
49
|
+
- Emergency rescue when the hook itself is broken
|
|
50
|
+
|
|
51
|
+
INSTEAD of overriding for routine work: read the chain. The cost is small (one frontmatter read per ancestor), the benefit compounds across every future arc.
|
|
52
|
+
|
|
53
|
+
## Composes with
|
|
54
|
+
|
|
55
|
+
- `.claude/rules/blocked-items.md` — BLOCK protocol the orientation-gate hook fires
|
|
56
|
+
- `.claude/rules/artifact-ingestion.md` — "Sources read" block discipline applied at the chain-walk level
|
|
57
|
+
- `.claude/rules/plan-enumeration-needs-value-props.md` — sister at choice-presentation surface
|
|
58
|
+
- `.claude/rules/wu-sequencing-compounds.md` — sister at intra-shape WU discipline (bassclef#1348)
|
|
59
|
+
- `.claude/skills/longrun/SKILL.md` Step 0.6 + Step 1 — primary surface this rule extends
|
|
60
|
+
- `.claude/hooks/session-reflection.d/55-orientation-gate.sh` — mechanical layer
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: Every architect-review run MUST exercise both methods — static comprehension AND dynamic verification.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Architect-Review Discipline
|
|
7
|
+
|
|
8
|
+
Every architect-review run MUST exercise both methods — static comprehension AND dynamic verification. The bet 24c architect-review (2026-06-24) shipped a thorough comprehension-side audit but missed the mechanism-fidelity class because runtime verification was structurally absent. The recursive Act phase (`architecture/audits/2026-06-27-audit-method-blind-spot.md`) named the gap; this rule mechanizes the fix.
|
|
9
|
+
|
|
10
|
+
This rule is the methodology layer. The mechanical layers: the architect-review SKILL.md amendment (mandatory two-method procedure step) + per-stack siblings under `standards/architect-review-discipline/<stack>.md` (concrete verification suite per `tech_stack.kind`).
|
|
11
|
+
|
|
12
|
+
## When this rule fires
|
|
13
|
+
|
|
14
|
+
Every invocation of `/architect-review`. Auto-loaded via `additionalDirectories`. Mandatory check before the review's "Commit the review document" step.
|
|
15
|
+
|
|
16
|
+
## What this rule requires
|
|
17
|
+
|
|
18
|
+
Before committing any architect-review report:
|
|
19
|
+
|
|
20
|
+
1. **Static comprehension** completed — every artifact in scope read; classified per 6M fishbone (per @luminary kaoru-ishikawa). Comprehension lenses primary: @luminary frederick-brooks (conceptual integrity) + @luminary linus-torvalds (adopter-compatibility stance).
|
|
21
|
+
|
|
22
|
+
2. **Dynamic verification** completed — verification suite per the per-stack sibling at `standards/architect-review-discipline/<stack>.md` invoked. Verification lenses primary: @luminary michael-feathers (characterization tests) + @luminary kent-beck (TDD) + @luminary saltzer-schroeder (complete mediation).
|
|
23
|
+
|
|
24
|
+
3. **Both methods' findings appear in the report** — separately classified. The report's "Verification step performed" column per finding (per `standards/architect-review-discipline.md` § "Output coverage criterion" — A4 from recursive Act phase) makes the method visible per row.
|
|
25
|
+
|
|
26
|
+
4. **Per-stack sibling exists** — for `tech_stack.kind: substrate`, the sibling at `standards/architect-review-discipline/substrate.md` (ships bet 27c WU-9.55). For other stacks, the sibling ships per `bassclef-upstream#418` per-stack rollout.
|
|
27
|
+
|
|
28
|
+
5. **Lens-set declaration in audit frontmatter** — the audit's `luminaries.primary` field declares the primary lens set up front. The actual lens set used in the report MUST match the declaration. Declaration mismatch is a methodology failure per A3 from recursive Act phase.
|
|
29
|
+
|
|
30
|
+
## Anti-patterns
|
|
31
|
+
|
|
32
|
+
These shapes fail this rule.
|
|
33
|
+
|
|
34
|
+
**Architect-review ships with comprehension-side findings only.** Bet 24c failure pattern; the audit-method blind spot the recursive Act phase named. Cure: invoke the verification suite per the per-stack sibling; add findings to the same report.
|
|
35
|
+
|
|
36
|
+
**Lens-set declaration in frontmatter does not match actual lens set used.** Methodology failure per A3. Cure: amend the frontmatter to match what was actually applied, OR amend the report to match the declared lenses.
|
|
37
|
+
|
|
38
|
+
**Report findings table has no "Verification step performed" column.** Output coverage criterion (A4) violation. Cure: add the column; populate per finding.
|
|
39
|
+
|
|
40
|
+
**Per-stack sibling missing for the stack under review.** No verification suite to invoke; the second method cannot run. Cure: file a `/promote bassclef-evolution` request for the stack; defer the review OR invoke whatever verification IS available + note the gap in the report.
|
|
41
|
+
|
|
42
|
+
**INSTEAD** of skipping verification when the suite is incomplete: invoke what exists, document what does not, file the cure ticket. Per `.claude/rules/blocked-items.md`, silence is not deferral.
|
|
43
|
+
|
|
44
|
+
## Composes with
|
|
45
|
+
|
|
46
|
+
- `.claude/rules/substrate-as-system.md` — sister tenet (bet 27c WU-9) — the system the architect-review verifies
|
|
47
|
+
- `.claude/rules/mechanism-fidelity.md` — sister discipline (bet 27c WU-9) — 7-label classification used by the verification suite
|
|
48
|
+
- `.claude/rules/cold-adopter-harness-discipline.md` — the harness IS one verification surface for adopter-observable substrate
|
|
49
|
+
- `.claude/rules/iteration-bet-brief-completeness.md` — lens-set declaration discipline extends to goal docs (A3)
|
|
50
|
+
- `.claude/skills/architect-review/SKILL.md` — the SKILL this rule extends (two-method procedure step)
|
|
51
|
+
- `standards/architect-review-discipline.md` (bet 27c WU-2 — universal framework)
|
|
52
|
+
- `standards/architect-review-discipline/substrate.md` (bet 27c WU-9.55 — substrate sibling)
|
|
53
|
+
- `standards/mechanism-fidelity.md` (bet 27c WU-2 — verification chain spec)
|
|
54
|
+
- ADR-035 substrate-as-system + 9-surface hook taxonomy
|
|
55
|
+
- `architecture/audits/2026-06-27-audit-method-blind-spot.md` (bet 27c WU-7.5 — recursive Act phase that motivates this rule)
|
|
56
|
+
- `architecture/audits/2026-06-27-mechanism-fidelity.md` (bet 27c WU-6 — empirical evidence)
|
|
57
|
+
- `architecture/audits/2026-06-24-closeout.md` (bet 24c audit; this rule's predecessor whose method gap is named here)
|
|
58
|
+
- `lib/mechanism-fidelity.sh` (bet 27c WU-3) — verification chain shared deep module
|
|
59
|
+
- `.claude/skills/audit-rule-mechanism-fidelity/SKILL.md` (bet 27c WU-4) — operator-invocable audit
|
|
60
|
+
- `scripts/cold-adopter-harness-sync.sh` Shape d (bet 27c WU-5) — per-PR gate
|
|
61
|
+
- @luminary michael-feathers — verification-side anchor (full luminary upgrade per step-9.6 — cross-references substrate-as-system tenet)
|
|
62
|
+
- @luminary kent-beck — TDD anchor; tests pin contracts
|
|
63
|
+
- @luminary saltzer-schroeder — complete mediation
|
|
64
|
+
- @luminary w-edwards-deming — Act phase (this rule operationalizes A1-A4)
|
|
65
|
+
- @luminary kaoru-ishikawa — recursive 6M fishbone (this rule operationalizes the fishbone applied to audit method itself)
|
|
66
|
+
|
|
67
|
+
## Override
|
|
68
|
+
|
|
69
|
+
`SKIP_ARCHITECT_REVIEW_DISCIPLINE=1 <command>` — for genuine one-shot review runs where verification is structurally impossible (e.g., reviewing a frozen historical snapshot). Logged via trace-helper.
|
|
70
|
+
|
|
71
|
+
INSTEAD of overriding routinely: invoke the verification suite per the per-stack sibling. The cost is bounded by the suite's scope; the discipline holds across every future review.
|