How do we fix it though? I empathise with the developers involved - there’s an inclination to look at what they had to do as just engineer some software to manage some signals, some diagnostics and some trains. And to some extent that’s true but it overlooks the other part of their process which is more akin to painting a great artwork - when will you be done with that?
I frequently see one answer fail - we just need to plan it more thoroughly, don’t just estimate, go through exactly what you’ll need, identify dependencies now not during coding. These efforts always fall for the same reason, when it comes time to implement, the plan is hopelessly out of date, incomplete and just plain naïve.
It’s easy to deliver software on time up to around 10kLOC (i.e. single developer short project). Beyond that, the variables cascade and avalanche exponentially. The problem with this is all the interesting problems need >1dev and certainly more than 10kLoc!
On balance I’m more persuaded by XP than by Royce but honestly i don’t think either approach makes or breaks, both can work well.