A mid-size software consulting and development company was losing 25- 30% on average per project. The projects were mostly small-to-mid-size client engagements, from $100K to $1M.
The pattern was consistent. Requirements, deliverables, and expectations were not clear enough at the start, so teams built something close to what the client meant, then went back to add features or change work that was already done. Every revision was unbudgeted. A $100K project silently consumed $125K-$130K or more in effort. Some went negative.
The projects were already estimated, contracted, and priced, so there was very little room to maneuver. The problems were also discovered halfway through, when things were already getting away from the team.
Before changing anything, I reviewed the original estimates, requirements, and deliverables. I compared them with the work delivered so far, its quality and progress, and the team working on it. Then I talked to two groups:
The problem was not effort or skill. It was a gap between what the client meant and what the team understood.
I made changes step by step and kept improving as we went, aiming for two things at once: client satisfaction and clear expectations.
These results came from fixing projects that were already in flight. On new engagements, where this approach is in place from day one, the expectation is delivery under budget.
Most overruns are not engineering failures. They are clarity failures that show up as engineering costs. If your projects keep costing more than estimated, look at how requirements are defined, agreed, and communicated before you look at who is writing the code.