Who Needs Estimates?

Last weekend, I participated in and helped organize the CodeChef TechTalks.  In Bangalore, we had a birds of a feather session where the question was asked, why do we need estimates when developing software? Here’s my take:

  • No one is good at estimating - I’ve never met anyone who can consistently, correctly identify how long a development task will take.  In the case that you do manage to complete a task within your estimate, it’s most likely you’ve added a 50% buffer (i.e. which in essence is saying you have no idea how long it’ll take)
  • Estimates cause stress - The developer tells the project/account/product manager that a feature will be done in 3 days.  The manager tells the client it will be done in 6 days (they of course add another 50% padding).  6 days later the feature is buggy, doesn’t work in IE and is no way client ready.  Everyone is angry and pointing fingers.
  • Estimating takes time - It might take half a day to figure out all the nuances of a particular feature and account for everything that may go wrong before an estimate can be given.  This time is better spent developing working software.
  • Estimates reduce the quality of software - “I gotta get this feature out the door tomorrow, there’s no way I’m writing tests that will help me update and maintain the system down the road.  I’m hacking this together so I can watch football on Sunday.”

If you ask most managers, the reason they want estimates is to: make sure projects are on-time, measure return on their investment, see if they require additional/fewer developers, help prioritize new features, and to help plan with other teams.

I don’t really buy it though.  It seems like all the reasons above can be accomplished without estimates.  Instead, the focus should be on “are we consistently delivering value through short incremental releases at a sustainable pace?”

When we talked about this as a group (almost everyone was a developer), they said this all sounds great, but how do we convince our company to scrap estimates?  We didn’t really come to any consensus but some interesting suggestions included:

  • Release code to production often - Instead of working on a feature for a month, then at the end of the release finding out the a client requirement changed, or that the implementation wasn’t as per their expectation, release code often and get feedback quickly.
  • Deliver software in thin, vertical slices -  In most typical construction projects you work on the foundation, then put in steel beams, then put up some walls, insert windows, put in carpeting, etc…  Once the entire building is mostly ready, can people start moving in (I have no idea if this is actually how buildings are built, you get my point though).  In Bombay I’ve seen some constructions projects in which they will finish a section of the building completely, before they start on the next floor/wing/etc…  People can start living there (deriving value), as soon as that piece is done.
  • Focus on customer happiness not features - If you get your clients/customers involved, are transparent about your process, get feedback early and often and demonstrate constant progress, everyone should be happy, right?

One of the joys of working at a products company is that we don’t have clients making ridiculous demands (like asking us when stuff will be done :) ).  Certainly in a service company it’s a lot harder to pull this off.  Instead of drafting a proposal for a certain set of features delivered at a fix price in a fixed time period, maybe moving to a monthly retainer is better for both parties (though this definitely requires a high level of trust and maturity).

If the post above doesn’t convince you, my buddy Naresh wrote a better post (with some very interesting comments) here.  What do you think, are estimates a necessary evil?

Share and Enjoy:
  • Twitter
  • Facebook
  • Digg
  • del.icio.us
  • Google Bookmarks

No related posts.

This entry was posted in Testing and tagged , . Bookmark the permalink.
  • How do you decide whether you should do A first or B. How do you decide how much of B should be done by this date? Without some sort of an idea of how long it will take, it is almost practically impossible to do any sort of estimation. A micro release is possible only if you know that this release is micro in the first place :)
  • amit
    @vikrama thanks for your comments, I do believe that a reasonably savvy product owner through discussions with developers can ascertain the level of difficulty in developing a new feature. I think you should start with whats more important (to the user, to internal teams, etc...) A or B, go down that path only doing the critical work, review constantly, if "enough" of A is done you can then move on to B. I believe if you set release schedules (preferrably daily), people will get stuff done in time to release, it's the product owners job to make sure they are spending time on the most important updates....
  • amit
    @vishy and @vikrama thank you for your comments...

    i didn't mean to imply that there shouldn't be any planning... of course this is necessary. focus and defining priority is required. as owen rogers @ pulse said, release is a marketing term. if you release code to production often, once every few weeks/months, your pr team will just say we had a new release and lump up all the changes that have happened together.

    in the same way if you have planned a roadshow, and certain functionality is required for demoing, with shorter releases you focus on whats necessary to make the event a success (maybe a feature doesnt have to be production ready)

    i think in the end estimates are taken as law, and people on all sides get frustrated when estimates aren't correct, there has to be a better way...
  • Hey Amit:

    I agree and disagree.

    I might not need an exact date/ hour/ minute/ second when something would be done but a fair idea is needed. Also, there are some advantages that come up while estimating in a group:

    1. You come at a common consensus of what is to be actually done - you highlight dependencies and simply because you want to meet a date, you cut down on features or take another alternative path. If no one ever estimated or said this would be done by this time, none of this would ever happen.
    2. I think estimation also helps minimize un-used code because of [1] above. If it does result in un-used code, it is always because the PO thought it would be ok.
    3. Finally, as Vishy said, some activities depend on others - like planning a roadshow requires a feature to be completed. And you can't just say, ok now feature is complete and lets do a roadshow in evening. It needs some sort of planning for these activities.

    I do however, agree that estimates should be taken as "estimate".

    Thanks

    Vikrama Dhiman
  • Vishwajeet
    Hi Amit

    I party agree and disagree with your study, especially in a Product Company.

    I agree that no one is good in estimating, its always a guesstimate.

    But we require some of the above data, since as a Product Owner you are constantly in interaction with Customer, Sales and Presales and Marketing. All of these mentioned departments require data (Customer: to know when the feature is coming, Marketing: to plan a new event to hit their roadshows and enhance lead generation, Sales and Presales: to add more gas to their content). So this is where the estimates of when things will get rolling is required. Jus thinking from a developers prespective wouldnt help generate revenues

    Regards
    Vishy
blog comments powered by Disqus