views:

971

answers:

8
  • What are your experiences regarding project planning and creating hour estimates for new projects?

  • What is the approach you are using, and why has or has it not worked for you?

  • Are there any best practices to take in account?

+8  A: 

I highly recommend the book "Software Estimation: Demystifying the Black Art" by Steve McConnell. It really covers this question well.

Brian Genisio
+6  A: 

There is some excellent information about this in The Pragmatic Programmer. They advise that you use appropriate units of time rather than estimating 130 days estimate 6months. They also advise to concentrate tasks that are most crucial. And avoid making estimates based on sub estimates.

Personally I find it is useful to break the task down to understandable chunks to properly estimate them. If the task is large there are too many nooks & crannies that can hide unthought-of problems. By concentrating on the details of smaller chunks, you can evaluate the potential problems more successfully.

vfilby
+2  A: 

Your question is an NP-Complete problem:) There are many algorithms used to come up with an estimate but they are always just guesses, are never accurate, and many take a long time to execute. Forget hour estimates, use scrum or some other agile framework. Making estimates for a project in hours at its start is simply lying to people.

Don't make hour-based estimates until right before you build the feature and update those estimates continually as you progress on the feature.

Don't forget to include time for testing in your estimates.

DancesWithBamboo
A: 

Practice, practice, practice. To be safe, overestimate as you refine your estimating abilities. Of course if you're a consultant, this can cost you business. If you're afraid of losing business, under estimate, but be aware you'll be making up the extra hours out of your free time/bottom line.

andrewbadera
+13  A: 

Estimation Tasks

The principles that I try to use (I don't always get the opportunity) are:

  • Step-wise refinement
  • 3 point estimates
  • Risk analysis

Step-wise refinement

When estimating it's important to estimate at the right granularity and to continually break down and add tasks until you're confident in the estimates. Quite often, estimating highlights a lengthy, critical path task that may need more refinement and risk analysis.

Risk analysis

Trying to work out where risks lie in each task (are there lead times for something? is there a lack of knowledge? could a competitor beat you to it? etc. etc.) helps to determine your confidence in the estimates, which allows you to determine how to treat those estimates. Risk analysis also helps to determine if further step-wise refinement is required.

3-point estimates

Specifying the best, probable, and worst case estimates for each task (including design, development, testing, and bug-fixing) helps with risk analysis and planning. The estimates can be used to calculate the most likely duration to hit particular percentage success of that task. Together with information on other related tasks, and risk analysis, a project manager can factor the risk, and other known elements like system testing into the estimates to get a more reliable estimate.

Of course, the granularity of estimates is also important. There's no point in estimating in hours for most tasks. In software, days is usually best, but sometimes it could be weeks or months (such as if you are out-sourcing blocks of work). Choose a time granularity that makes sense for all the tasks in a project (I usually use days for the requirements capture and functional specification phases, and half-days thereafter as I learn more about the tasks and their sub-tasks).

Conclusion

All three of these items feed into each other, so quite often you have to refine each step a number of times. For example, you might have a stab at the requirments stage, then again during functional specification, and again during design specification.

Estimation is a learned skill; the more you do, the better you get. Risk analysis improves as you learn more about what you don't know, 3-point estimates improve as you learn more about what you do know, and stepwise refinement improves as you go through each step of a design process.

If you have the time, revisit your original estimates after you've completed a task and see how the actual time stacks up against your 3-point estimates and your project plan. If it differs, see where the time was lost or gained and try to learn what you can take from that for future projects.

Estimation should not be a daunting task - I always feel like I know more about my work after estimation than before.

Jeff Yates
A: 

Log the time spent in your actual projects and that will help you plan to for the next one, PSP/TSP offer a way to do it

kmilo
+1  A: 

RE: If you're afraid of losing business, under estimate, but be aware you'll be making up the extra hours out of your free time/bottom line.

you are better off reducing your hourly rate rather then messing with the hours you present to the client. at least this way, you present the appearance of added value to your client.

LM

A: 

Since your question is compound, possibly you find the topic "How do you do very quick (and dirty) estimations for coding tasks?" useful, and which contains partial answer.

sergdev