A2.03 · INVEST · dive 1
The six tests
INVEST reads as one word, but it is six independent yes/no questions. Asking them one at a time turns “not ready” into a precise verdict.
A story that answers Yes to all six is ready to hand to the Author; one No is a repair order, not a rejection. Switch the story on the right to score it against the six and read the pass count and the first failing letter.
Score a Portal story against the six · switch the story
Six questions, one at a time
INVEST is one word, but reading it as one judgement loses its value. It is six separate questions, and a story is ready only when all six answer Yes:
- Independent
- Can this be built and shipped without first finishing another story?
- Negotiable
- Is the detail still open to a conversation, not frozen into a contract?
- Valuable
- Does it change what a user can do, demonstrably?
- Estimable
- Can the cost be guessed with any confidence?
- Small
- Does it fit one rung — one build-and-demo turn?
- Testable
- Is there a concrete way to confirm it is done?
The first No is the most useful output. A story that fails Small cannot be specified for one turn; one that fails Testable cannot be accepted. Reading the six in order finds the repair before the rung is built.
Each letter is a separate gate
The scorecard frames the whole verdict at once. This view proves the consequence underneath it: each letter is an independent gate, so a story can pass five and still be blocked by the sixth. Pick a letter to read its yes/no question, the Portal story that cleanly passes it, and the one that cleanly fails it.
Reading letter by letter is what keeps the repair precise. “Not ready” is a feeling; “fails Small” is an instruction. The inspector shows that the same Portal story can be a clean pass on one letter and the textbook failure on another — the letters do not move together.
Inspect one letter · its question, a pass, a fail
Six gates, read one at a time: a story can pass five and still be stopped by the sixth, and the one it fails is the repair.
The six tests on the Portal
On the Portal — the learning platform this course builds — take the story “enrol in a
course”. Read the six in order. Independent: it needs only a course id and a learner id, both already
minted by Portal.ID.generate/1. Negotiable: the confirmation copy and the
duplicate-enrol rule are still open. Valuable: the learner gains access they did not have. Estimable: one
stored event plus a read check, a guessable cost. Small: one rung, one turn. Testable: after enrol, the
learner's enrolment list contains the course. Six of six.
Now read “manage the whole catalogue”. Independent fails — its parts depend on one another. Estimable fails — no one can put a number on months of work. Small fails — it is not one rung. Three letters fail at once, because size drags the others down. The story is not wrong; it is not yet a story, and the first failing letter says to split it.
# Score "enrol in a course" — read the six in order. # I independent — needs a course id + a learner id, both already minted # N negotiable — confirmation copy and duplicate rule still open # V valuable — the learner gains access they did not have # E estimable — one stored event + a read check # S small — one rung, one turn # T testable — after enrol, the enrolment list contains the course course_id = Portal.ID.generate(:course) # => "CRS0Nb...", the ids the story rests on # 6 / 6 — ready to hand to the Author. # "manage the whole catalogue" — I, E, S all fail. Not yet a story; split it (A2.05).
The principle
Read the six tests one at a time; the first No is the most useful output, because it names the repair before the rung is built.
On the Portal
“Enrol in a course” scores 6/6 and is built; “manage the whole catalogue” fails I, E, and S, so the first No sends it back to be split.
A story ready to hand over passes all six; one that fails any letter is told, by that letter, what to repair.
Recap — six questions, one verdict
INVEST is six independent yes/no questions, read before a rung is built. A story that answers Yes to all six is ready to hand to the Author; one No is a repair order that names what to fix. Each letter is a separate gate, so a story can pass five and be stopped by the sixth. The next dive turns this scorecard into a diagnostic: when a story fails, it fails in one of a few recurring ways — a smell — and the smell names the letters and the rewrite.
Next in A2.03: A2.03.2 · Story smells — the four recurring ways a story fails, and how to diagnose and rewrite each.
References
The checklist's source and the story tradition behind it, and where it connects in the course.
Sources
- Wake, B. — INVEST in Good Stories, and SMART Tasks — the six tests, in the words that coined them.
- Cohn, M. — User Stories Applied — what a good story is, and how to keep it small.
- Beck, K. — Extreme Programming Explained — stories and the customer's definition of done.
Related in this course
- A2.03 · INVEST — the module hub.
- A2.03.2 · Story smells — the next dive.
- A2.03.3 · Small and independent — the Small/Independent tension.
- A1.04 · Two layers: roadmap and specs — the spec a passing story feeds.
- A2 · Decomposition — the chapter.
- Companion · Functional Programming in Elixir — the Portal's internals.