jonnifyagile agents
jonnify / Agile Agent Workflow / A2 · Decomposition / A2.06 / A2.06.3 · Always runnable

A2.06 · The value ladder · dive 3

Always runnable

A ladder is composed of capabilities, in dependency order. This is what the order buys: every rung leaves the system runnable and demoable.

Build the first rung and it runs; build the first two and they run. Every prefix of the ladder is a working, demonstrable system. It follows directly from dependency order — for any prefix, every dependency of every included rung is also included. This is the structure the roadmap layer later plans delivery over. Step the slider on the right to build the prefix rung by rung.

Build the prefix · every prefix runs

2
rung 4 track progress demo: progress over opened lessons rung 3 open a lesson demo: enrol, then open a lesson rung 2 enrol in a course demo: browse, then enrol rung 1 browse the catalogue demo: browse the catalogue the built prefix r₁ … rₖ runs · the system is demoable after every rung
k = 2 · built: browse the catalogue, enrol in a course. The prefix runs — a learner can browse the catalogue and enrol in a course. Demoable.

Every prefix is a working system

A ladder is always runnable when, for every k, the prefix r₁ … rₖ is a runnable, demoable system. This is not an extra property to arrange — it falls out of dependency order. If every rung depends only on rungs below it, then for any prefix, every dependency of every included rung is also included; nothing points outside the prefix. Build the bottom rungs and the result runs.

“Runnable” here is the demoability the A2.01 vertical slice gave each rung, extended to the whole prefix: after rung k there is something a role can exercise end to end. That is the payoff of building bottom-up — the loop has a working system to demo and accept after every single rung, never a half-built one that only runs once the last piece lands.

always runnable
For every k, the prefix r₁ … rₖ is a runnable, demoable system.
prefix
The first k rungs of the ladder, bottom-up — a partial but complete-in-itself build.
follows from order
Dependency order guarantees it: for any prefix, every dependency of an included rung is also included.
orphan
A built rung whose dependency is not built. It points at something missing, so the build cannot run through it.

This is the property the chapter set out to build — capabilities (dive 1), in dependency order (dive 2), runnable at every rung. The roadmap layer (A3) plans delivery over exactly this ladder.

Skip a rung and a rung is orphaned

The contrapositive is the failure. If a rung is built but a rung it depends on is not, that rung is orphaned — it points at something not built, so the build cannot run through it. Remove or skip a rung and every rung above it that depended on it is orphaned at once. Runnability is not the order of the rungs in a list; it is whether the set you have built is closed under dependency.

Toggle each rung built or skipped below. The checker reports whether the built set runs, and on a skip it names the first orphaned rung — a built rung whose dependency is missing — and paints it burgundy. The hero confirmed a clean prefix runs; this checker shows what breaks runnability when a rung is dropped out of order. Reading a clean prefix and finding the orphan in a broken set are two different moves.

Toggle each rung · find the orphan

rung 4 track progress built rung 3 open a lesson built rung 2 enrol in a course built rung 1 browse the catalogue built a built rung whose dependency is skipped is orphaned · the build cannot run through it
Built: browse, enrol, open a lesson, track progress. The set runs — every built rung’s dependency is also built. A closed, runnable build.

Runnability is whether the built set is closed under dependency: skip a rung and the rungs above it are orphaned, and the build cannot run through them.

The Portal ladder runs at every prefix

On the Portal — the learning platform this course builds — the ladder runs at every prefix. After browse, a learner can browse the catalogue. After browse and enrol, browse then enrol. After browse, enrol, and open a lesson, enrol and open a lesson. The full four track progress over opened lessons. Each prefix is a working system the loop can demo and accept.

Skip enrol but keep open a lesson, and open a lesson is orphaned: it depends on enrolment that was never built, so that set cannot run. Runnability is a predicate over the built set — every built rung's dependency must also be built.

# The Portal dependency graph — the chain from dive 2.
deps = %{browse: [], enrol: [:browse], open: [:enrol], track: [:open]}

runnable? = fn built ->
  Enum.all?(built, fn rung ->
    Enum.all?(deps[rung], &(&1 in built))   # every dependency is also built
  end)
end

runnable?.(MapSet.new([:browse, :enrol]))          # => true  — a clean prefix
runnable?.(MapSet.new([:browse, :open]))           # => false — open is orphaned (enrol missing)

A clean prefix always passes; a built set that skips a rung leaves an orphan and fails. That is why the ladder is built bottom-up — the order guarantees the prefix.

The principle

Every prefix of a dependency-ordered ladder is a runnable, demoable system; skip a rung and the rungs above it are orphaned.

On the Portal

browse, then enrol, then open a lesson, then track progress — demoable after each; skip enrol and “open a lesson” is orphaned and the prefix cannot run.

Every rung leaves the system runnable and demoable — the ladder built bottom-up is a working system at every prefix, and that is the structure delivery is planned over.

Recap — the structure the rest plans over

A value ladder is the structure this chapter set out to build: capabilities, in dependency order, runnable at every rung. Every prefix is a working, demonstrable system, because dependency order keeps each prefix closed under dependency — and skipping a rung out of order orphans the rungs above it. The roadmap layer plans delivery over exactly this ladder — which rung ships in which iteration — and the spec layer defines each rung before the Author builds it. Those layers are named here, taught later.

A2.06 composes the ladder. The chapter's remaining modules write each rung's acceptance criteria and split a rung that is too big, and the closing workshop (A2.07) composes the whole Portal ladder. Return to the A2.06 module hub to continue.

References

Primary sources for keeping a system releasable at every increment, and where this connects in the course.

Sources

Related in this course