The Engineering Tax · Article 18 of 29
Every Change to Your System Risks Breaking Something That Was Working
You approved a feature that came in nearly double the estimate because the cost of what it broke never showed up in the budget. The next article builds a single multiplier from your regression rate and incident cost, using the same logic insurers use to price risk, converting any build estimate into the true cost including everything your change breaks. One number that turns a guess into an economic decision. The first CEO who applies it cuts waste competitors can't even see.

Why Every Feature Costs More Than the Estimate
1. The Feature That Cost Twice Its Estimate
A CEO approved a feature, and the actual cost came in at nearly double the estimate. Nobody lied, and the estimate was honest. It just didn’t include the cost of everything the feature broke.
Every change to a complex software system carries a risk of regression, meaning a change that breaks something that was working before. At worst, a new payment flow can crash the checkout page, an updated search algorithm might corrupt the recommendation engine, and a refactored authentication module could lock out half the users. Regressions are a predictable tax on complexity, and the more interdependent the system, the higher the tax.
The cost of these regressions is measurable, and the way to measure it already exists. For centuries, insurance companies have priced risk using a simple model. This article applies that model to software, and it prices the risk from how the system is built today, with incident history used only to price how much a break costs.
2. How Insurance Companies Price Risk
In maintenance engineering and actuarial science, there’s a foundational model for pricing risk called Frequency-Severity. Insurance companies use it to price policies, and maintenance contractors use it to price service agreements.
Frequency is how often failures happen, and severity is how much each failure costs, so the formula captures the expected total cost of failure.
When a factory expects 2 breakdowns per year and each one costs $50k, the expected annual cost comes to $100k. An insurer would then price a maintenance policy at $100k plus a profit margin.
Software needs the same two inputs, and they come from different places. The frequency, the likelihood that a change breaks something, comes from the architecture: how many other modules the change touches, and whether the change stays contained inside one module. The severity comes from incident records: what a break actually cost the company. Oddly, companies calculate neither. They absorb the cost and call it the price of moving fast. An insurer who priced risk this way would be out of business in a quarter. Software companies do it for decades and call it agile.

