Throughput vs. Velocity
Throughput and velocity are ways of measuring how fast a team can do work. Knowing how fast a team is going allows the team and their stakeholders to know when something is going to be done.
What is Velocity
Velocity (http://www.extremeprogramming.org/rules/velocity.html) is a commonly used metric for teams using Extreme Programming or Scrum as their guiding principles for software development. Velocity is a unit-less measure that tells the team how much work they should take on each iteration or sprint.
A simple example of calculating velocity:
At the first sprint planning meeting the team estimates the top 10 stories and believes that they can complete 6 of them in the next 2 weeks based on the following estimates.
Story |
Points |
A |
3 |
B |
5 |
C |
1 |
D |
5 |
E |
2 |
F |
1 |
Total |
17 |
At the end of 2 weeks stories A-E are complete and F is started, but not complete. This teams velocity is 16 point per iteration, or about 32 points per month. Note there is no credit for partially done work. The next iteration the team estimates stories until they have stories that add up to 16 points. At the end of the iteration they measure what was actually completed and repeat until the project is done.
Velocities cannot be compared across teams because velocity is derived from estimates created by the team and since no team estimates the same way it is impossible to compare them.
Velocity is also not a productivity metric. Wanting to see the velocity have a constant increase is like asking to increase the speed of light. Velocities do vary over time due to various factors (like the fact that software is complex), but tend to stabilize if the work and personnel are not fluctuating too much.
What is Throughput
Throughput is not commonly used in software development, but is becoming more prevalent with the introduction of lean concepts. Throughput is most common when using a kanban scheduling board (http://blogs.consultantsguild.com/index.php/wayne/2008/02/01/no-more-iterations) to help manage the delivery of stories.
Throughput is the number of things that can be done in a given period of time.
A simple example of calculating throughput:
The team pulls the highest priority item off the backlog and works on it until they are done. They note when they started the story and when they finished it. They do this over and over until the project is over. Every month someone summarized the information about the stories that were completed.
Story |
Started |
Competed |
Duration |
Jan 1 |
Jan 4 |
3 |
|
B |
Jan 4 |
Jan 12 |
8 |
C |
Jan 12 |
Jan 13 |
1 |
D |
Jan 13 |
Jan 25 |
12 |
E |
Jan 25 |
Feb 3 |
9 |
This team completed 4 stories in January so their throughput
is 4 stories per month. Each story takes on average 6 days to complete with a
standard deviation of about 5 days. So 90% of stories are completed in 6 days
+/- 5 days. With additional data the standard deviation should tighten up
unless you have large variance in story size on a regular basis. Even though story E was started in January we don't count it because it was not completed in January. It will go into February's stats.
Since throughput relies on actual start and finish times we can derive a predictive measure for forecasting without any estimating.
Note that duration ignores the fact that some days are weekends.
Like velocity throughput is a team specific number and cannot be compared across teams.
Challenges with Velocity
Velocity is based on an abstract unit such as Story Points (http://en.wikipedia.org/wiki/Story_points) that are not always easy to explain to stakeholders (or even the team sometimes). Stakeholders often want to know how many days a story point represents. Since story points are relative to each other there isn't a direct mapping, although many team do grudgingly come up with an equivalence. To get around this some teams estimate in ideal or engineering hours. Unfortunately the same questions get asked. "How do I convert your funny agile units into days?" See also http://www.think-box.co.uk/blog/2006/02/ideal-time-vs-story-points.html
Velocity also requires the team to spend time estimating the stories. I'm not sure I ever met a developer who enjoyed estimating and even with planning poker (http://en.wikipedia.org/wiki/Planning_poker) most team member do what they can to get out of the estimating meeting yielding less than useful results. One team I know of estimated everything as "?" once they got tired.
As in all estimation the results are only as good as the information at hand. When you are estimating something you've never done before the accuracy can be all over the place.
Challenges with Throughput
The big knock against throughput is that it requires you to have relatively similar size stories in your backlog. This is true to a point. If your stories are not of a similar size your standard deviation will be larger leading to a larger range in your completion date predictions.
Which to Use?
In my context (stable teams working on product lines) I prefer the kanban/throughput combination. We don't have the dreaded planning meeting and we are still able to tell our stakeholders how many stories they should plan on having in the next release.
If you are currently using velocity it is very little overhead to start tracking throughput as a way to double check what your velocity metric is telling you.