in reply to On Improving One's Estimates

One good resource for estimating projects is Steve O’Connell’s wonderful “Rapid Development” – my favourite IT book of all time. It discusses two ways of estimating projects – past experience and estimation methodologies that can be encapsulated in software tools. I prefer the former, although if you like the latter, O’Connell offers a free tool on his website: www.construx.com

Estimations based on past experience requires all team members keeping accurate records. In my last job, the organisation introduced a rule that required everyone to enter their time into the time database daily – the customers were allowed to log in over the web at any time and get reports of their projects up to the previous day. Well, a huge fuss ensued (and I was one of the loudly indignant ones!), but it died down pretty quickly. It really only required five minutes per day.

This method worked well for us, as there are only so many permutations of project types that we engaged in. It also works well for because our projects tended to be quite small – two to 10 members per project, 3 to 12 months in length. We know how long it would take to gather requirements, and write the tech spec. Then after we divided the work into the number and complexities of GUI screens, stored procedures, Perl/shell scripts, migrations, OS/DB installation etc, we could calculate the work based on how long it had taken us to do the same number of items in the past . This proved to be reasonably accurate in terms of determining billable hours/cost to the customer.

In addition we used to build in a contingency – typically 30% when we had to liaise with 3rd party suppliers (there are so many unknowns and gotchas), less if it was all in-house.

After all the dependencies etc are worked out using MS Project equivalent we can then work turn our billable hours/estimations into delivery estimations. If the deadline is more important to the customer than having the wizzy features, we may simplify the requirements/spec and the estimates would be adjusted accordingly.

Once the project was under way, each team member had ownership of their own work. Everything was based around weekly status reports which are submitted to the customer - which would include a breakdown by team member of the following
  • hours spent on each project component
  • what was accomplished
  • what the member intends to accomplish in the next week
  • what they intended to accomplish the previous week, but didn’t
  • what they worked on that was not planned for at all.

    The advantage of this is if anything was encountered that would adversely affect the project, we could take immediate action. So if we knew the budget was wrong, or the time lines weren’t right, we could alert the customer early on, rather than waiting until the problem became unmanageable. This is anathema to many people – they never admit problems, and just hope that with a bit of overtime or a few extra contractors that the issues will disappear. I found customers actually liked these issues raised as soon as they were discovered, but maybe we’ve been lucky with our customers.

    This estimation system works well for us, but may not be everyone’s cup of tea. If your organisation’s culture isn’t amenable to this level of scrutiny, then you’ll probably have a hard time with it. (Believe me - if I had my way, it never would have been introduced at my last company). I doubt it will work for large projects. It may not work well if you have a wide variety of expertise. If you suddenly have a junior whose productivity is quite low, then you can’t use the time database to estimate their work, and it becomes a suck it and see for their work.
  • Replies are listed 'Best First'.
    Re: Re: On Improving One's Estimates
    by dws (Chancellor) on Feb 25, 2004 at 18:20 UTC
      If your organisation’s culture isn’t amenable to this level of scrutiny, then you’ll probably have a hard time with it.

      The problem I have with the type of scrutiny you describe (and I've been there before) is that the information flow is entirely too much of a one-way street. Information gets extracted and shovelled into the gaping maw of Microsoft Project, with little feedback other than "hurry up!" to the troops. This serves the interest of the top-level stakeholders, but fails to help me recognize patterns in my estimation behavior.

      Without seeing these patterns, how can I improve? It does me little good for a spreadsheet somewhere to say "When Dave says X, add 30%". There's little instructive value in that number. Is that 30% on all estimates? On some? Am I more accurate when estimating some classes of tasks than others? Are there patterns I need to know to recognize, so that I can avoid the "just another day, i'm almost there" trap?

      The last time I looked at O'Connell (a few years back), it seemed that he was good on the planning and execution side, but had big gaps in the individual improvement area. If that's changed, I'll revisit his site.

        These are all valid points. I think this estimation technique does not apply to all projects, but I would like to offer the following feedback:

        "When Dave says X, add 30%." Using the above methodology, the tasks are broken down to a reasonably fine granularity. You certainly want Dave's input, but basically, you run a report against the database and you see how long Dave took last time he did the same task.

        Detailed time recorded in a database allows you to query estimated vs actual time, by person by task, so revisions to the estimation process can be made over time. It also helps when answering your question: "Am I more accurate when estimating some classes of tasks than others?" as you have metrics that will tell you. (I think this is why O'Connell feels that estimates based on past experience only works if you have hard data.)

        RE: "Information gets extracted and shovelled into the gaping maw of Microsoft Project..." To be honest, I'm not a big fan of MS Project. It does help to get an overview of dependencies, and shows what tasks can be done in parallel with the available resources. But I find it unwieldy and cumbersome. So while we use it, it isn't the guiding tool in the project. (I also think that some project managers -- particlularly those who have fallen into the role from non-technical backgrounds -- use it as a crutch in lieu of actual project management. Hey, if you're fiddling with charts then you're justifying your income, right?)

          Using the above methodology, the tasks are broken down to a reasonably fine granularity. You certainly want Dave's input, but basically, you run a report against the database and you see how long Dave took last time he did the same task.

          If you're having developers do the same task twice, without reusing the results from the first round, you're got a problem at a different level.

          But, seriously, the "yesterday's weather" approach to estimating suffers from several problems. For one, the context may be different. Dave may have taken N days to write the last widget because Susan (who knows a lot about widgets) was sitting nearby. Susan has since moved on. Is it now going to take Dave N days to write another widget? Maybe yes, but probably no.

          For another, Dave may have spent a lot of time climbing up the learning curve the first time. What took N days then make take N/2 now.