Points For Stories and the Perplexing Nature of Estimating Software

For four years, I've been using the point system for estimating software effort.  This post is an attempt to convey all the variables involved in estimating software effort.  I'll also touch measuring effectiveness of a software project.

First, as a manager, I want to know if my software organization is being effective.  Furthermore, I want to be able to measure each team in my organization and do some comparison between them.  What is the metric by which I should measure them?  Also, how do I measure and communicate improvement or degradation in effectiveness?

Many people have wrestled with this, and I am just one of them.  I reached the conclusion that points cannot be used as a metric of effectiveness, and I'll illustrate why.

A "point", as used for software estimation is a measure of effort.  It is a relative measure of effort, and it's context is completely within a single development team.  One team's point is not the same size as another team's point.  Because a point is relative within a single team, it can only be used to infer information about that team.

It is tempting to use a point as a measure of value delivered.  As a manager, I want to know how much value is being delivered because my goal is to maximize the value delivered within a given iteration.  I'm still left with the problem of how to measure value.  This post will not answer that question since that is a very holistic topic and not isolated to software development.

Sometimes I would like a point to be a measure of value.  If it were, then I could just mandate more points delivered.  As a manager, I can do that.  I can mandate that the team deliver more points per sprint.  The team, in self defense of an non-actionable request, will deliver more points in the sprint. . . but I will see the project progressing at the same rate.  Because points are relative and not rooted in anything concrete, their size is controlled by the team using them. 

So I'm left without a measure of value.  All I have is estimates of effort.  

If I accept that, I will still want some way of knowing if the team is speeding up or slowing down over time.  This industry is plagued with teams that slow down.  As defect lists grow, the team seems to slow to a crawl.  If I'm rigorous about automation, I can keep my teams from suffering that fate (I've proven that).  However, I still want to know how much my teams are speeding up over time.  I know from past experience that agile engineering practices cause software development to accelerate over time as opposed to speed up; however, how can I quantify that?

I could turn to mapping points delivered per iteration.  If I measure that over many months, shouldn't I see an upward trend?  That would seem only logical, right?  As the team finds better ways to do things. . . as the team forms solid standards around the project and refactors common functionality into standard components within the software. . . shouldn't the team be able to deliver more software each iteration?  The answer is YES, but oddly enough, the number of points stays mostly flat over time.

How can the above be true if the team is actually speeding up?  This is because the point is a measure of effort.  As time goes by the team finds ways to make delivering similar functionality easier.  Because the standards and componentization makes things easier, the effort for a similar feature actually decreases.  The effort required to deliver a similar feature is less than it was before.  This causes the team to estimate less than they had previously estimated.  At the end of the iteration, the team has delivered more, but my graph of points stays flat.

This can be very frustrating, since I'm still grasping for my metric.  I need a graph.  I need a report.  I need statistics about how well my software teams are doing.  If a point is a measure of effort, and I have finally accepted this, then it will stay flat over time.

The whole point of this post is that worrying about points delivered is futile in the big picture.  Because it is so consistent, it is a great predictor, but it is not open to suboptimization.  Points remaining to the next milestone is a better measure because that metric is at least relative to the effort metric.  When effort decreases per unit of value, the points remaining to the next milestone will also decrease.

This whole scenario is a bit frustrating, but if you, dear reader, have found the magic metric for measuring project effectiveness, please let me know in the comments.


Trackbacks

Arjan`s World » LINKBLOG for January 27, 2009 Posted on 1.27.2009 at 3:24 PM

Pingback from Arjan`s World » LINKBLOG for January 27, 2009

igorbrejc.net » Fresh Catch For January 28th Posted on 1.28.2009 at 4:05 AM

Pingback from igorbrejc.net » Fresh Catch For January 28th

Dew Drop - January 28, 2009 | Alvin Ashcraft's Morning Dew Posted on 1.28.2009 at 7:47 AM

Pingback from Dew Drop - January 28, 2009 | Alvin Ashcraft's Morning Dew

Link Listing - January 27, 2009 Posted on 1.28.2009 at 7:49 AM

ASP.NET RedirectButton - Redirect Users With the Click of a Button [Via: 4 Guys from Rolla ] ASP.NET...

Comments

Jeff Donnici said on 1.27.2009 at 1:25 PM

I'd leave points alone and let them just continue to be your team's measure for effort. Bring in a separate metric for the question of value - which seems to be simple ROI.

Why not have the owner/stakeholder for the project give your stories/use-cases a "business value" assignment? We're building commercial products and I find it very helpful to have the product management team let us know how they'd prioritize things (separate from effort) based on the business needs. There may be upcoming sales deals, customer renewals, or marketing promotions that impact their prioritization... so let them assign the value.

When planning the sprint, that gets taken into account when deciding how to map user stories into the iteration... obviously, effort is still a key element because that defines how much CAN fit into the iteration. But knowing which user stories are the most valuable to the business goals tells you which ones SHOULD fit (assuming they can).

We've found one upside to be that the product team begins to understand that their perspective of value doesn't always map to our perspective on effort (i.e. sometimes low-value tasks are hard and high-value tasks turn out to be low hanging fruit)... additionally, the development team gains a better sense of how the business (market, customers, etc) values their contribution.

JD

Jimmy Bogard said on 1.27.2009 at 2:26 PM

Here's a great read saw a while back on real-world velocity charts:

leadinganswers.typepad.com/.../velocity-signat

PS - that guy's blog is awesome. He's got some really great Agile Mgmt stuff.

Greg Banister said on 1.27.2009 at 4:19 PM

I see the productivity gains of practicing agile as being equivalent to the concept of compounding interest. You may contribute the same amount of money (or effort) every period (or iteration), but over time the value of your account (or team efficiency) will grow based on the interest rate (or team velocity)

I've tried (unsuccessfully) to get business owners to adopt JD's concept of applying Business Value to stories. Not that it shouldn't be done, but I think it's even harder for a business owner to estimate business value than it is for a developer to measure development effort. In both cases it's seems to be just gut feeling driven by past experience.

James Shore wrote more about this concept of "Value Velocity" (http://jamesshore.com/Blog/Value-Velocity-A-Better-Productivity-Metric.html) I think James is on to something, but it needs more thought and discussion.

Scott Ambler also has recently written about "Examining Acceleration" here: www.ibm.com/.../ambler Scott says velocity should be measured in % changed in points per iteration and that an agile team can and should calculate their velocity and be held accountable to do so. Interestingly, he says that a 10-15% per year increase is a reasonable expectation.

Greg

Jason said on 1.28.2009 at 4:27 PM

The important thing to consider about velocity is that it's used for longer term planning only. For example, if the team delivers 30 points this sprint and only 20 points in the subsequent sprint, it doesn't necessarily mean they are delivering less value.

Points can be measured in ideal hours or bananas or whatever makes you feel good, but in general terms, they are a best guess on the effort required to deliver a feature. As far as mandating the team deliver more points per sprint, that is actually opposite of the whole point of using Agile methods in the first place. Sounds like there is a trust issue there.

Your metric is better software, less (or no) defects, happy customers, more sales and less calls to the helpdesk (if applicable).

If you absolutely need a report or metric, I would suggest coming up with "business value points" that are associated to your user stories. Chart a burn-up of business value relative to story points. Then chart that against revenue (staggered of course to get a trend...) and voila, there is your "business value chart". I demo'd this concept to our executives and they like the idea, we just never implemented it.

Sounds like you want a metric for the sake of having a metric but in the end the effectiveness of a delivered project is much more complicated than looking at a chart.