Hacker News new | ask | show | jobs
by dasil003 5172 days ago
Yeah you might be getting burned by these, but even if you are very careful to avoid them, estimating software development in particular is pretty much impossible for anything beyond trivial. The fractal complexity of software means there are often unknown unknowns waiting inside various libraries and architectures that you plan to use. I realize other domains have similar problems (large construction projects come to mind), but to paraphrase Dijkstra, no human endeavour spans a greater scale in orders of magnitude than programming, and it's all just a heap of text with minimal transcription cost!

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.

1 comments

Agree 100%. For those who haven't done Agile estimation before, I strongly recommend Martin's 'Agile Estimation and Planning' book - quick to read and lots of good stuff, in particular:

* 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'.