Sunday, 24 February 2019

Improving the Accuracy of Software Development Estimates

In a previous post I discussed a useful analogy for Software development estimates and as I normally do, I posted it to Reddit, where it generated a bit of discussion.  Among the comments there was this by ghostfacedcoder (emphasis mine)

These articles always frustrate me, because they clearly come from people in (comparatively) bad companies who think idiotic things about estimates, and as a result the authors need to write arguments against that idiotic thinking.
But personally I've escaped those bad companies, and I could care less about reading more whining about estimates (NOT blaming OP: again people write about what's relevant to them ... it's just that that isn't relevant to me).
I'd like to see more articles about getting estimates more accurate, or organizing projects better around inaccurate estimates. You know, the stuff that's a lot harder to do than complain (although, again, I'm not faulting anyone for complaining, just saying what I'd like to read). But in my experience such articles are far more rare, and I guess that says something about the state of our industry.
This is an attempt to write an article about producing more accurate estimates, here is to you ghostfacedcoder.

Project Management Triangle


In project management and I'm not just referring to IT projects, there is a well known concept called the project management triangle, aka Scope Triangle, aka Triple Constraint. I was introduced to it at the local cobblers, who had a humorous sign on the wall which read the following (rough translation from the original):

A quick job well done won't be cheap
A cheap job well done won't be quick
A cheap job quickly done won't be good.

Producing an estimate is no different and thus the quality of the estimate depends on the amount of resources spent on it. 

It is true that there will always be spanners in the works, but this intuitively makes sense, after all if the project manager asks a developer for an estimate and hovers around waiting for said estimate, this gives little or no time to the developer to think about the potential issues that might arise from an off the top of his/her head design for a feature, which is likely to result in missed issues or an estimation for an approach that will not actually work.

So how can we do better?  The answer is to spend more resources (time and/or people) on coming up with the estimates.

Caveat emptor 


Firstly, I will put my hand up and say that this method that I am proposing is entirely theoretical as the three times I used it to come up with an estimate, the feature ended up never being developed so actual real world data is needed.

Secondly, coming up with the estimate took around 20% of the estimated time to generate said estimate, but as discussed later, some of this time would be saved from the development phase. This was for features that were estimated at around one person week.

Thirdly, for any feature of reasonable complexity it simply isn't possible to be 100% accurate with an estimate all the time.  Not even doing the feature and then re-doing it will give you an 100% accurate estimate all the time as on the second time around you'd probably apply what you've learnt the first time around and do it differently, which would likely lead to a different duration.

Fourthly, I realise that the resource expenditure might not always warrant the increase in accuracy but I think it can be useful in situations where there is a high risk to the business or trust needs to be repaired to give but some examples.

Finally, I think that the more familiar the team becomes with a codebase and the domain, the less time consuming this method will be.

There is Method in the Madness


There are various sources that contribute to uncertainty in an estimate but they can all be distilled down to one thing: Assumptions. What this method does is minimises the assumptions by spending time doing some coding.

This is not doing the work to then tell the PM how long it will take to do (having already done the work) but it is doing some coding to ensure that the assumptions that we make in our estimate are reasonable.

  1. Create a feature branch.

  2. The idea is to have a separate branch to enable pseudo development.

  3. Add failing unit tests.

  4. If you don't use TDD you can ignore this step.

  5. Add Interfaces/Classes with empty methods that have the right signatures (models included) so that your project compiles successfully.

  6. The whole idea is predicated on this step as it forces the developer to think about the design of the feature.

    It is very important that the data models are added here as getting the data needed might be half battle.

  7. Estimate how long it will take to write each method, writing down each and every assumption you make as a comment on each method and/or class/interface. 

  8. Make sure that your actual time estimate for each method is not written down in the code to avoid any possible anchoring effect.

  9. Submit PR to enable somebody to validate your assumptions.

  10. This step is not necessary but it's another gate in the process to increase accuracy as a second pair of eyes might see different things, e.g. missing methods, unnecessary methods, entirely wrong approach etc..

  11. PR Reviewer validates assumption and also estimates development time

  12. A average or even a weighted average is taken of both estimates and this then becomes the team's official estimate. Let the PM have the bad news.