3. Pricing Likelihood From the Architecture
A change’s likelihood of causing an incident is a property of how the system is built when the change ships. It’s computable from three components with three different origins: one measured from the test suite, one read from the code, one cited from research. Counting past incidents can’t price it: a spotless record can hide a tangled mess one change away from an outage.
For each change about to ship, the review asks one question with two parts: does this change stay inside one module, or does it force other modules to move, and how many? The answer is the Connascence Degree that Article 5 defines. A change with is contained: it touches nothing else, so there’s almost nothing to break. A change with crosses module boundaries, and every connascent module it drags along is a place the break can land and then propagate, through interfaces that may be poorly defined. The likelihood prices the incident itself, propagation included. The forced companion work that represents is a different cost, already priced as in Article 5.
Component 1: the change’s own escape factor, . Run the coverage report, or better the mutation score, on the module the change touches. That number, , is the share of defects in the module the suite would catch, so is the chance a defect slips past the change’s own tests. A module at 80% coverage has an escape factor of 0.2, and mutation tools measure this more honestly than line coverage because they inject real defects and count how many survive.
Component 2: the base rate for the module’s class. An escaped defect still has to reach a customer before it becomes an incident, and is the probability that it does, for a module of this class. It’s the only input with no home in the repository, so it starts from population research (industry change-failure rates run in the 20-40% band; the NIST and regression references below). It lives as one visible teaching value per class: high for customer-facing money paths, low for internal tooling. The company replaces these values with its own accumulated data as it matures, and every reader can challenge a value instead of a formula.
Component 3: a break factor per dragged interface. Each connascent module the change drags along is another place a defect can land, so inspect its boundary. A contracted, name-coupled seam with tests at the boundary is a low-class interface, while shared state with value coupling and no seam tests is a high-class interface. Then read module ‘s coverage exactly as in Component 1, and compute its break factor:
Assembling the likelihood. The change causes an incident when it breaks on its own or through any dragged interface, so the survival probabilities multiply. A contained change () prices at alone, and every dragged interface multiplies the survival chance, which is how coupling turns into likelihood:
A worked example. A change touches the payment module at 80% coverage and drags two connascent modules: Billing on a shared-state seam at 40% coverage, and Search on a contracted seam at 90% coverage.
| Component | Calculation | Value |
|---|---|---|
| (payment, customer-facing class) | 0.08 | |
| (shared-state seam, high class) | 0.24 | |
| (contracted seam, low class) | 0.01 | |
| assembled |
For contrast, a contained change in a well-tested isolated module (, ) prices at , the near-zero intuition made arithmetic.
Two rules keep the calculation honest. One customer-facing outage is one incident, and the engineering hours inside it cover every break that caused it. And when a shipped change does cause an incident, the post-mortem checks the base rates: was the class right, and was the value honest? Incidents refine the values over time. They never set the structure, so a module with no history prices from its seams and its coverage, not from an empty record.
4. Pricing Severity From Incident Records
Severity is the one input where history earns its place, because a past incident is the only honest record of what a break costs end to end. For each incident in the records, compute the realized cost from that incident’s own logs:
is the hours from the break to identification, the hours to write and deploy the fix, the hours to verify and monitor, and the blended hourly rate of the engineers involved, overhead included. One component was deliberately removed from earlier versions of this model: the opportunity cost of engineers fighting fires instead of building features. Those hours are already priced in , so adding their lost output on top counts the same hours twice. If the lost output matters more than the wages, replace the wages with the value of the lost output. Adding both is the error.
The expected severity is the mean of the values, kept per incident class, because a cross-module incident (more hours, more business loss) and a contained incident are different animals:
A company with no incident records yet can’t take that mean, so it estimates instead: engineering hours from the fix effort a typical break would need, plus the business loss the CEO expects from a day of degraded service. The estimate gets replaced by the first real values as they land, which keeps severity the only history-based input in the model.
5. Building the Multiplier
The last input is the exposure: , the number of changes about to ship, whether that’s one change, one feature, or one quarter of shipping. With likelihood from the architecture, severity from the records, and the exposure stated, the failure risk cost of the change program is:
This is the cost of the likelihood of an incident that hasn’t happened yet. The architecture says how likely, the records say how much, and says how many chances the system gets. History never appears in the likelihood, so a pristine tangled module still prices high, and a battered isolated module still prices low.
CEOs think in multipliers, so the risk gets expressed as a proportion of the base, with and sharing the same scope. The cost of complexity , from Article 5, is what that same exposure costs to build and maintain if nothing ever broke: development, coordination, maintenance, and infrastructure.
The second form is the honest identity: what you pay to build and maintain, plus what you expect to pay when it breaks. The multiplier is that same identity presented as a ratio, which is also why the additive form stays primary, since it keeps working when is zero (section 7).
A worked example, with the exposure stated explicitly: a change profile that drags coupled modules prices at , and the cross-module incident class averages , giving $24k of expected failure cost per change. With those numbers, a feature that ships as changes carries of expected failure cost, so , with covering that same feature. The comfortable reading of this example, a $120k feature with a 1.2x multiplier, only holds when the feature is one change () and the $120k is that change’s full cost of complexity, not the raw build estimate. Before trusting any multiplier, state , because a feature is rarely one change.

6. Who Owns Which Number
A formula on a whiteboard is worthless if the people who need it can’t compute it. Specifically, the inputs live in different parts of the company.
The CTO owns the architecture and the engineering metrics.
The CTO computes per change from the three components: coverage and mutation scores from the test suite, boundary classes from the seam review, and the base-rate values the company maintains. From post-mortems and time logs, the CTO calculates for each incident. These are hard numbers derived from the system and operational data.
The business impact belongs to the CEO.
For each incident, comes from finance, CRM, and support systems. comes from the CEO as well, because the cost of complexity grows out of the project budget and the operational spend. These are business numbers that engineering can’t measure.
How the handoff works.
The CTO brings the computed and , the CEO brings and , and together they compute:
If the multiplier is 1.8, the CEO knows the true cost of the feature is 80% higher than its pre-risk cost. It’s an economic analysis that forces a better decision.
7. Where the Formula Breaks
Formulas break when reality doesn’t match their assumptions, so here are the edge cases and how the structural model handles each.
A zero base (). When a change costs nothing to build, like a config toggle or a permission flip, it still carries risk, and the additive identity carries it directly: . The multiplier is the wrong presentation for a zero base, and the identity never needed the division in the first place.
A new system with no history. The likelihood needs no incidents, because the architecture review prices it. Severity is estimated from expected fix hours plus the CEO’s business-loss estimate, and the first real incidents replace the estimate.
A spotless record. Zero incidents in the logs don’t mean zero risk. A tangled module with a clean quarter still prices at its structural likelihood, which is the point: the past can’t zero out what the architecture can still break. The flip side matters too, since a coupled module that never broke prices high while it stays coupled, so the only way to lower its price is to actually decouple it.
Correlated breaks. Three breaks that share one customer-facing outage are one incident, one , and one business loss, which is why the model never multiplies one outage’s revenue loss by three. The incident unit handles correlated risk by construction.
Scope confusion and stale inputs. and must describe the same exposure: per feature for decision-making, per quarter for trend analysis, always labeled, because a per-change failure cost divided by a quarterly base produces a number that means nothing. The inputs re-read cheaply: coverage and boundary classes come from the repo as it stands when the change ships. Base rates age slowly, so incidents refine them after the fact, and a class assignment that keeps missing real coupling gets fixed, not averaged away.

