A1.01 · The two failure modes · dive 3
The thin slice
One vertical cut through every layer that delivers a small piece of real, acceptable value — specified only enough to be proven, shipped before the next begins.
Too little plan ships the unspecifiable; too much plan ships nothing. The slice is the minimum between them: small enough to prove, large enough to matter. Toggle the figure to see what makes a cut a slice rather than a layer.
Vertical slice or horizontal layer
What a thin slice is
A thin slice is one vertical cut through every layer that delivers a small, usable piece of value. The opposite is a horizontal layer — all of one tier, the whole data model or the whole interface, finished for every feature at once. A layer is shippable to no one: a database with no logic and no screen does nothing a person can use. A slice touches the interface, the logic, and the data for a single feature, so it can be run, shown, and accepted on its own.
The test of a good slice is INVEST: it is Independent, Negotiable, Valuable, Estimable, Small, and Testable. Two older names describe the first slice of a system: a tracer bullet — a minimal end-to-end path wired through every layer, so the architecture is proven early on something real — and a walking skeleton, the smallest implementation that exercises the whole system end to end, then grows rung by rung.
- thin slice
- One vertical cut through every layer delivering a small, acceptable piece of value — runnable, demonstrable, and provable on its own.
- horizontal layer
- All of one tier finished at once. Complete in itself, but usable by no one until the tiers above and below it exist.
- INVEST
- Independent, Negotiable, Valuable, Estimable, Small, Testable — the test a slice passes.
- tracer bullet
- A minimal end-to-end path built first, proving the architecture on a real result.
Why it works — four forces, each answering a failure
The slice is not a compromise between the two failures; it removes the property that made each one fail. Four forces, and each is the exact answer to one earlier dive.
1 · Provable — answers vibe coding
A slice is small enough to specify only enough and prove. It carries its own definition of done — the one behaviour it adds and the check that accepts it — so it can never be the unspecified, unacceptable diff that sank vibe coding. Generation with no acceptance is impossible here: the acceptance is part of the slice.
2 · Feedback now — answers the big-bang spec
Each slice returns reality the moment it ships. The first answer arrives in week one, not at the end, so the silence that doomed the big-bang spec is broken at the first rung. Every assumption is tested while it is cheap to be wrong.
3 · Correct by definition
A slice is accepted before the next begins, so correctness is a property held at every step rather than a state hoped for at the end. "Done" is not a milestone far away; it is the gate on each rung. The system is correct now, and stays correct as it grows, because no rung is built on an unaccepted one.
4 · Compounding correctness
Each slice is built on an already-accepted slice — the exact mirror of vibe coding's compounding entropy. There, confidence leaked rung over rung; here, it accumulates. The hundredth rung stands on ninety-nine proven ones, so the cost of being sure does not grow with the system.
The value ladder
Feedback now has a consequence worth measuring: value arrives early and keeps arriving. Step through the increments below. A thin-slice plan ships one accepted rung of value at each step, from the first. A big-bang plan ships nothing until the single release at the end — the same total, delivered late, and only if the one release works.
Accepted value shipped · move the slider
Same total value, two schedules: the thin-slice plan banks it rung by rung from week one; the big-bang plan books all of it for a single day that may never arrive.
The first rung on the Portal
Put the slice on the Portal — the learning platform this course builds. The first rung is not "the store". It is one branded Snowflake id: a 14-character identifier whose embedded timestamp, node, and sequence decode back correctly and never collide within a node-millisecond. That one rung is a full vertical cut — the id format is the data, the generator is the logic, and the value a caller receives is the interface.
It is specified by its invariants, proven by a test, and shipped. Only then does the next slice — storing a single event keyed by such an id — begin, built on an accepted rung. Nothing downstream trusts an id until the rung that mints it has been accepted.
# the first rung: one branded id, specified by its invariants and proven id = Portal.ID.generate(:user) # => "USR0NbAb1xcFCy" # the slice carries its own acceptance — it decodes back, and it is unique assert Portal.ID.decode(id).type == :user assert Portal.ID.decode(id).timestamp <= now() refute id == Portal.ID.generate(:user) # a fresh id, every call
The principle
Value is delivered in thin, vertical, provable slices — specified only enough, proven, then the next. Correctness is held at every step, and confidence compounds.
On the Portal
The first rung is one branded id — its invariants specified, a test proving it, shipped; every later rung is a slice built on an accepted one, never on a guess.
A thin slice is small enough to prove and large enough to matter — the only unit that is both shippable and certain.
Recap — the module, resolved
Too little plan ships the unspecifiable; too much plan ships nothing. The thin slice is the minimum between them: the smallest vertical cut that is still worth shipping and still possible to prove. It answers vibe coding by carrying its own acceptance, and the big-bang spec by returning feedback at the first rung; it holds correctness at every step, and compounds confidence instead of leaking it. It is the shape every later rung in the course takes — and the unit the whole Author/Operator loop exists to produce.
That closes A1.01. The next module, A1.02 · Pragmatic Programming, revisited for agents, re-reads the pragmatic canon for a world where an agent writes the code. Return to the A1 module navigation to continue.
References
Primary sources for the thin, vertical slice, and where it connects in the course.
Sources
- Cohn, M. — User Stories Applied — INVEST and the thin, vertical slice of value.
- Hunt & Thomas — The Pragmatic Programmer — tracer bullets and walking skeletons.
- Adzic, G. — Specification by Example — specifying by concrete, acceptable examples.
Related in this course
- A1.01.1 · Vibe coding — the no-plan failure this slice answers.
- A1.01.2 · Big-bang specs — the over-plan failure this slice answers.
- A1.01 · The two failure modes — the module hub.
- A0.2.1 · The two-layer model — the structure a slice fits into.
- A1 · Why an agile agent workflow — the chapter.