jonnifyagile agents
jonnify / Agile Agent Workflow / A3 · Roadmap / A3.2 / A3.2.2 · Incremental design

A3.2 · Small batches · dive 2

Incremental design

The second Extreme Programming practice: the design grows one rung at a time. Each rung adds only the structure its slice needs — never the whole system up front.

Advance the rung on the right and watch the web design grow piece by piece while the engine below the facade never changes, and the open decisions are settled only as a rung forces each one. The design is grown, not drawn.

The design grows behind a facade · advance the rung

1
web design — grows one rung at a time the Portal facade — calls below it never change the F5 engine unchanged across all of F6 open decisions: PubSub · Presence · auth · deploy · dashboard
At F6.1: 1 web piece added (the endpoint) · 1 engine below the facade, unchanged · 5 decisions still open. · The design holds only what the rung so far has needed; the rest is deferred.

The design grows rung by rung above a fixed facade — the engine below it never changes, and each later decision waits for the rung that forces it.

What incremental design is

Incremental design grows the structure of a system one rung at a time. Each rung adds only what its slice needs and nothing it does not; a structural choice is left open until a slice forces it, recorded as an open decision until then. The opposite is up-front design: drawing the whole architecture before any slice exercises it — the big-bang the course argues against, because it bets correctness on a plan no rung has yet tested.

Two things make incremental design safe rather than chaotic. A stable seam — a facade the increments hang off — means adding structure above the seam never changes what is below it. And a deferred decision is recorded, not forgotten: the roadmap lists what is still open so the team knows which choices a later rung will force. The design is grown against real slices, behind a boundary that keeps the growth local.

incremental design
The design is grown rung by rung; each rung adds only the structure its slice needs.
stable seam
A fixed boundary (a facade) the increments hang off, so adding structure never changes what is below it.
deferred decision
A structural choice held open until a rung forces it, recorded as an open decision until then.
up-front design
Drawing the whole architecture before any slice exercises it — the bet incremental design declines.

The cost of incremental design is revisiting structure as slices arrive; the next section weighs that against the cost up-front design pays for decisions no slice has tested.

Up front versus incremental

The two strategies differ in when decisions are made. Designing all up front commits to every structural choice before the first slice ships — and some of those choices are made for slices that change, or never arrive, so a later rung would revise them. Growing incrementally commits only to the choices the first slice needs, and defers the rest until a slice forces each one. Switch the mode below to count the decisions made before the first slice ships, and how many of them a later rung would have changed.

Decisions made before the first slice · pick a mode

made before first ship 6 / 6 a later rung revises 5 up-front design pays for decisions a later slice would change; incremental design does not
Design all up front: 6 of 6 decisions made before the first slice ships, and 5 of them a later rung would revise. · Most up-front decisions are paid for before any slice has tested them.

Up-front design pays for decisions no slice has tested; incremental design defers them to the rung that forces each one.

Incremental design on the Portal

F6 grows the Portal’s web design one rung at a time, behind one master invariant: “the web layer calls only the Portal facade and renders only %Portal.Error{}.” F6.1 adds only PortalWeb.Endpoint to the F5 supervision tree — the smallest structure that serves a page. The roadmap is explicit that later runtime pieces are deferred: “later rungs add Phoenix.PubSub and Phoenix.Presence only as the real-time features require them” (at F6.7). Authentication, the deploy target, and the dashboard are listed as open decisions, settled at F6.8–F6.9 when their slices force them.

The facade is the stable seam that makes this safe. Every rung adds web surface above it without reaching below, so the F5 engine, its event log, and its supervision tree never change underneath. The design grows; the foundation holds still.

# The master invariant — the seam the web design grows above:
#   the web layer calls only the Portal facade and renders only %Portal.Error{}

# Incremental: each rung adds only the structure its slice needs.
#   F6.1  + PortalWeb.Endpoint      (serve a page)
#   F6.7  + Phoenix.PubSub/Presence (only when real-time requires them)
#   F6.8  auth + deploy target      (open decisions, settled when forced)

id = Portal.ID.generate(:user)   # the slice calls the unchanged facade — nothing below it moves

The principle

Incremental design: add only the structure the current slice needs, behind a stable seam, and defer every other decision to the slice that forces it.

On the Portal

Each F6 rung adds web surface above the unchanged Portal facade; PubSub, auth, and the dashboard are deferred to the rung that needs them, recorded as open decisions until then.

The design is grown, not drawn — one rung's worth at a time, behind a seam that keeps the engine below it untouched.

Recap — grown, not drawn

Incremental design grows the structure of a system one rung at a time, adding only what the current slice needs and deferring the rest until a slice forces it. A stable seam — the facade — keeps each increment local, so the engine below never changes. On the Portal, F6 adds web surface rung by rung above the unchanged facade, with PubSub, auth, and the dashboard deferred to F6.7–F6.9. The next dive closes the module: feedback after every rung, the practice that makes small releases and incremental design pay.

Next in A3.2: A3.2.3 · Continuous feedback — a review after every rung, with feedback editing the spec rather than the shipped page.

References

Primary sources for incremental design and deferred decisions, and where this dive connects in the course and to the real F6 chapter.

Sources

Related in this course