The Cost of Complexity · Article 2 of 8
Why small features take months on a legacy codebase
A 40-hour feature takes 464 hours when twelve modules move with it. The calculator returns 11.60x and $69,600 for that feature.
The multiplier is 11.60x. Cost per feature is $69,600. The annual figure is $1,526,400. A 40-hour feature takes 11.6 weeks when twelve modules move with it. Twelve modules at an interdependence of 0.8, plus 40 coordination hours on those 40 hours, produce that multiplier.
Why it happens
On a legacy codebase the change drags twelve modules and 40 coordination hours with it. The multiplier behind that drag is the Sync Tax, explained in The Sync Tax. The vacuum work is the 40 hours the feature was estimated at. The module term is interdependence times connascence degree: a weight of 0.8 on 12 modules. The coordination term is 40 coordination hours divided by those same 40 hours of vacuum effort. The hours on the feature are the vacuum hours times the multiplier. At 40 hours a week, the worked example turns that product into weeks.
The module term is what moves when the module count rises. Each added module adds the interdependence weight of 0.8. A diff that lists more than twelve modules raises the degree, the module term grows, and the multiplier rises with it. Interdependence 0.8 is a heavy weight on every module in that term, which is why the length of the diff dominates. The coordination term does not move with the module count. It stays the ratio of the coordination hours to the vacuum hours until one of those hour counts changes. On this page the two hour counts are equal, both 40, so the coordination term is a full extra share of the vacuum work, sitting beside a module term that is much larger.
On a codebase the reader sees a ticket that was sized at 40 hours. The diff names twelve modules. The reviews, the waiting, and the alignment across those modules add up to 40 coordination hours. The calendar then shows the vacuum hours times the multiplier. The feature is still the small one in the estimate. The weeks it occupies are the multiplier. A reader who keeps calling it a small feature and keeps shipping diffs of twelve modules is reading this page.
Across a year the gap repeats. Features per year is 24. The annual figure is the per-feature gap, repeated. One feature’s calendar is the multiplier on 40 hours. Twenty-four of them are the year. Legacy drag on this page is both terms: the twelve modules at a weight of 0.8, and the 40 coordination hours that travel with them. The coordination term gets larger when the hours around the feature grow past 40, or when the vacuum estimate shrinks and the same 40 coordination hours become a larger share of it.
A reader measuring their own legacy repository counts the modules a small feature touches and compares the count with 12. They add the coordination hours around that feature and compare the sum with 40. They keep vacuum effort at the original estimate. If the ticket is still called a small feature and the diff lists twelve modules, the weeks in the worked example are the delivery time this page is accounting for. If the diff is shorter than twelve, the module term is smaller and the multiplier falls with it, even when the 40 coordination hours stay. That split is the point of reading the two terms apart.
Each added module adds 0.8 into the module term, so the hour count grows with the module count on top of the coordination hours, which stay still until their own input changes. The Sync Tax here is that pair. The estimate is one of them, the vacuum hours. The diff is the other, the degree. The meetings are the coordination hours. The degree is what moves when the only change is how many modules the ticket touched.
A worked example
Connascence degree is 12. Interdependence factor is 0.8. Coordination overhead is 40 hours. Vacuum effort is 40 hours. Blended rate is $150. Features per year is 24.
The multiplier is 1 + (0.8 * 12) + (40 / 40) = 11.60. Vacuum cost is 40 hours times $150, which is $6,000. Feature cost is $6,000 times 11.60, which is $69,600. Hours on the feature are 40 times 11.60, which is 464. At 40 hours a week that is 11.6 weeks. The annual figure is ($69,600 minus $6,000) times 24, which is $1,526,400.
How to measure yours
Open the Engineering Cost Calculator and set Connascence Degree to 12 and Vacuum Effort to 40. Keep the other inputs at the values in the worked example. Those two are the inputs to set first. Connascence degree 12 is the module count in the module term. Vacuum effort of 40 hours is the small feature as planned, and it is the denominator of the coordination term. Interdependence stays at 0.8. Coordination Overhead stays at 40 hours. Features per year stays at 24.
Move Connascence Degree and the module term moves. Each added module adds the interdependence weight of 0.8, so the multiplier grows with the module count. The hours on the feature, the weeks, the feature cost, and the annual figure move with it. The coordination term does not move with the degree while the 40 coordination hours and the 40 vacuum hours stay put. Move Vacuum Effort and the baseline moves, and the coordination term moves because the vacuum hours are its denominator. The worked example holds vacuum effort at 40 so the feature stays the vacuum hours times the multiplier.
Coordination Overhead stays at 40 hours while those two inputs are set. Those 40 hours match the vacuum effort, and they are the numerator of the coordination term. Interdependence stays at 0.8, the weight on each of the twelve modules. Features per year stays at 24. The inputs to set first remain Connascence Degree and Vacuum Effort.
Cost is the vacuum work times the multiplier, so the work is one divided by the multiplier of what you pay. Above 2.00x, more than half of every feature’s cost is overhead. These inputs sit at 11.60x. Twelve modules at an interdependence of 0.8, plus 40 coordination hours on 40 hours of vacuum effort, are what push the multiplier past 2.00x. The hours on the feature are the vacuum hours times that multiplier, which is how a 40-hour estimate becomes the weeks in the worked example. The line to watch is the length of the diff on the next small ticket.
← Previous: Why your engineering team gets slower as it grows
Up next in The Cost of Complexity · Article 3
What coordination overhead costs a software company
Twenty coordination hours on a 40-hour feature add $3,000 on the coordination line. The annual figure for these inputs is $489,600.
Frequently asked questions
Why Small Features Take Months on a Legacy Codebase
Why does a small feature take months?
Twelve modules move with the change, and coordination overhead is 40 hours. A 40-hour feature becomes 464 hours, which is 11.6 weeks of one engineer.
Where do the 464 hours come from?
The multiplier is 11.60. Hours are 40 times 11.60.
What does that feature cost?
At $150 an hour the feature costs $69,600. Vacuum cost is $6,000. At 24 features a year the annual figure is $1,526,400.
Which two inputs should I set first?
Set Connascence Degree to 12 and Vacuum Effort to 40. Keep the other inputs from the worked example.
Newsletter
Be the first to get next articles in this series.