A2.07 · Workshop · dive 3 · when
Order the backlog
Nine proven rungs are a list, not a plan. A backlog needs two more things: an order, and a history. This dive reads both off the real F6 chapter.
The order: the value ladder groups the nine F6 rungs into three dependency-ordered milestones — M1 ship the catalog (F6.1–F6.5), M2 make it live (F6.6–F6.7), M3 ship to users (F6.8–F6.9) — each runnable at its end, the shipped/specified frontier falling after F6.6. The history: the git trail shows the specs written 02 Jun, F6.1–F6.6 shipped by 05 Jun, and F6.7–F6.9 reconciled forward — spec → build → reconcile, the spec the moving source of truth. Pick a milestone on the right to read what it ships.
The F6 ladder · nine rungs, three milestones · pick a milestone
The order: three milestones, runnable at each
Dives 1 and 2 produced nine ready, proven rungs — but nine rungs in a row are still a list. A backlog
has an order, and the order is not a preference: it is the dependency graph. The value ladder groups the
rungs into three milestones, each one a deliverable a real role can use, each resting only on the milestones
below it, the system runnable at every boundary. This is the delivery arc the companion course’s
phoenix.roadmap.md records, read straight off the source.
The arc is the first deployable product first, then layer interactivity, real-time, and operations on top. M1 ships the catalog (F6.1–F6.5): a persistent, server-rendered catalog you can browse and add to. M2 makes it live (F6.6–F6.7): the same catalog, interactive and pushed across clients. M3 ships to users (F6.8–F6.9): auth, a deployed clustered release, and an operations dashboard, once the live catalog has earned feedback. Pick a milestone in the hero to read what it ships; the rows below are verbatim from the roadmap.
- M1 · F6.1–F6.5
- Ship the catalog. At the end: browse a persistent catalog and add courses, server-rendered, with inline errors. Rests on nothing above the F5 facade. 5 of 5 shipped.
- M2 · F6.6–F6.7
- Make it live. At the end: search and create without reloads; every client updates live with a viewer count. Rests on M1 — F6.6 makes F6.5’s pages live. F6.6 shipped, F6.7 specified.
- M3 · F6.8–F6.9
- Ship to users. At the end: sign in, run behind auth on a deployed clustered release, watch an operations dashboard. Rests on M2 — F6.9 composes the whole chapter. Specified, not yet built.
The dependency runs downward, not sideways: F6.5 renders only what F6.3 and F6.4 make queryable; F6.6 makes F6.5’s pages live; F6.9 composes all of it. So the milestones can ship in order — each one a runnable product — and nothing below the F5 facade changes as they do. Six rungs (F6.1–F6.6) are shipped; three (F6.7–F6.9) are specified, the frontier falling inside M2.
The history: read the git trail
The order is only half a backlog. A real one also has a history — it changed under feedback, and the repository keeps the receipts. The F6 decomposition was not written once and obeyed; it was written up front, built one rung at a time, and reconciled as each shipped rung taught the next. The cadence is spec → build → reconcile: every time the as-built surface diverged from the plan, the plan was edited — never the engine below the facade. This is the move A2.07’s parent loop names in A1.03.3 · Adapt: feedback edits the spec, not the code.
Step the slider through the nine dated F6 commits. The readout prints the date, the commit hash, and what
changed — a rung flipping shipped, or a spec
reconciled — with the running count of the ladder’s
state. The clearest spec-edit is 5a440fd, the F6.5 route reconcile: a naming
collision on /courses, surfaced during the build, sent feedback back into the spec.
The F6 git trail · nine commits, 02–05 Jun · step through time
A backlog has a history as well as an order — and the git trail shows the spec moving under feedback while the engine below the facade holds still.
The ordered backlog, written out
Put the order and the history together and the F6 backlog reads as below: nine rungs over the unchanged F5 facade, grouped into three milestones, each milestone a runnable product, the shipped/specified frontier marked. This is the artifact the whole workshop was for — not a static list, but a dependency-ordered, version-controlled plan whose specs move under feedback while the engine holds still. The store and engine it rests on are built in the companion course; this ordering is the human work that decides what ships, in what order, and how the plan adapts. Each rung is specified, built, and proven at /elixir/phoenix, with the M3 frontier — auth and the deployed release — at /elixir/phoenix/deployment.
# The F6 backlog — nine rungs over the unchanged F5 Portal facade, # ordered into three milestones. Each milestone is a runnable product. # ── M1 · ship the catalog ─────────── browse + add, server-rendered ── F6.1 boot # shipped 03 Jun · the engine served as a Phoenix app F6.2 route # shipped 04 Jun · routes + pipelines + a protected scope F6.3 Ecto # shipped 04 Jun · persistence behind the EventStore port F6.4 ctx # shipped 04 Jun · Catalog/Enrollment/Accounts behind the facade F6.5 HEEx # shipped 04 Jun · the catalog rendered; route reconcile 5a440fd # ── M2 · make it live ───────────── interactive + pushed to clients ── F6.6 Live # shipped 05 Jun · live search + live create over the facade F6.7 PubSub # specified · per-socket state pushed across clients ◄ frontier # ── M3 · ship to users ───── auth, a deployed release, a dashboard ── F6.8 auth # specified · phx.gen.auth, runtime secrets, a release task F6.9 dash # specified · the whole chapter composed read-only, under auth # Specs written 02 Jun (d2f959d); F6.1–F6.6 shipped by 05 Jun; # F6.7–F6.9 specs reconciled forward as each rung shipped.
A backlog has an order and a history: rungs group into milestones that depend only downward and stay runnable; and the spec is the single source of truth, edited by feedback over time — never the working code.
The nine rungs group into M1 ship the catalog → M2 make it live → M3 ship to users; the git trail
shows them specced 02 Jun, F6.1–F6.6 shipped by 05 Jun, F6.7–F6.9 reconciled forward — the
F6.5 route reconcile (5a440fd) the clearest spec-edit.
A backlog says what rests on what, and the git trail shows the spec moving under feedback while the engine below the facade holds still.
Recap — the chapter, on the real F6 ladder
The workshop ran the whole chapter on one real target — the Portal’s web surface, the F6 Phoenix chapter. Dive 1 read the one-line vision into its nine-rung value ladder of real stories; dive 2 showed one rung (F6.6) as its four artifacts and proved it by its Given/When/Then; this dive supplied the two things that make a list a backlog — an order and a history. The order: nine rungs grouped into three dependency-ordered milestones — M1 ship the catalog (F6.1–F6.5), M2 make it live (F6.6–F6.7), M3 ship to users (F6.8–F6.9) — runnable at each, the shipped/specified frontier after F6.6. The history: the git trail of specs written 02 Jun, six rungs shipped by 05 Jun, and the rest reconciled forward — the spec the moving source of truth, edited by feedback. Six rungs are shipped; three are specified. That ordered, version-controlled backlog is the input to Part III.
Next: Part III · The roadmap layer — turn an ordered backlog like F6’s into a delivery plan: the milestone arc, the iteration tables, and the seams chosen to defer. Return to the A2.07 workshop hub to review the three dives.
References
Primary sources for ordering a backlog into milestones and treating the spec as the living plan, plus the real F6 chapter this dive reads from and the chapter moves it completes.
Sources
- Humble & Farley — Continuous Delivery — keeping the system releasable at every milestone; shipping the first deployable product first.
- Cohn, M. — User Stories Applied — ordering a backlog into dependency-aware milestones.
- Adzic, G. — Specification by Example — the spec as the living, shared source of truth that feedback edits.
Related in this course
- A2.07 · Workshop: decomposing Portal — the module hub, where the nine-rung F6 roadmap is walked.
- A2.07.2 · Split and test — the previous dive, which dissected F6.6 into its four artifacts.
- A2.07.1 · Vision to stories — where the nine-rung ladder was read from the vision.
- A1.03.3 · Adapt — feedback edits the spec, not the code: the cadence this dive replays in git.
- A2.01 · Value, not tasks — value as the ordering key.
- A2 · Decomposition — the chapter this workshop closes.
- Companion · F6 Phoenix chapter — where the nine rungs and three milestones are specified, built, and proven.
- /elixir/phoenix/deployment — F6.8, the M3 frontier: auth and the deployed clustered release.