jonnifyagile agents
jonnify / Agile Agent Workflow / A1 · Why / A1.01 / A1.01.3 · Thin slices

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

feature A feature B feature C interface logic data
A vertical slice cuts feature A through all three layers — interface, logic, and data — so one feature works end to end: 1 shippable, acceptable feature.

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

3
value increments built → big-bang: zero until the end thin slices: value every rung
At increment 3 the thin-slice plan has shipped 3 accepted rungs of value; the big-bang plan has shipped 0 — its value waits for the final release at increment 6.

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

Related in this course