A2.05 · Splitting · dive 1
The signal to split
A split is a repair, and like every repair it has a trigger. The trigger is a story that fails Small or Estimable.
INVEST is read before a rung is built. A No on Small or Estimable means the story is too big for one turn, so it cannot be specified or accepted as one — that No is the signal to split. Switch the story on the right to score it against the two letters that name a too-big story. A too-big story usually hides a third symptom, which the next view counts.
Score the story against Small and Estimable · switch the story
The failing letter is the trigger
A story is the unit of work the Operator hands the Author, and INVEST (A2.03) is the gate read before it is handed over. Of the six letters, two name a story that is too big. Small asks whether the story fits one rung — one turn of the loop, small enough to specify, build, and demo in a single pass. Estimable asks whether its cost is a guess anyone can make. A No on either is not a defect in the wording; it is a statement about size, and the repair for size is a split.
Reading the signal early is the whole point. A story over the one-rung budget cannot be specified once, so it cannot be accepted once: handed to the Author as written, it produces a sprawl no one can demonstrate against a single criterion. Splitting it first is cheaper than unwinding a rung later. The trigger is read off the gate, not guessed: when Small or Estimable answers No, the story is split before any code is generated.
- the signal
- A No on Small or Estimable. The story is too big for one rung; split it before handing over.
- Small
- Fits one turn of the loop — specifiable, buildable, and demoable in a single pass.
- Estimable
- Its cost is a fair guess. A story too big to size is too big to plan; size is what makes the estimate a shot in the dark.
- repair
- Not a shorter sentence — a split into several stories that each pass Small and Estimable and each still ship value.
Small and Estimable move together: a story that fails one usually fails the other, because its size is the single cause of both (the A2.03.3 tie — Estimable follows from Small).
The signal on the Portal
On the Portal — the learning platform this course builds — “manage the whole catalogue” fails Small and Estimable. Read the verb: “manage” hides four behaviours — browse, add, edit, and remove a course. The double failure (S and E) and the four hidden behaviours are the same fact seen twice: the story is unestimable precisely because its cost is the sum of four guesses. Contrast “enrol in a course”, which carries one behaviour, passes both letters, and ships as one rung.
The signal is never “the identifiers are missing.” The ids the rungs rest on are already minted
— Portal.ID.generate/1 hands back a typed id, and
Portal.ID.decode/1 reads its .type back — so nothing
blocks a small story from shipping. What blocks a too-big one is its size, read off Small and Estimable before
a line is generated. The how of the cut is the next dive; the signal is here.
# Read INVEST before handing the story to the Author. # "enrol in a course" → Small: pass · Estimable: pass → 1 rung, hand over # "manage the whole catalogue" → Small: FAIL · Estimable: FAIL → the signal to split # "manage" hides four behaviours — the failing letter sizes the split: # browse → add → edit → remove a course (split into 4) id = Portal.ID.generate(:course) # ids are already minted — size, not identity, is the blocker assert Portal.ID.decode(id).type == :course
The principle
A story too big for one rung fails Small and Estimable; the failing letter is the trigger to split, and the behaviours it hides are the slice count.
On the Portal
“Manage the whole catalogue” fails S and E because “manage” hides browse, add, edit, and remove; the split produces four rungs. “Enrol” carries one and ships as is.
The signal to split is an INVEST No on Small or Estimable — read before any code, sizing the split by the behaviours the story hides.
Recap — read the signal, size the split
A split is a repair triggered by a failing letter: a No on Small or Estimable says the story is too big for one rung. The two move together because size is their common cause, and that size shows up as a bundle of behaviours hidden behind one verb. The count of those behaviours is the count of rungs the split will yield, so the failing letter both flags the problem and sizes the solution. On the Portal, “manage the whole catalogue” fails both letters and hides four behaviours; “enrol” passes and ships. With the signal read, the next dive makes the cut.
Next in A2.05: A2.05.2 · Split patterns — the four vertical seams, by workflow step, business rule, happy and sad path, and operation, that turn the signal into the cut.
References
The sources behind the too-big signal and the readiness gate it sits in, and where it connects in the course.
Sources
- Cohn, M. — User Stories Applied — when a story is too big, and how to keep it small.
- Wake, B. — INVEST in Good Stories, and SMART Tasks — Small and Estimable as named tests.
- Beck, K. — Extreme Programming Explained — splitting stories that do not fit an iteration.
Related in this course
- A2.05 · Splitting stories that are too big — the module hub.
- A2.05.2 · Split patterns — the next dive.
- A2.03 · INVEST — the gate this signal is read from.
- A2.03.3 · Small and independent — Estimable follows from Small.
- A2.01 · Value, not tasks — the value each split part must keep.
- Companion · Functional Programming in Elixir — the Portal's internals.