LitheSpeed : Lean & Agile
LitheBlog: Exploring Lean and Agile

Monday, May 18, 2009

To Estimate or Not, that is the Question?

One popular debate today is whether estimating is worth the effort. To those experienced with Scrum, this question seems silly, how can you prioritize the Product Backlog, or identify what can fit in a Sprint, without an estimate? Aren't you just rolling the dice if you don't estimate?

This is actually a misunderstanding. If you apply kanban without fixed iterations, the focus is not on how big an effort is, but when it will be complete. As such, instead of estimating size, kanban estimates cycle time, which, in the end, is still an estimate.

The common example given is joining a line. Do you care how long (i.e. big) the line is, or do you care how long you will have to wait (i.e. the cycle time)?

The Corey Ladas Take

Corey Ladas explains the latter view in a posting on his blog, a portion of which is quoted below. I added the boldface to the last sentence:

"Rather than go through the trouble of estimating a scope of work for every iteration, just make the backlog a fixed size that will occasionally run to zero before the planning interval ends. That’s a simple calculation. It’s just the average number of things released per iteration, which in turn is just a multiple of average cycle time. So if you have 5 things in process, on average, and it takes 5 days to complete something, on average, then you’ll finish 1 thing per day, on average. If your iteration interval is two work weeks, or 10 work days, then the iteration backlog should be 10. You can add one or two for padding if you worry about running out. This might be a point that’s been lost on the Scrum community: it’s never necessary to estimate the particular sizes of things in the backlog. It’s only necessary to estimate the average size of things in the backlog."

Now, since I took the quote out of context, you may want to read his entire blog posting, or attend his upcoming class on June 11th in Atlanta, to find out more.

The Cases for and Against Estimating

Many reasons are cited against creating estimates; just a few are listed:
  • The estimates are never accurate, so they don’t add value.
  • Even if the estimates are relatively accurate, we know we have to do the work, so why waste the time.
  • The process of creating an estimate creates resentment when everyone is forced to chime in, and reach consensus, even when they don’t agree.
  • The estimate itself causes people to modify their behavior in destructive ways, typically pressuring them to finish, causing low quality. In those instances where they are ahead, the estimate causes them to relax and waste time.

There are also many reasons cited for creating estimates, once again, just a few are listed:
  • Determining business value depends upon an understanding of both return and cost, so you can’t determine value unless you estimate effort.
  • You can’t plan a Sprint without estimates, or, if you are doing waterfall, you can’t build your schedule without estimates.
  • Without estimates the team will lack discipline and will waste large blocks of time, potentially overbuilding a simple feature.

Simple Scenarios

As with most questions in respect to process, the answer is, “it depends”. But, here are some extreme examples to guide the decision on whether or not to estimate.

If you are fixing bugs in a mission critical system, and these bugs are prioritized by severity, and all high severity bugs must be fixed, then it is clear that estimating adds little value. Simply work on the highest priority bugs, and get the fixes released as quickly as possible.

On the other hand, if you are working on new development, or adding a large new feature set, and you must present a complete business case, including expected return and cost, then you will need to create some form of estimates.

Guidance for the Rest of Us

If you are somewhere in the middle of these two extremes, you need further help in deciding how to proceed.
  • Remember the difference between size and effort. When you are estimating features, you are estimating size, so use a relative point scale and let the velocity calculation convert size to time. When you are estimating tasks, use an absolute measure like hours/days to represent the time required to complete a task.

  • Create your estimates quickly and don’t get paralyzed by precision. Being quick may be the middle ground between estimating and not estimating.

  • If you don’t have enough confidence to estimate, don't! Either execute a research spike to find out more, or simply delay creating an estimate until work on related stories or tasks give you an increased level of confidence.
  • If technical uncertainty is high, and you must proceed now, allocate instead of estimate. With an allocation the business can limit the maximum effort and the team can monitor real world progress to cut short efforts that won't be finished in the time allocated.
  • Use either a simple estimation scale, like T-Shirt sizes (S, M, L, XL), or a more complex scale that has increasingly larger gaps. Doubles (2, 4, 8, 16, 32) and fibonacci sequences (1, 2, 3, 5, 8, 13, 21) are both examples of scales with increasingly larger gaps that demonstrate that uncertainly increases along with size.

  • Adjust estimates based on actual experience. The counterpoint to this is to bury your head in the sand.

  • Involve the Product Owner and the business at large.
    • Although it should go without saying, the Product Owner should be deeply involved in the estimation process, providing insight and guidance.
    • The Product Owner should also be involved in the daily stand up meetings where progress is discussed so that he/she can gain an appreciation for the uncertainty inherent in the estimation process.
    • The Product Owner and the ScrumMaster should continually remind the business community at large about the limitations inherent in the estimation process.

  • Most importantly, focus on the journey, not the destination. Sounds abstract, but instead of worrying about the exact estimate (is it 5 Story Points or 8), focus on why people vary on their opinions so that you can better understand the story and the work that will need to be done to deliver it. If you engage the whole team in the estimation process the context gained from can be more valuable than the estimate itself.

