jonnifyagile agents
jonnify / Agile Agent Workflow / A3 · The roadmap layer / A3.7 · Tracer bullets and walking skeletons

A3.7 · The roadmap layer

The tracer bullet

Ship one thin thread through every layer first, kept and grown — not a layer built fully, and not a prototype to discard.

A roadmap stays honest about uncertainty when it threads one thin slice end to end before deepening any layer. The exemplar is the Portal's real web chapter — F6 (Phoenix): its tracer is rung f6.1, the engine served as a web app (request → facade → render), shipped before persistence (f6.3) or the rendered catalog (f6.5). Walk the ladder on the right to find it.

Walk the F6 ladder · find the tracer

phoenix.roadmap.md · the ladder · one thread, then depth f6.1 · the engine served as a web app request → facade → render — the first end-to-end thread the tracer f6.3 · durable catalog and enrollments depth: persistence f6.5 · the rendered catalog depth: the view f6.7 · real-time, live everywhere depth: live master invariant · every rung calls only the Portal facade
f6.1 · the engine served as a web app — the tracer bullet: the first end-to-end thread (request → facade → render), shipped before persistence (f6.3) or the rendered catalog (f6.5). Kept and grown, not discarded.

Thread first, then depth

A backlog can be ordered two ways. Breadth-first builds each layer fully — the whole data layer, then the whole facade binding, then the whole view — and integrates last, when the most risk is left to discover. Depth-first ships one thin thread through every layer first: a tracer bullet. The thread proves the seams on day one, and every later rung deepens the slice that already works.

On the Portal's web chapter F6, the tracer is rung f6.1: the engine served as a web app — a request enters the endpoint, calls the Portal facade, and renders a page. Its demo is “hit the root, see a page”; its harness is a single GET smoke. It is shipped before persistence (f6.3) or the rendered catalog (f6.5), and it is a real thin feature that is kept and grown — not a prototype to throw away. Every rung holds the master invariant: “The web layer calls only the Portal facade and renders only the closed %Portal.Error{} set.”

the principle

Ship a thin end-to-end thread first — a tracer bullet — to de-risk integration early; keep it and grow it. A prototype is built to learn, then discarded.

on the Portal

F6.1 is the tracer — the engine served as a web app (request → facade → render), kept and grown into the live platform. A prototype of it would be discarded once it answered its question.

The tracer is the rung you keep and grow; the prototype is the rung you throw away.

The three dives

Each dive takes one move of the technique, in the arc end to end first → tracer vs prototype → deferring breadth: first why the thread ships before depth, then how to tell a tracer from a walking skeleton and a prototype, then how deferring breadth keeps the roadmap honest about uncertainty. Read them in order — A3.7.1 starts.

A3.7 grounds the technique on the orientation dive A3 · The roadmap layer, and on the real phoenix.roadmap.md read in A3.3 · Anatomy of a roadmap.md. Return to the A3 chapter navigation to continue.

References

The delivery-planning tradition the tracer-bullet technique draws on, and where it connects in the course.

Sources

Related in this course