Software Design Reference Supplements · Architecture economics

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.

Reading ≈ 24 minPractice ≈ 90 min

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)

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.

† Notice which assumption is load-bearing. If the contact-rate reduction is 10% rather than 25%, the weekly figure falls to about €1,150 and several sequencing arguments below get closer. That is the assumption to test first — not the one you are most confident about, the one the answer is most sensitive to.

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.

CD3 table · returns pilot backlog (one team, WIP = 1)
#SliceCost of delay (€/week)Duration (weeks)CD3
ASelf-serve eligibility decision and status page1,6004400
BAutomated carrier label creation9003300
CGuest-order returns (29% of demand, outside pilot)1,2006200
EFraud guardrail rules, second iteration4503150
DExchange automation6005120
FAdmin reporting refresh120260

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

SequenceOrderFinish weeksTotal delay cost
By CD3A B C E D F4, 7, 13, 16, 21, 23€50,860
By cost of delay aloneA C B D E F4, 10, 13, 18, 21, 23€53,110
By shortest durationF B E A D C2, 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.

The principle behind the principle

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:

Buy — a multi-carrier aggregator behind your own port:

Recurring: build €10,800 + €3,600 + €1,800 = €16,200/yr. Buy €7,800 + €12,960 + €2,160 + €1,080 = €24,000/yr.

CumulativeYear 1Year 2Year 3Year 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)

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.

Cost guardrails · returns pilot
GuardrailTargetAlert atOwner and response
Infrastructure cost per resolved return≤ €0.05€0.08 for 3 daysReturns lead — review label-worker retries and queue depth.
Carrier per-label fee€0.09any month over €1,300Returns lead — volume above model; revisit the value model, not just the bill.
Manual review queue≤ 50/day40/day for 2 daysSupport ops — the guardrail from the initiative frame; tighten eligibility or add capacity.
Team capacity spent on carrier maintenance≤ 8 h/month16 h in a monthTech 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.

Field notes · the economic argument behind the technical one
What is saidThe economic claim hiding insideThe 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.
What people get wrong after reading this
“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

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
Teach it back
  1. What is your current sequence costing, relative to the CD3 sequence? Would you defend the difference out loud?
  2. Which recurring cost of a system you own has never been written down — and who would notice if it doubled?
  3. The last time someone asked for more people, what were the three cheaper alternatives, and were they offered?
  4. 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

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.