We (as a industry) tried it with UML and we found out that it is more work than actually writing the code and it was still useless because there isn't a possibility to check for errors.
Because of this, "the developers" and the "managers" need to reach an agreement on a more emotional level where they can trust each other and fill in the gaps with their expertise and experience.
Just keep on trying to document the requirements more detailed, estimating more factually will be a waist of time and it will lead to bureaucracy and mediocre software.
Given the nature of software, I think that the only sane process is an agile one, where the estimate and scope is under continual refinement as the project develops and becomes better understood. Sometimes business requirements dictate otherwise, but that will always lead to a suboptimal solution.
I think that may be the key reason why I prefer startups to other forms of programming work: in a startup you can not afford to do anything for ceremony or to CYA, the focus on optimizing the product must be relentless.
* Write your requirements as 'User Stories' - discrete units of functionality that are as independent as possible and can be developed and tested as a unit. This gives you maximum feedback on how far along you are against your original scope.
* Estimate complexity, not time. For the reasons this guy gives, people suck at estimating how long something takes. However they are better at estimating how complex something is, particularly relative to other similar things. This means you can estimate each story using 'story points' (an arbitrary measure of complexity, relative to other stories), and then be reasonably confident that two stories rated the same are going to take about as long to write. There is some variation here, of course, but averaged out over all your stories you can get quite accurate results, and usually increasingly-accurate as you go along.
* The people making the estimates should be the ones that are going to be doing the work! Seems obvious, but many places have one person (often a manager or team lead) estimate a task, then have the developers build it, and then the manager gets upset that the developers are 'lazy' (i.e. his estimates were rubbish). As the author says, use planning poker with your development team. This can seem like an Agile kool-aid gimmick to those who haven't used it, but it is a very effective way of getting everyone's input. The best developers are often those less likely to volunteer information in a group setting, and this is a great way of getting their opinions without putting them 'on the spot'.
- http://www.mountaingoatsoftware.com/presentations-estimating...
- http://www.mountaingoatsoftware.com/books/1-agile-estimating...
(I'm not affiliated with Mike Cohn but took his estimating and planning course and must say it's worth the money).
EDIT: Maybe I should politely rephrase that: If they're anything like my previous non-technical managers, I'd rather they make the most of their talents elsewhere.
Moving back on topic, the article is worth reading just for the mention of Planning Poker alone. Another moment of enlightenment for me on HN.
http://www.amazon.co.uk/Thinking-Fast-Slow-Daniel-Kahneman/d...
http://www.writemoretests.com/2012/02/estimating-like-an-adu...