Most software projects fail because they don't have an adequate plan. The number of times I've been brought into a software develop project where there wasn't a plan, is like, every single time.<p>Waving you hands while telling a story IS NOT A PLAN!<p>People can't even seem to do basic wire frames. It's ridiculous. How on earth are you going to be able to make an estimate on something for which there isn't even a basic plan? And I'm not even talking about a spec here, just even a higher level plan that describes the project from a user point of view, proposed functionality, features, expectations, budget, etc.<p>I get it, making a plan is difficult and boring work, but you know what? If you can't make a freaking plan you certainly won't be able to build a product. The plan is there to gain insight in the problems you're going to run into. Let's solve all of the shit we can solve before we start writing code so that when we do run into issues, they are genuine issues.
There's also the problem of undecideability as outlined in "Large Limits to Software Estimation": scribblethink.org/Work/kcsest.pdf, plus supporting material: <a href="http://scribblethink.org/Work/Softestim/softestim.html" rel="nofollow">http://scribblethink.org/Work/Softestim/softestim.html</a><p>Between psychological (biases) and neurological issues (like 5 +/- 2) and mathematical limits, estimation is pretty hopeless.
So on the other hand, then why do we estimate (with extremely limited information) that this project will take 7 months for 8 developers, and exactly TO THE DAY, we deliver the final projects 7 months later and the client is happy?<p>AKA you can't estimate pieces, but you can still say this will be done in 3 months, and then you manage scope etc. so it's done in 3 months.<p>Or: you can't estimate how long this will take, but you can set a "how long" given flexibility in the "this".