DS-03 · Product Delivery Systems
Delivery system design
A delivery system coordinates decisions, work, integration, and learning across explicit ownership and interfaces.
This lesson builds on TJ-04 Repository and delivery-system literacy, DS-01 From evidence to commitment, DS-02 Sequence, slice, and dependencies.
the question answered by whoever was blocked
Mid-build, an engineer opens a ticket to write the summary pipeline and finds that meeting type is not captured anywhere in the event data. The feature's behaviour was supposed to differ by meeting type. Now it cannot, unless someone decides something.
Watch what happens next. The engineer posts in a channel. Two people reply with opinions. The PM is in a different thread. By the afternoon the conversation has scrolled away, and the engineer — who is blocked and reasonable — picks the interpretation that lets the work continue. It ships. Nobody lied and nobody was careless. Four weeks later, the reason the feature does not behave as the enterprise customers expected is a choice made in a channel by the only person who was blocked by it.
The board never showed this, because a board tracks work items. An open decision is not a work item. It has no column, no owner, and no date. It only becomes visible when it has already been answered by default.
Follow the question rather than the ticket, and the mechanism is plain. Every step is someone behaving well:
flowchart LR G["Meeting type is not<br/>captured in event data"] --> B["Engineer is blocked<br/>and reasonable"] B -->|"no decision interface exists"| CH["Posted in a channel"] CH -->|"two opinions,<br/>then it scrolls away"| PICK["Engineer picks the reading<br/>that unblocks the work"] PICK --> SHIP["It ships"] SHIP --> W["Four weeks later:<br/>behaviour customers did not expect"] B -.->|"a board tracks work items,<br/>not open questions"| INV["Invisible until<br/>it is already answered"]
This failure is hard to see because every delivery metric looks healthy while it happens. Cycle time is stable. Pull requests are reviewed. The team is disciplined and fast. A delivery system that is optimized for moving work will move work, including work built on a silently answered question. Noted's team is exactly this kind of team: strong delivery discipline, thin evidence system. Speed is not the problem. The absence of a channel for decisions and learning is.
Ask your team: what open question is currently blocking someone, and who is going to answer it, by when? If the answer is a channel name, you have found the gap.
four flows, and the two left implicit
A delivery system carries four flows. Each needs an owner, an interface, and a visible state. Most teams build two of them well and leave two implicit.
| Flow | What it carries | The owner question | Symptom when it is missing |
|---|---|---|---|
| Decision flow | Open questions that change what gets built | Who decides, by when, and against what evidence standard? | Assumptions get answered by whoever is blocked, and then shipped |
| Work flow | Tasks, states, capacity, order | Who is doing it, and what counts as done? | Work stalls invisibly, or two people build the same thing |
| Integration flow | Merging, environments, the release path, rollback | Who owns the health of the main line, and what gates it? | Everything meets in one large merge at the end |
| Learning flow | What the built thing taught you | Who reads the result, and what changes because of it? | Things ship and are never evaluated |
Teams almost always have a work flow and an integration flow, because those break loudly. Decision flow and learning flow break quietly, so they are frequently absent in teams that consider themselves high-performing.
Drawn as a loop, Noted's system shows its shape immediately. Solid edges are the handoffs that have an owner and a contract; dotted edges are the ones that run on goodwill:
flowchart LR DEC["Decision flow<br/>owner: unnamed"] WRK["Work flow<br/>owner: clear in practice"] INT["Integration flow<br/>owner: engineering lead"] LRN["Learning flow<br/>owner: unnamed"] DEC -.->|"no interface — answered<br/>by whoever is blocked"| WRK WRK ==>|"states, review, definition of done"| INT INT -.->|"nothing runs anywhere real<br/>until the end"| LRN LRN -.->|"a readout nobody<br/>is obliged to act on"| DEC
Two of the four edges carry no contract, and both of those edges are where a question turns into a silent commitment. This is not a slow team with a process problem. It is a fast team with two flows and a loop that does not close.
Interfaces, not ceremonies
The unit of delivery-system design is not a meeting. It is an interface: the contract at a boundary between two owners. A usable interface states four things.
| Element | The question it answers |
|---|---|
| Input | What the requester must provide for this to be actionable |
| Output | What comes back, in what form |
| Latency | How long a request waits before the requester can assume nothing is coming |
| Failure behaviour | What happens automatically when the latency is exceeded |
An interface without a latency is a queue with no bottom. An interface without a failure behaviour is a promise that quietly converts into a blocked engineer making a product decision.
Ceremonies are one way to implement an interface. They are not the interface. A team that adds a weekly meeting has not created a decision flow; it has created a place where decisions may or may not happen, with no latency guarantee and no default.
Where the flows connect
The four flows are not independent. The connections are where systems fail.
- The decision flow feeds the work flow. An open decision that reaches a developer before it is answered becomes a silent commitment.
- The integration flow feeds the learning flow. If nothing runs anywhere real until the end, there is nothing to learn from until the end.
- The learning flow feeds back into the decision flow, and then to DS-01. A learning flow that produces a readout nobody is obliged to act on is a report, not a flow.
Boundary
This model has a size floor and a real cost.
A three-person team does not need four named flows with four named owners. The flows still exist, but they collapse into one or two people, and formalizing them adds coordination overhead that slows the loop the system was meant to protect. The test is never how many roles or ceremonies you have. It is whether an open decision has a named owner and a date. A three-person team can satisfy that with one shared list.
The second limit is more important. A delivery system cannot repair an unsound commitment. If DS-01 was wrong, an excellent delivery system builds the wrong thing efficiently, learns about it faster, and produces a very clear account of a wasted quarter. Do not use system design to answer a question that belongs to the commitment.
The third limit: designing the learning flow does not create the evidence capability it depends on. If nobody can define a measure, or the instrumentation does not exist, a named learning owner will produce a meeting rather than an answer. Name that as a capability gap, not as an ownership gap.
Practice on the Noted decision case
Read the Noted case if you have not already.
Take Signal 2: the enterprise meeting-summaries work, now committed in your DS-01 brief and sequenced in DS-02.
The relevant facts about the team: the founder authored much of the research layer. The engineering lead owns repository workflow and technical standards, and some planning assumptions have not been checked against the code. The support lead is closest to what customers actually said. The team collaboration environment is in design, not live. Meeting type is not captured in event data. Actor identity is missing for about 18% of events.
Your task. Map the delivery system for this build.
- For each of the four flows, name the owner, the interface, and where its state is visible. If a flow has no owner, write that plainly rather than assigning yourself to all four.
- Place the "meeting type is not captured" question into the decision flow. Give it an owner, a decision date, an evidence standard, and a default that fires if the date passes. Do not resolve it here; place it.
- Write the interface between your build and the team collaboration environment that is still in design. Input, output, latency, failure behaviour. Decide whether it is a capability dependency you can stub, and record the contract.
- Write the interface between engineering and the support lead. Support holds the closest record of what customers said, and that record is currently an input nobody has scheduled.
- Design the learning flow, which currently does not exist. Name who reads what, on what date, and what specific thing could change because of it.
- Name one capability gap that ownership alone will not fix, and say who could close it.
Step 2 is the whole lesson in one entry. Two ways of placing the same open question into a decision flow:
Weak — "Open question: how should summaries handle meeting type? Owner: PM. Status: to be discussed."
An owner and nothing else. There is no date, so it can never be late, and no default, so when it is late the engineer answers it anyway. This entry will be closed retroactively by a merged pull request.
Strong — "Meeting type is not captured in event data. Decision: does stage-one behaviour differ by meeting type? Owner: you. Date: before the first slice that touches summary generation. Evidence standard: what the support lead recorded customers saying, not inference from event data. Default if the date passes: one behaviour for all meetings, recorded as a known limitation."
The default is what makes this a decision flow. It converts a silent answer into a stated one.
Notice which column is longer. A decision-flow entry that fits on one line is usually an owner with no interface behind them.
Expect to be pushed on: whether your decision flow has a date and a default or only an owner; whether your learning flow names a person, a date, and a consequence, or just says the team will review results; and whether you have designed four ceremonies where a team of this size needs two interfaces.
Committed to a position? Check it against what a strong answer holds
- An owner, an interface, and a visible state for each of the four flows — with "no owner today" written where that is true, instead of your name in every row.
- The meeting-type question placed with an owner, a date, an evidence standard, and a default that fires if the date passes.
- An interface to the in-design collaboration environment with input, output, latency, and failure behaviour, and a decision on whether it can be stubbed.
- The support lead's record scheduled as a dated input to the build, not mentioned as a resource.
- One capability gap that ownership cannot close, and a refusal to claim the learning flow exists because a review meeting exists.
- The most common weak move is a decision-flow entry made of an owner and a status — "PM, to be discussed". It is weak because it can never be late, so the blocked engineer answers it and the entry is closed by a merged change.
Transfer the move to your product
Take your team's current delivery system as it actually operates, not as it is documented.
- Which of the four flows has no named owner today, and what has that cost in the last quarter?
- Name one open decision currently sitting in a chat channel. Who is going to answer it, by when, and what happens if they do not?
- Pick one interface between your team and another. What is its latency, and what happens automatically when the latency is exceeded?
- When something your team shipped is evaluated, who is obliged to read the result, and what have they changed because of one?
- Which of your gaps is an ownership gap and which is a capability gap? Say which is which, because the fix is different.
Write <unknown> where you do not know. In this lesson the unknowns are the
finding. A flow whose owner you cannot name is a flow that does not exist,
whatever the process document says.
Keep one reusable artifact
Delivery system map
Write it for the next person who must make or review the decision. Include the choice, evidence, uncertainty, alternatives, owner, and revision trigger. Link it into your cumulative Product Decision Case.
Produce artifacts/DS-03-delivery-system-map.md using the template below.
Write it for someone joining the team in week three, and for the engineering lead, who will notice immediately if you have described a system the code does not support. It should let a new person find out who answers an open question and by when, without asking anyone.
In your Product Decision Case, this artifact is where your decisions stop being yours alone. DS-01 and DS-02 were positions you held. This one describes obligations other people carry. DS-04 will test whether those obligations survive review and disagreement.
artifacts/DS-03-delivery-system-map.md# Delivery system map · <team or build name> - **Date:** <YYYY-MM-DD> - **Commitment this serves:** <link or name of the DS-01 brief> - **Team size:** <number, and whether flows are deliberately collapsed> - **Map owner:** <person> ## The four flows | Flow | Owner | Interface (where a request enters) | Where its state is visible | Honest status | |---|---|---|---|---| | Decision | <person or `<unowned>`> | <interface> | <artifact, board, list> | <working / thin / absent> | | Work | <person> | <interface> | <where> | <status> | | Integration | <person> | <interface> | <where> | <status> | | Learning | <person or `<unowned>`> | <interface> | <where> | <status> | <If the team is small enough that flows are deliberately collapsed into one or two people, say so here. A collapsed flow that is named is a design. A collapsed flow that is unnamed is a gap.> ## Open decisions | Open question | Owner | Decision date | Evidence standard | Default if the date passes | Who is blocked | |---|---|---|---|---|---| | <question> | <person> | <YYYY-MM-DD> | <what would be enough to answer it> | <what happens automatically> | <person> | <Every open question that could change what gets built belongs here, including the ones currently living in a chat channel. A question with no default will be answered by whoever is blocked by it.> ## Interfaces | Boundary | Input required | Output returned | Latency | Failure behaviour | |---|---|---|---|---| | <from → to> | <what the requester must provide> | <what comes back, in what form> | <how long before nothing is coming> | <what happens automatically at that point> | <An interface without a latency is a queue with no bottom. An interface without a failure behaviour is a promise that converts silently into someone else making your decision.> ## Dependencies on work that is not live | Capability | Status (in design / planned / external) | Contract you are building against | Stubbed? | What breaks if the contract changes | |---|---|---|---|---| | <capability> | <status> | <the interface you assumed> | <yes / no> | <consequence> | ## Learning flow design - **What will be evaluated:** <the specific claim from the DS-01 brief> - **Who reads the result:** <named person, not a team> - **Date of the readout:** <YYYY-MM-DD> - **What could change because of it:** <scope, sequence, the commitment itself> - **What this evaluation cannot establish:** <the honest limit, given the instrumentation you actually have> ## Capability gaps | Gap | Why ownership alone will not fix it | Who could close it | Cost of leaving it open | |---|---|---|---| | <gap> | <reason> | <person or team> | <consequence> | ## What this map does not cover <Boundaries you did not draw, teams whose work touches yours but was out of scope, flows you decided not to formalize and why.> ## Gaps <Everything marked `<unknown>` or `<unowned>` above, listed as open questions with who could close them and by when.>
Before you call it done
Six things a reviewer must be able to find. If one is missing, the artifact is not finished — it is a draft with a hole in it.
Before saving, check all six exposures are present. Name any that are missing rather than filling them in yourself:
| Exposure | Present when |
|---|---|
| Choice | Each flow is either owned or explicitly named as unowned, and collapsed flows are declared as a design |
| Evidence | The learning flow names what will be evaluated and what the available instrumentation cannot establish |
| Uncertainty | Dependencies on work that is not live are separated from live capabilities, with the assumed contract written down |
| Alternatives | Every open decision has a default that fires if the date passes |
| Owner | Interfaces name both sides, and no single person silently owns three flows |
| Revision trigger | Interfaces carry a latency and an automatic failure behaviour, not only an owner |
Can the reasoning survive these tests?
Answer before you open the explanation. The tutor asks these one at a time and does not show the options’ verdicts until you commit.
01A team has stable cycle time, reviewed pull requests, and a clean board. Mid-build, a blocked engineer picks an interpretation of an unanswered product question and ships it. What does this reveal?
- AA work-flow problem; the ticket should have been better specified
- BAn engineering discipline problem; the engineer should have waited
- CA missing decision flow; open questions have no owner, date, or visible state, so they are answered by whoever is blocked
- DA prioritization problem; the question should have been resolved before the quarter started
Reveal the answer
C. Boards track work items, and an open decision is not a work item, so it becomes visible only after it has been answered by default. Option A is the answer a competent PM gives, and it is the wrong layer: better tickets reduce the number of open questions but do not create a path for the ones that remain. Option B blames a person for a system with no channel.
02A team adds a weekly decision review meeting. Which condition determines whether this creates a decision flow?
- AWhether the right people attend consistently
- BWhether each open question has a latency and a default that fires when the latency is exceeded
- CWhether decisions are recorded in writing after the meeting
- DWhether the meeting is held before the sprint planning session
Reveal the answer
B. A ceremony is one way to implement an interface; it is not the interface. Without a latency and an automatic default, a weekly meeting is a place where decisions may or may not happen. Option C is the tempting one because written records are genuinely valuable, and a team that records decisions well can still leave a blocked engineer waiting with no bound and no fallback.
03A PM maps a delivery system and names herself as owner of the decision flow, the work flow, and the learning flow. What is the strongest objection?
- AProduct should not own the learning flow; data should
- BThree owners is too few; each flow needs a dedicated person
- CThe integration flow is missing from her map
- DNaming one person for three flows is the same as leaving them unowned when that person is the bottleneck for all three
Reveal the answer
D. The purpose of naming an owner is to give a request a bounded path. If every path leads to the same person, the latency of all three is that person's availability, and nothing has been designed. Option B is the trap for a reader who has learned the four-flow model as a staffing rule: a small team legitimately collapses flows, but it must then say so and accept a shared list, not pretend there are three owners.
04A team designs a learning flow with a named owner and a monthly readout. Nobody on the team can define the measure, and the instrumentation does not exist. What has been created?
- AA working learning flow; the measure can be defined at the first readout
- BA meeting, because the gap is a capability gap and ownership does not close it
- CAn interface, because it has an owner and a latency
- DA decision flow, because the readout will generate decisions
Reveal the answer
B. A named owner produces an answer only if someone can produce the answer. Where the measure and the instrumentation are absent, the readout becomes a discussion. Option A is the optimistic version most teams actually take, and it postpones the capability problem to the moment when a decision depends on it.
05Noted's team has strong delivery discipline and a thin evidence system. Which pair of flows is most likely to be weak, and why?
- ADecision flow and learning flow, because they fail quietly while delivery metrics stay healthy
- BWork flow and integration flow, because discipline creates rigidity
- CIntegration flow and learning flow, because both depend on tooling
- DDecision flow and work flow, because both depend on the PM
Reveal the answer
A. Work and integration flows break loudly, so disciplined teams fix them. Decision and learning flows break silently, and their absence is compatible with excellent cycle time. Option C is plausible on the surface because both do involve tooling, but a team with strong delivery discipline almost always has a working integration flow; that is the flow discipline is usually measured by.