8. The Cost Nobody Owns
The industry doesn’t calculate incident costs properly. Engineering tracks downtime and mean time to recovery. Finance tracks the revenue impact in its own ledger, and support tracks tickets in its own queue. The cost of poor-quality software in the US alone has been estimated in the trillions, yet each department owns a fragment of the cost, and the total has no defender.
CEOs make bad decisions because the total cost is invisible. The risk multiplier brings it into the open, and it prices risk the way an insurer would: from what the system is, not from what the logs happen to show. Once visible, something else happens: the formula creates incentives to reduce the numbers that feed it.
When most changes price at a high , the multiplier is high, and every feature decision carries a visible risk premium. That premium creates pressure to lower , and lowering means making architectural choices that isolate components from each other, so a change in one place doesn’t cascade into three others. The premium pays for decoupling, and decoupling is the only durable way to stop paying it.
The alternative is approving features based on vibes and hoping the regressions sort themselves out. That strategy has a perfect record of not working.
Before a CEO approves a feature, the risk premium belongs on the table next to the estimate. If the premium is 80%, he might choose a safer architecture or kill the feature. If it’s 10%, he proceeds with confidence. Either way, economics drives the decision, not gut feeling.
References
- Software Regression. Wikipedia
- Frequency-Severity Method. Investopedia
- Why Bug Fixes Introduce New Bugs: A Comprehensive Review of Regression Defects in Software Engineering. IJS RET, 2026
- The Cost of Poor Quality Software in the US: A 2022 Report. CISQ
- Site Reliability Engineering. Google (Chapter 1 - Introduction)
- The Economic Impacts of Inadequate Infrastructure for Software Testing. NIST, 2002
← Previous: Automating a Broken Process Gives You a Faster Broken Process
Up next in The Engineering Tax · Article 19
What Started as an Extraction Plan Became a Permanent Trap
A team extracted a billing module from a monolith six months ago. They are still running both systems, and the sync layer between them is consuming more budget than either platform. The next article gives you the formula to see exactly why that parallel state costs three times what the estimates predicted, and the one leadership decision that turns a permanent trap into a finished project.
Coming soon
Frequently asked questions
What Is the Failure Risk Multiplier
What is the failure risk multiplier?
The expected cost of incidents that have not happened yet is the number of changes about to ship, times the likelihood that one change causes an incident, times the average cost of an incident in that class. Likelihood is priced from the architecture when the change ships: coverage or mutation score on the module, a base rate for the module's class, and a break factor for each interface the change drags across a module boundary. Incident history does not set that likelihood, so a tangled module with a clean log still prices high. The multiplier is one plus that expected failure cost divided by the cost of complexity for the same exposure, which is what you pay to build and maintain if nothing ever broke. The true cost is that cost of complexity plus the expected failure cost. When the cost of complexity is zero, use the additive form, because there is nothing to divide by.
How is the cost of an incident priced, and who owns it?
For each past incident, the cost is the hours to detect, fix, and validate, times the blended hourly rate of the engineers involved, plus revenue lost, churn, and SLA penalties. The hours engineers spend fighting the fire are already in that engineering cost, so the value of the features they did not build is not added on top. The expected severity is the mean of those costs, kept per incident class. The CTO brings the likelihood and the engineering portion. The CEO brings the business loss and the cost of complexity. One customer-facing outage is one incident, even when several breaks share it. A company with no incident records yet estimates severity from the fix hours a typical break would need plus the business loss of a degraded day, then replaces the estimate with the first real incidents.
Newsletter
Be the first to get next articles in this series.