The method also provides a good base for helping out junior developers on more complicated features as most of the design work has already been done.

Projects Bid need not apply


While I think that this methodology works for estimating a feature to a great degree of accuracy it would not work very well for a bid.  The upfront cost of this methodology is so high that I would be surprised that anybody would go along with it.


36 comments:

  1. Hi....your post is amazing, thank you for providing all IT related information. Keep posting more and more blog like this VIT

    ReplyDelete
  2. Excellent blog information and understandable

    Pressure Vessel Design Course is one of the courses offered by Sanjary Academy in Hyderabad. We have offer professional Engineering Course like Piping Design Course,QA/QC Course,document Controller course,pressure Vessel Design Course,Welding Inspector Course, Quality Management Course, Safety officer course.
    best welding inspector course in India
    best safety officer course
    best quality management course in India
    best welding inspector course in India
    best welding inspector course near me
    best safety officer course near me
    best safety officer coursein hyderabad
    best safety officer course in India
    best quality management course

    ReplyDelete

  3. Hey Nice Blog!!! Thank you for sharing IT related information. Wonderful blog & good post. Its really helpful for me, waiting for a more new post. Keep Blogging! For more details visit us at Bachelor Of Information Technology Melbourne

    ReplyDelete
  4. This comment has been removed by the author.

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
  6. thank you for making this blog like musings on information technology see more articles about getting estimates more accurate, or organizing projects better around inaccurate estimates this is so useful. if you want to know about server hosting or interested in best USA VPS Hosting you can ask us for more details and services.

    ReplyDelete
  7. Your Information Very Use full…thank you for share…
    When I gone thorough it "Musings on Information Technology - A view from the trenches" Good explanation in your article your article is explaining point to point this is good for every who visit on this article get the full information.USA VPS i would like to thnaks again for this article and i surely share information to my friends...

    ReplyDelete
  8. finally today i got a blog on musings on information technology see more articles about getting estimates more accurate, or organizing projects better around inaccurate estimates this is so useful. If you want to start your online business with fast hosting service, or interested to know about the best Greece VPS Hosting you can ask us for more details.

    ReplyDelete
  9. Great Article… I love to read your articles because your writing style is too good, You are so clearly explained, "Improving the Accuracy of Software Development Estimates" I share such information especially about Norway VPS Hosting you can ask us for more details and services.

    ReplyDelete
  10. Thank you so much!
    Attractive Blog and very helpful! you providing all IT-related nice info I achieve this most helpful information from you. I would like the most important information shared with you. do you know how Hong Kong VPS Hosting is important for the business website? If anyone wants this type of info. Then can ask me.

    ReplyDelete
  11. Very fascinating and amazing blog. this is a very informative and nice blog. thanks for the post it. And, also If you are interested in knowing about hosting and want to buy hosting then I suggested you buy a Malaysia VPS Hosting from Onlive Server they provide the best hosting services at a very low-cost.

    ReplyDelete
  12. It's really a great and helpful piece of info. I am glad that you shared this musings on information technology see more articles about getting estimates more accurate. If you want to start your online business with fast hosting service. If you are interested in best Australia VPS Hosting you can choose your plans as your requirement.

    ReplyDelete
  13. Excellent blog,
    The information you put in this blog is very understandable and written very well, now I can improve the Accuracy of Software Development Estimates. By the way, I appreciate your blog, if you want to know about server and hosting, then I would like to give you information about Dubai VPS Server. I will be glad to help you.

    ReplyDelete
  14. Great post. I was checking continuously this blog and I am impressed! Here I also want to share some information on the best Canada VPS Hosting services for your business website at a very affordable price.

    ReplyDelete
  15. Wow! Amazing blog, I mean this blog is just informative. I personally love this informative article… Keep posting always such information with us. Thank you very much. Are you want to know about Brazil VPS Server
    ? then contact me. you can any queries ask to me, and I will help you.

    ReplyDelete
  16. Hi, Great Blog- All the necessary information is provided in a very systematic way that is easy to read Thanks for sharing the information. ere I also want to share some of the best UK VPS Hosting services for your website at a very affordable price.

    ReplyDelete
  17. “Amazing write-up!” and share always informative blog tnx for sharing this musings on information technology see more articles about getting estimates more accurate. If you are looking for fastest and cheapest Germany VPS Hosting you can ask us for more details and services.

    ReplyDelete
  18. Amazing blog! I read this and I am glad that It's a very informative blog. You always share informative content with us and your blog writing is so simple to understand. If you have interested in the best USA VPS Hosting, then you can query us for more details and services. I will full information you.

    ReplyDelete
  19. Great Article… I love to read your articles because your writing style is too good, You are so clearly explained, "Improving the Accuracy of Software Development Estimates" I share such information especially about Turkey VPS Hosting you can ask us for more details and services.

    ReplyDelete
  20. This is an excellent post I seen thanks to share it. It is really what I wanted to see hope in future you will continue for sharing such a excellent post.

    ReplyDelete
  21. You always have good humor in your blogs tnx for make ablog on musings on information technology see more articles about getting estimates more accurate. If you are looking for fastest and Best Cheap VPS you can ask us for more details and services.

    ReplyDelete
  22. Perfect Blog for Accuracy of Software.
    The information you give in this blog is very understandable, now I can improve my Accuracy of Software Development Estimates. By the way, if you want to know about server and hosting, then I would like to give you information about VPS Cloud Hosting Services. I will be glad to help you.

    ReplyDelete
  23. Your information is very useful, thank u for share. The blog was too good and the way of explanation is best. I share such information about Swiss Cloud VPS services.

    ReplyDelete
  24. Such an Impressive blog it is very nice and it is very helpful for me and other people. And are you want to know that what is Instant Domain Search? then I can help you and I will provide you the good information.

    ReplyDelete


  25. finally today i got a blog on musings on information technology see more articles about getting estimates more accurate, or organizing projects better around inaccurate estimates this is so useful. If you want to start your online business with fast Fastest WordPress Hosting
    service, or interested to know about the best you can ask us for more details.

    ReplyDelete
  26. Wow! very informative and amazing blog posting by you. Nicely explained in this blog by you thank you very much for this helpful info (Project Management Triangle). If you are interested to know about VPS Windows 10 then you can ask any queries related to VPS Server.

    ReplyDelete
  27. Thanks for ones this excellent posting, I actually enjoyed reading it, you are a great author. And, also if you want to take a VPS Hosting then I suggest you buy a Cheap Linux VPS from Onlive Server which is available at a very low cost.

    ReplyDelete
  28. thank you for starting this blog like musings on information technology see more articles about making views more accurate, or organizing projects better around inaccurate estimates this is so useful. If you are looking for the perfect domain name Domain name availability you can ask us for more details and services.

    ReplyDelete
  29. A good article on blog commenting, really I was searching for this kind of information for some days What is the function of a VPS Hosting for WordPress If you want to know about VPS Hosting for WordPress or are interested in the best you can ask us for more details and services

    ReplyDelete
  30. You always make a very informative and useful for everyone this time you make a great blog on Improving the Accuracy of Software Development Estimates. At last, I want to thank you for this wonderful post. If you want to take knowledge about Cloud VPS Hosting , you must ask about it.

    ReplyDelete
  31. I am regularly reading your content, glad that I came across such an informative post. I really like your information. If you want to grow your online business then you must choose Cloud VPS Hosting

    ReplyDelete
  32. I am regularly reading your content, glad that I came across such an informative post. I really like your information. If you want to grow your online business then you must choose Best Cheap VPS

    ReplyDelete
  33. This comment has been removed by the author.

    ReplyDelete
  34. Exceptionally helpful and awesome article! I just got started with it, but I'm learning more about it every day! Thank you and keep doing fantastic! Australia VPS Server

    ReplyDelete