Supplement · 2 · Architecture economics
The Arithmetic Under the Argument
Most architecture disputes are economic disputes conducted in technical vocabulary. This supplement gives you the four numbers — cost of delay, total cost of ownership, coordination cost, and capacity — that turn “I think” into a table someone can disagree with precisely.
Mission tie-in: lesson 0027 introduced the cost ledger and the break-even year. This page extends it into sequencing, ownership over time, and the capacity assumptions that make a forecast either credible or decorative.
Why this is here
Two situations bring a lead to this page. The first: you are asked to justify a design to someone whose currency is money and time, and the honest answer — “this option is more maintainable” — is unarguable in the worst sense. Nobody can check it, so it loses to whichever option has a number attached, even a bad number.
The second: your backlog is ordered by opinion. The returns pilot has six candidate slices, everyone agrees all six are valuable, and the sequence was set by whoever argued hardest in the planning meeting. Sequencing is the highest-leverage economic decision an initiative lead makes, and it is routinely made without arithmetic.
The point of this page is not financial modelling. It is that a rough number, written down with its assumptions visible, beats a confident adjective — and that the act of writing it usually changes your own mind before it changes anyone else’s.
Knowledge: cost of delay is the missing unit
Cost of delay is what it costs you, per unit of time, that a capability is not yet in production. It is not the cost of building the thing. It is the value that does not arrive while you are building something else. Every backlog is already priced with it — the price is simply implicit and therefore unexaminable.
Start with the returns pilot’s value model. Every number below is an assumption, and each one is labelled as such, because a cost-of-delay model whose assumptions are hidden is worse than no model at all:
Value model · returns pilot (illustrative; every line is an assumption to be tested)
- Volume: 12,000 eligible domestic returns per month.
- Support contacts: 41% of returns generate a support contact → 4,920 contacts/month. Fully loaded cost per contact €6.20 → €30,504/month.
- Target: a 25% reduction in contact rate → 1,230 fewer contacts/month → €7,626/month avoided.
- Goodwill credits: 2% of returns escalate to a goodwill credit averaging €14 → 240 × €14 = €3,360/month. Halving the median resolution time from 72h to under 4h is assumed to halve this → €1,680/month.
- Steady-state benefit: €7,626 + €1,680 = €9,306/month ≈ €2,150 per week.
That last figure is the initiative’s aggregate cost of delay: roughly €2,150 for every week the pilot is not live. It is also the number that makes the next table possible, because you can now apportion it across the slices that produce it.
CD3: cost of delay divided by duration
Knowing each item’s cost of delay is not yet a sequence. A high-value item that takes six weeks may be worth doing after two cheap items that between them unlock nearly as much value in three. The standard rule — and it is provably optimal for a single team working one item at a time — is CD3: divide each item’s cost of delay by its duration and work in descending order. It is the same shape as shortest-weighted-processing-time scheduling; Reinertsen calls it weighted shortest job first.
| # | Slice | Cost of delay (€/week) | Duration (weeks) | CD3 |
|---|---|---|---|---|
| A | Self-serve eligibility decision and status page | 1,600 | 4 | 400 |
| B | Automated carrier label creation | 900 | 3 | 300 |
| C | Guest-order returns (29% of demand, outside pilot) | 1,200 | 6 | 200 |
| E | Fraud guardrail rules, second iteration | 450 | 3 | 150 |
| D | Exchange automation | 600 | 5 | 120 |
| F | Admin reporting refresh | 120 | 2 | 60 |
Two cautions on that cost-of-delay column. These are per-item estimates on their own bases, and they deliberately do not sum to the €2,150 aggregate: A and B between them deliver most of the core registered-customer benefit, C extends that benefit to 29% more demand, E is risk avoidance rather than revenue, and F is internal efficiency. Second — and this is what makes rough numbers usable — CD3 is a ratio, so a uniform error in the value model leaves the sequence unchanged. You have to be wrong about the items relative to each other before you get the order wrong.
Now prove that the ordering matters, rather than asserting it. Total delay cost of a sequence is the sum, over every item, of that item’s cost of delay multiplied by the week it finishes. Three plausible orderings of the same six items, same durations, same team:
The same backlog, three sequences, 23 weeks either way
| Sequence | Order | Finish weeks | Total delay cost |
|---|---|---|---|
| By CD3 | A B C E D F | 4, 7, 13, 16, 21, 23 | €50,860 |
| By cost of delay alone | A C B D E F | 4, 10, 13, 18, 21, 23 | €53,110 |
| By shortest duration | F B E A D C | 2, 5, 8, 12, 17, 23 | €65,340 |
Working the CD3 sequence: 1,600×4 + 900×7 + 1,200×13 + 450×16 + 600×21 + 120×23 = 6,400 + 6,300 + 15,600 + 7,200 + 12,600 + 2,760 = €50,860.
By cost of delay alone: 1,600×4 + 1,200×10 + 900×13 + 600×18 + 450×21 + 120×23 = 6,400 + 12,000 + 11,700 + 10,800 + 9,450 + 2,760 = €53,110.
By shortest duration: 120×2 + 900×5 + 450×8 + 1,600×12 + 600×17 + 1,200×23 = 240 + 4,500 + 3,600 + 19,200 + 10,200 + 27,600 = €65,340.
Three readings. First, sequencing by value alone — the instinct everyone has — costs €2,250 more than CD3 over the same 23 weeks, for zero extra work. Second, “quick wins first,” the most popular heuristic in planning meetings, costs €14,480 more, because it defers the highest-value item behind three cheap ones. Third, and most usefully: every one of these sequences finishes in week 23. The delivery date is identical. All that changed was the order, and the order was worth €14,480.
Delay cost accumulates from the moment an item could have been delivered until it is. So each item you place first imposes its duration as a delay on everything behind it. Putting a 6-week item first charges its six weeks to five other items’ cost of delay; putting a 4-week item first charges only four. CD3 falls straight out of that: you want to divide the queue so the value released per week of queue occupancy is maximised at every step. The reason “highest value first” loses is that it ignores the tax an item levies on its successors, and the reason “quick wins first” loses badly is that it ignores value entirely and optimises the one quantity nobody is paid for — the count of finished items.
Total cost of ownership: three years of the carrier integration
Build-versus-buy arguments collapse when only the first year is priced — build looks expensive once, buy looks cheap forever. The correction is a cumulative ledger with the recurring lines actually in it. The decision: two direct carrier integrations built in-house, or a multi-carrier aggregator behind the port the returns service already defines. Loaded engineering rate €90/hour, consistent with lesson 0027.
Three-year total cost of ownership · carrier integration (illustrative)
Build — two direct carrier integrations:
- Initial development: 320 h × €90 = €28,800 (once)
- Engineering maintenance: 120 h/yr × €90 = €10,800/yr (carrier API changes, new label formats, rate tables)
- Operational load: 40 h/yr × €90 = €3,600/yr (on-call, incident handling, vendor outage triage)
- Run cost: €150/month for the label worker and its queue = €1,800/yr
- Third carrier added in year 2: 100 h × €90 = €9,000 (once, year 2)
Buy — a multi-carrier aggregator behind your own port:
- Adapter and cutover: 80 h × €90 = €7,200 (once)
- Subscription: €650/month = €7,800/yr
- Per-label fee: €0.09 × 12,000 labels/month = €1,080/month = €12,960/yr
- Upgrade tax: 24 h/yr × €90 = €2,160/yr
- Vendor management: 12 h/yr × €90 = €1,080/yr
Recurring: build €10,800 + €3,600 + €1,800 = €16,200/yr. Buy €7,800 + €12,960 + €2,160 + €1,080 = €24,000/yr.
| Cumulative | Year 1 | Year 2 | Year 3 | Year 4 |
|---|---|---|---|---|
| Build | €45,000 | €70,200 | €86,400 | €102,600 |
| Buy | €31,200 | €55,200 | €79,200 | €103,200 |
Build year 1 = 28,800 + 16,200 = €45,000. Year 2 adds 16,200 + 9,000 (third carrier) = €70,200. Years 3 and 4 add 16,200 each. Buy year 1 = 7,200 + 24,000 = €31,200, then 24,000 a year.
Where the crossover actually is. At the end of year 3 buy is €7,200 cheaper. Through year 4, build accrues €1,350/month against buy’s €2,000/month, so the gap closes at €650/month: 7,200 ÷ 650 ≈ 11.1 months. Crossover lands in month 47 — almost four years out.
What that reframes: over any horizon this initiative can honestly forecast, buy wins, and it is not close in the pilot years. The argument for building is therefore not a cost argument at all — it is a differentiation or control argument, and it should be made in those words. Carrier label generation is not why customers choose the store; the eligibility policy might be. That is lesson 0027’s differentiator test, and the ledger has just told you it is the only argument left standing.
And notice the line the ledger cannot show you. Build’s €16,200/yr is not just money; it is 160 hours a year of this team’s capacity, permanently. That is four engineer-weeks — roughly a third of what slice A costs to build, handed back every year. Buying the integration does not merely cost less; it returns capacity to the item with the highest CD3 in the table.
Coordination cost, and why late staffing slows an initiative
Engineering capacity is usually planned as if people were interchangeable units that add linearly. They add sublinearly, and for a short while they subtract. Brooks’s observation is that adding people to a late project makes it later, and the mechanism is specific: communication paths grow as n(n−1)/2, and every new person consumes the capacity of an existing one before producing any of their own.
Adding three engineers in week 14 of a 23-week plan (illustrative)
- Communication paths: 5 engineers → 5×4/2 = 10 paths. 8 engineers → 8×7/2 = 28 paths. Nearly triple, for a 60% headcount increase.
- Mentoring drawn from existing engineers: 2 engineer-weeks each → 3 × 2 = −6 engineer-weeks.
- Ramp-up: new engineers produce at 40% for their first 4 weeks → each loses 0.6 × 4 = 2.4 → 3 × 2.4 = −7.2 engineer-weeks.
- Gross added in the first four weeks: 3 × 4 = +12 engineer-weeks.
- Net: 12 − 6 − 7.2 = −1.2 engineer-weeks. The first month is slightly negative, and that is before counting the review load and the merge conflicts.
Break-even arrives around week 5 or 6 after joining — which, from week 14 of a 23-week plan, means the new capacity begins paying back with roughly three weeks of the plan remaining. If the objective is the 30 September pilot, adding people in week 14 is not a schedule intervention; it is a decision to staff the next phase, and it should be argued as one.
The honest alternatives, in descending order of usefulness: trade scope (the CD3 table tells you exactly which slice costs least to drop — F, at €120/week), remove a blocker that is idling existing capacity, or move the date. All three are cheaper than the €1.2 engineer-weeks and the 18 extra communication paths.
Capacity assumptions and cost guardrails
The durations in the CD3 table are calendar weeks for one team at WIP 1. That is a claim about capacity, and it should be written down where it can be falsified: 5 engineers × a 0.6 focus factor (interrupts, review, support rotation, meetings) = 3.0 engineer-weeks of throughput per calendar week. The 23-week sequence therefore assumes about 69 engineer-weeks of delivered work. If the focus factor is really 0.45 — which one on-call week in five will do — throughput is 2.25 and the same backlog takes about 31 weeks. State the focus factor; it is the single number most forecasts hide.
Cost guardrails do for running cost what drivers do for latency: they make an economic quality attribute measurable and alertable, before the invoice arrives.
| Guardrail | Target | Alert at | Owner and response |
|---|---|---|---|
| Infrastructure cost per resolved return | ≤ €0.05 | €0.08 for 3 days | Returns lead — review label-worker retries and queue depth. |
| Carrier per-label fee | €0.09 | any month over €1,300 | Returns lead — volume above model; revisit the value model, not just the bill. |
| Manual review queue | ≤ 50/day | 40/day for 2 days | Support ops — the guardrail from the initiative frame; tighten eligibility or add capacity. |
| Team capacity spent on carrier maintenance | ≤ 8 h/month | 16 h in a month | Tech lead — triggers a revisit of the build-versus-buy ledger above. |
The fourth row is the one teams forget. A cost guardrail on your own capacity is what converts a build-versus-buy decision from a one-time argument into a standing one with a trigger — the same shape as a technical-debt repayment trigger in lesson 0038.
| What is said | The economic claim hiding inside | The number to put on it |
|---|---|---|
| “We should do the quick wins first.” | Duration matters and value does not. | CD3 for every item; compare total delay cost. |
| “Building it is cheaper than the licence.” | Only year one was priced. | Cumulative ledger to year 4; find the crossover month. |
| “We need two more engineers.” | Capacity is linear and immediate. | Ramp-up and mentoring cost; net engineer-weeks in month one. |
| “This refactor will pay for itself.” | An unquantified future saving. | Hours/month currently lost, and the payback horizon. |
| “The team is at capacity.” | An unstated focus factor. | Engineers × focus factor = engineer-weeks per week. |
| “We can’t cut scope.” | Every item is equally valuable. | The lowest-CD3 row, and what dropping it actually costs. |
- “Cost of delay requires a reliable revenue model, so we can’t use it.”
- The absolute figures barely matter; the ratios drive the sequence. A model built from three stated assumptions and rounded to the nearest thousand will reorder your backlog correctly far more often than intuition will, and it has the advantage that someone can point at the assumption they disagree with.
- “CD3 says always do the cheapest thing first.”
- It says the opposite of the popular version. In the table above, the shortest item (F, two weeks) goes last, because its value per week of queue occupancy is the lowest of the six. CD3 only prefers short items when their value is comparable.
- “Buy is cheaper because we avoid the salary cost.”
- Buying moves cost, it does not delete it: adapter, upgrade tax, vendor management and per-unit fees are all real lines, and the per-unit fee is the one that grows with your success. The reason to buy here was never that it is free; it is that the crossover is 47 months out and the capacity comes back to the team.
- “If we’re behind, adding people is at least neutral.”
- It is negative for the first month and adds 18 communication paths permanently. It can still be the right call — for the phase after this one. Argue it as an investment in the next quarter, never as a recovery for this one.
When this is the wrong move
- The decision is a constraint, not a choice. If regulation, a signed contract or a security finding forces the work, a CD3 score is theatre. Sequence the rest of the backlog around it and say plainly that this item is not competing.
- The item is a learning spike. The value of a two-day spike is the uncertainty it removes, which is not measurable in weekly euros. Price spikes as options: what would you pay to avoid committing six weeks to the wrong mechanism?
- The numbers would be invented rather than assumed. There is a difference between a stated assumption and a fabricated fact. If you cannot name where a figure came from, leave it blank and mark the model incomplete — a ledger with an honest hole beats one with a confident fiction, because the hole is where the next conversation goes.
- You are optimising a queue that is not the bottleneck. If slices sit for three weeks in review or waiting on another team, resequencing the input to that queue changes nothing. Fix the wait first (supplement 1), then sequence.
- Someone will treat the model as a commitment. A cost-of-delay figure presented without its assumptions becomes a promise you did not make. Attach the assumptions to the number every single time it is shown, and say which one you are testing next.
Skill: read the arithmetic
Two items: €1,200/week over six weeks, and €900/week over three. CD3 says:
The carrier ledger’s crossover falls in month 47. That means:
Three engineers join in week 14 of 23. In their first month they:
Practice: price your own backlog
- Build a value model for your initiative with at most five lines, each an explicit assumption with a source or a “guessed” label. Reduce it to one figure: euros (or your currency) per week of delay.
- Score six items with CD3. Apportion the weekly delay cost across them, estimate duration in calendar weeks at WIP 1, divide. Then compute total delay cost for your current sequence and for the CD3 sequence. The difference is the price of your planning meeting.
- Write one three-year ledger for a build-versus-buy question you are facing. Include, on the build side, the recurring maintenance and operational hours; on the buy side, adapter, subscription, per-unit fees, upgrade tax and vendor management. Find the crossover month explicitly.
- State your focus factor. Engineers × focus factor = engineer-weeks per calendar week. Compare it against the last eight weeks of actual delivered work. If the two disagree, your forecasts have been fiction and now you know by how much.
- Set two cost guardrails, one on running cost per unit of business outcome and one on your own team’s capacity. Give each a target, an alert threshold, an owner and a named response.
- Name the sensitive assumption. Vary each input by ±50% and see which one changes the decision. Test that one first. This is the same discipline as an assumption map, applied to money.
- What is your current sequence costing, relative to the CD3 sequence? Would you defend the difference out loud?
- Which recurring cost of a system you own has never been written down — and who would notice if it doubled?
- The last time someone asked for more people, what were the three cheaper alternatives, and were they offered?
- Which number in your last forecast was an assumption presented as a fact, and what would it have cost to say so?
Reveal: the one-line test for an economic argument
An economic argument is ready when a reasonable opponent can point at exactly one line and say “that number is wrong, and here is why.” If they cannot — if the only available response is general disagreement — you have written a persuasion device, not a model.
This is also the reason to show the arithmetic rather than the conclusion. “Buying is cheaper” invites a fight about preferences. “Buying is cheaper until month 47, and here are the five lines that produce that” invites a correction to line three, which is the conversation you actually wanted.
Your win
You can build a value model from stated assumptions, sequence a backlog with CD3 and prove what the alternative orderings cost, write a multi-year total-cost-of-ownership ledger and locate its crossover, price the real effect of late staffing, state a capacity assumption that can be falsified, and set cost guardrails that trigger a revisit rather than an invoice.
Read deeper
- The Principles of Product Development Flow, Donald Reinertsen — ch. 2 on the economic view, ch. 3 on cost of delay and queues, and ch. 6 on weighted shortest job first. The primary source for everything on this page.
- Black Swan Farming · cost of delay, Joshua Arnold — CD3 applied to real backlogs, including how to build a value model when nobody will give you numbers.
- The Mythical Man-Month, Frederick Brooks — ch. 2 and 7: why communication paths, not effort, set the limit on adding people.
- “Is High Quality Software Worth the Cost?”, Martin Fowler — internal quality as an economic argument about future delivery speed rather than craftsmanship.
- “Technical Debt”, Martin Fowler — the metaphor read as interest payments, which is what makes a repayment trigger sensible.
- Software Architecture: The Hard Parts, Ford, Richards, Sadalage & Dehghani — trade-off analysis with coupling and coordination cost made explicit.
- Course: lesson 0027 (the ledger and the differentiator test), lesson 0038 (debt ledger and repayment triggers), lesson 0047 (forecasts with a movable variable). Reference: build vs buy, short vs long term.
Give your agent-teacher your value model and ask it to find the assumption the conclusion is most sensitive to — then make it show the arithmetic rather than assert the answer.