kott®
← Journal

Why do software projects go over budget?

A junior team learns the architecture on your invoice, and nobody adjusts the estimate. Here is the pattern, and what a senior-led team does instead.

Large IT projects run over budget by an average of 45 percent, according to McKinsey's research on large scale technology programmes. That's close to half the original number disappearing into unplanned work. Ask a senior developer why, and the answer is rarely dramatic. The project didn't fail. It just kept discovering costs nobody priced in. We've watched a junior team learn how to structure a system's architecture while the client's invoice ran, more than once. Senior teams cost more per hour. They cost less overall, because fewer decisions get made twice.

Scope change is the obvious culprit, and the Project Management Institute lists it as one of the leading causes of project failure. A dashboard gets added mid build. A workflow changes because someone finally saw the product working. An integration turns out to be necessary after all. None of that looks reckless in the moment, which is exactly the problem. Most budgets are also built on coding time alone: the estimate counts the hours to write the feature and skips the hours to define it properly, review it, test it, deploy it, and document it. The number is wrong before a line of code exists. And features that read as simple on a spec sheet rarely stay simple. A login system sounds like one line item. In practice it's authentication methods, session handling, password recovery, a security review, and whatever compliance the client's industry demands, each one its own small project.

Recruiting an experienced engineer takes more than a month, longer for a senior one. So teams under deadline pressure default to whoever is available, and that's usually the more junior end of the market. A junior developer without senior oversight can still write good code. What they can't reliably do is make the structural calls: how the system should be shaped, where the seams need to go, what will need to change later. Those calls get made anyway, because the work has to move. The rework shows up three months later as a change order nobody wanted to write. Meanwhile the clock doesn't wait for someone senior enough to make the call. Salaries, infrastructure, and vendor invoices keep running while a decision sits with nobody who can own it.

A senior led team makes the architecture decisions on day one, not after the first rebuild. Juniors still do most of the execution: the well defined feature work, the UI changes, the parts that don't need ten years of scar tissue to get right. So the client isn't paying senior rates for every hour. What changes is where the judgement sits. A senior developer reads a "simple login system" and immediately asks about password recovery and session handling, before it becomes a surprise mid build, not after. The estimate is honest earlier. That's the whole point. The goal was never to shrink the number after the fact. It was to get it right before anyone signed anything.

Before signing a statement of work, ask two questions. Who owns the architecture decisions, and what does the risk reserve look like? A reasonable risk reserve runs 10 to 25 percent of the budget, with another 15 to 20 percent set aside for the weeks right after launch, when real usage patterns show up the gaps the spec missed. A bigger contingency line isn't the fix. Fewer people learning the shape of the system on your invoice is.

Next readFixed price or time and materials, how to structure a build so it doesn't blow up