In Closing

I estimate that at least 10% of the people reading this post would find it useful, so please send an email or comment on the post so I can see how accurate my estimate was.

6 comments:

Hector Correa said...

Chalk one: I did find it useful.

I think estimates add some value to the product owner to decide which features should come first. They are like price tags for the features.

Having said that, I also try to caution our product owners that estimates are approximations, not promises.

Shameless plug: I've got a blog post here where I talk about some of these ideas

http://hectorcorrea.com/Blog/Estimates-on-Software-Projects.aspx

David Bulkin said...

Hector,

I don't think there is anything wrong with shameless self promotion, as long as you announce it in advance :)

In respect to cautioning Product Owners that the estimates are approximations, we would both probably agree that the Product Owner should be deeply involved in both the estimation process, and daily stand ups where progress is reported, so that they can develop a rich understanding of the level of uncertainty associated with estimating.

The Product Owner and the ScrumMaster (or PM, or whatever name you use) also have the responsibility to educate the larger stakeholder community.

David Bulkin said...

I decided to update the post to include my comments that were spurred by Hector's post, so thank you Hector for reminding me to mention how important the PO is in respect to the estimating process.

David Bulkin said...

leftbrainrightmind,

Your point is well taken.

The assumption in the description was that all bugs must be addressed in priority order, which was an oversimplification.

In most real world situations there are other factors, such as clustering of bugs in specific areas of the codebase. In this case, addressing the segment of code which causes the most bugs is an effective approach, and estimates are less valuable unless you want to calculate velocity.

On the other hand, if the bugs are scattered throughout the code base, addressing high priority, easy bugs first, makes complete sense. In fact, assuming there is only a handful of high priority bugs, the easiest approach is to simply rank the high priority bugs in order (i.e. don’t assign any points or hours) and fix them, or use a simple point scheme if you want to be able to calculate velocity.

RobC said...

I think that not estimating is not practical and potentially foolish. I can't see that approach working in most business environments.

As a product owner, the number one question I was asked about a feature/bug is when? If you're far out enough, you might be able to nail it down to a calendar quarter or release, but as you get closer, the need for specificity increases. CEOs, customers, marketers, and sometimes end users all need to know these things.

And from a business perspective, I would want to know if something is worth fixing. What's the return on it? Averages are not a good predictor of specific future outcomes.

David Bulkin said...

Some Kanban purists will tell you that estimating individual sizes is a waste, as you can calculate cycle time instead.

But, I think relative size estimates against user stories are valuable for a number of reasons, such as helping the team think through the issues they will face when they begin work.

Often times you can use these relative size estimates to calculate sprint velocity (assuming you can complete user stories in single Sprint).

If you track start date and end date (i.e. release ready) for a user story, you will also be able to measure cycle time based on size.

Perhaps you will find that it takes 7 days on average to deliver a user story of size one, 12 days on average to deliver a user story of size two, 16 days to deliver a three, etc.

This cycle time information is an especially useful measure when many user stories require more than one sprint to complete (i.e. when velocity works less well) and for many teams, cycle time is more valuable when calculated against relative size.

So, in the end, I agree that it is valuable to create relative size estimates.