Vertical slices (tracer bullets) — every task crosses all layers, none stops at one
Vertical slices — tracer bullets
Concept
Tracer bullets. Hunt & Thomas, Pragmatic Programmer (1999), Topic 12. Modern name: vertical slice.
Every task crosses all layers it touches. Smallest slice ships end-to-end. Real code, keeper code — not prototype.
Horizontal vs vertical
| Split | Phases | First demo |
|---|---|---|
| ❌ Horizontal | DB all → API all → UI all | End of phase 3 |
| ✅ Vertical | 1 field DB + 1 route API + 1 button UI, repeat | End of slice 1 |
Failure mode agents default to
AI plans horizontally. Reads schema → writes all migrations → writes all services → writes all UI. Feedback arrives only at phase 3. Wrong assumption at phase 1 = rework everything.
Vertical: slice 1 exposes the wrong assumption on day 1.
Fix — task template
<verb> <feature> visible on <surface>
Pocock example (2026-07 workshop): "award points for lesson completion visible on dashboard" — one migration column + one service method + one dashboard number. Ships. Next slice adds streak logic.
Where this applies
| Surface | Slice discipline |
|---|---|
TaskCreate splits |
Each task = one visible slice, not one layer |
| PR shapes | One PR = one slice, not "all backend changes" |
| Decision-file "next steps" | Ordered slices, not layer-groups |
| Sub-agent delegation | Give sub-agent a slice, not a layer |
Tracer bullet ≠ prototype
| Prototype | Tracer bullet |
|---|---|
| Throwaway | Keeper |
| Explores unknowns | Wires real system |
| Fake data OK | Real data path |
| Deleted after | Grows next slice on top |
Anti-patterns
- ❌ "Let me first set up all the types, then wire the API, then the UI"
- ❌ TaskCreate with 5 tasks: schema, migrations, services, routes, UI
- ❌ PR titled "backend for feature X" (no UI = no demo = no feedback)
- ❌ Deferring "the UI part" to a later PR — that's when the design breaks
Cross-refs
- [[feedback-loops-are-the-ceiling]] — vertical slices maximize feedback frequency
- [[minimum-everything]] — smallest useful slice, not all-of-layer-N
- karpathy-guidelines §Goal-Driven Execution — verifiable-per-step ladders
- ponytail — smallest code that works, per slice
- Source: Hunt & Thomas, The Pragmatic Programmer Topic 12 (1999); Matt Pocock 2026-07 workshop