<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mike Cohn&#039;s Blog - Succeeding With Agile® &#187; velocity</title>
	<atom:link href="http://blog.mountaingoatsoftware.com/tag/velocity/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.mountaingoatsoftware.com</link>
	<description>Succeeding With Agile®</description>
	<lastBuildDate>Mon, 06 Feb 2012 18:11:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Simulating a Project by Resampling Velocity</title>
		<link>http://blog.mountaingoatsoftware.com/simulating-a-project-by-resampling-velocity</link>
		<comments>http://blog.mountaingoatsoftware.com/simulating-a-project-by-resampling-velocity#comments</comments>
		<pubDate>Sun, 25 Sep 2011 17:42:38 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Agile Planning]]></category>
		<category><![CDATA[metrics]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=1154</guid>
		<description><![CDATA[I normally write about a new agile project management technique only after I’ve used it for a couple of years and found it successful in a couple of different contexts. In this post I want to share such a technique. It’s a statistical technique called “resampling” that I’ve become quite fond of for making predictions [...]]]></description>
			<content:encoded><![CDATA[<p>I normally write about a new agile project management technique only after I’ve used it for a couple of years and found it successful in a couple of different contexts. In this post I want to share such a technique. It’s a statistical technique called “resampling” that I’ve become quite fond of for making predictions about future velocity, a method for measuring the rate at which agile teams consistently deliver value.</p>
<p>Resampling is based on the idea that things we’ll observe in the future will be similar to the things we’ve observed in the past. In the examples below we’re saying the velocities a project team will see in the future will be similar to ones that occurred in the past. Resampling works by imagining we’ve put all old sample velocities into a bag. If we have past velocities of 18, 17, 18, 19, 22, and 20 imagine each of those written on separate slips of paper and dropped into a bag. Note we’ll have two slips of paper with “18? because our Agile or Scrum team here had that velocity twice.</p>
<p>To predict future velocity we reach into the bag and pull out one piece of paper. What’s written on it is our prediction of velocity in the first sprint. To predict the team’s velocity in the second sprint, we reach into the bag and pull out another slip of paper. But, before we do that, it’s important we put the first slip of paper back into the bag. This is called “resampling with replacement.” We want to replace because for any given sprint the team is equally likely to get any of their past velocities. </p>
<p>Suppose we’re trying to predict how much work a given team can complete in a coming ten-sprint period. We would resample (with replacement) ten times. Each time we’d note the number we pulled from the bag. After we pull the tenth slip, we would sum the ten values we pulled and that is one possible result for this team over the coming ten-sprint period. </p>
<p>It’s quite possible we could get lucky and pull the highest-valued slip (22) each of ten times. Or we could pull the worst-case slip, 17, each of the ten times. But these are unlikely. If we could in some way in the real world run the project hundreds or thousands of times, we would occasionally see the team repeat their highest (or lowest) velocity every sprint but it wouldn’t happen very often.</p>
<p>Since we can’t run the project hundreds or thousands of times in the real world, we want to simulate doing so on a computer. We can then learn a great deal from the results. For example, suppose we are ready to start a project that will have ten sprints. It would be helpful to know things like:</p>
<ul>
<li>what is the average amount of work completed over those ten sprints?</li>
<li>what percentage of the time does the team finish more than say 200 points of work?</li>
</ul>
<p>It’s actually quite straightforward to answer these questions using simulation and resampling. Let’s see how it’s done. You can follow along with <a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/ResamplingVelocity.xls" title="resampling spreadsheet" target="_blank">this velocity resampling spreadsheet</a>. In the figure below (from that spreadsheet), cells B3 through B28 show historical velocity.</p>
<p><a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/historical-velocity-data.jpg"><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/historical-velocity-data.jpg" alt="Historical velocity data" title="historical-velocity-data" width="161" height="436" class="alignleft size-full wp-image-1159" /></a></p>
<p>&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />
Because our hypothetical project here involves ten sprints, cells D3 through E12 show the sprint numbers (1-10) and a resampled velocity for each. </p>
<p><a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/resampled-velocities.jpg"><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/resampled-velocities.jpg" alt="Ten resampled velocities" title="resampled-velocities" width="171" height="199" class="alignleft size-full wp-image-1161" /></a></p>
<p>&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;</p>
<p>Selecting a resampled velocity is simply a matter of randomly selecting any velocity from the B3:B28 range (our 26 historical velocities). This is done with the formula:<br />
=SMALL($B$3:$B$28,INT(COUNT($B$3:$B$28)*RAND())+1)<br />
which generates a random number between 1 and 26 and then uses the SMALL method to select that item from the list of values. (Note: SMALL selects the nth smallest item from the list of values; we could have used LARGE instead. The goal is just to randomly select a value from the list of velocity in B3:B28.)</p>
<p>Because we&#8217;re using the RAND() function in E3:E12, any time you change any cell in the spreadsheet, the values in E3:E12 change. This is a desirable side effect of using RAND().</p>
<p>E3:E12 simulates one run of ten sprints. We&#8217;d like, though, to simulate 100, 200 or even 1000 runs of the project (each with ten sprints in it). To do this is slightly tricky because we&#8217;re going to use something a lot of people aren&#8217;t familiar with in Excel: a Data Table. In our spreadsheet, the Data Table is in G3 through H202, a portion of which is shown below.</p>
<p><a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/first-13-simulations.jpg"><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/first-13-simulations.jpg" alt="The first 13 simulations" title="first-13-simulations" width="162" height="244" class="alignleft size-full wp-image-1171" /></a></p>
<p>&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp; <br />&nbsp;<br />&nbsp;</p>
<p>The G column shows a sprint number, the H column shows a sum of ten velocities, representing one ten-sprint project in our case. In the example, in the figure at left you can see that the first simulation of the project yielded a total of 230 points done in the ten sprints of the project. In the next row (cell H4, but labeled &#8217;2&#8242; in column G of the spreadsheet), the team got a much higher simulated velocity, 264. In the spreadsheet, I repeated this 200 times but you can do more or less as you prefer.</p>
<p>For brief instructions on how to create a data table, see the end of this post. For more complete instructions, see the Excel documentation.</p>
<p>Armed with 200 simulations of the ten sprints of the project (or ideally even more), we can now answer the question we started with, which is, How much can this team finish in ten sprints? Cells E17 and E18 of the spreadsheet show the average total work finished from the 200 simulations and the standard deviation around that work. </p>
<p><a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/averages.jpg"><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/averages.jpg" alt="" title="averages" width="176" height="48" class="alignleft size-medium wp-image-1181" /></a></p>
<p>&nbsp;<br />&nbsp;<br />&nbsp;</p>
<p>In this case the resampled average is 240 points (in ten sprints) with a standard deviation of 12. This means our single best guess (50/50) of how much the team can complete is 240 points. Knowing that 95% of the time the value will be within two standard deviations we know that there is a 95% chance of finishing between 240 +/- (2*12), which is 216 to 264 points.</p>
<p>If my boss wants a guarantee, I might say, &#8220;We can pretty much guarantee 216.&#8221; Technically I know the math doesn&#8217;t support the guarantee. There&#8217;s about a 2.5% chance we fall below that. However, humans are involved and just about any good team I&#8217;ve been on would be happy to kick in some extra effort sometime over the ten sprints to finish the 216 we committed to rather finishing with 210 if that 2.5% chance does occur. </p>
<p>Another interesting issue we can address with this type of simulation is the boss who says, &#8220;I need you to get 250 points done in the next 10 sprints.&#8221; You can see how likely this is to occur by scanning down the resampled values (the H column) and seeing how often the value there equals or exceeds the value the boss, client or customer wants. The spreadsheet is set to do this automatically as shown in this figure:</p>
<p><a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/meeting-the-boss-expectations.jpg"><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/meeting-the-boss-expectations.jpg" alt="seeing if the team can meet expectations" title="meeting-the-boss-expectations" width="422" height="68" class="alignleft size-full wp-image-1183" /></a></p>
<p>&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;</p>
<p>Type in the total number of points desired in L20, the spreadsheet will see how many times that number or higher occurred in the simulations (L21) and then report it as a percentage (L22). In this example, if the boss wants 250 points in 10 sprints, we can reply that while the team will try to achieve that, historical data shows that there is only a 20% chance of that occurring. </p>
<p>Hopefully you&#8217;ve found these examples of working with resampling to simulate projects helpful. There are many more things that can be done using this technique. I&#8217;ll provide additional examples in future posts.</p>
<p>You can download the <a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/ResamplingVelocity.xls" title="resampling spreadsheet">velocity resampling spreadsheet</a> used in this examples.</p>
<h3>Note on Creating a Table Table</h3>
<p>To create a Data Table, in cell H2 (the cell above where you want to put the simulation results), enter the formula you want to calculate as a result of each simulation. Because we&#8217;re interested in the sum of their ten sprints worth of velocity, I&#8217;ve entered:<br />
=SUM($E$3:$E$12)</p>
<p>Next, if you&#8217;re interested fill the sprint cells (the G column) with numbers from 1 to 200. Then highlight cells G2:through 202 (assuming you want to do 200 simulations as I&#8217;ve done here). Notice you&#8217;re highlighting starting one row above our simulations through the last row of simulations. Now create the data table. In my version of Excel (Mac 2011), I do this by selecting Data | What If | Data Tables. You&#8217;ll get a little dialog box asking for the row or column input cell. Move the cursor to Column Input cell and select G2. Close the dialog and you&#8217;ll see the 200 rows fill with simulation results.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/simulating-a-project-by-resampling-velocity/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Should Story Points Be Assigned to A Bug-Fixing Story</title>
		<link>http://blog.mountaingoatsoftware.com/should-story-points-be-assigned-to-a-bug-fixing-story</link>
		<comments>http://blog.mountaingoatsoftware.com/should-story-points-be-assigned-to-a-bug-fixing-story#comments</comments>
		<pubDate>Sun, 14 Nov 2010 02:22:41 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Agile Planning]]></category>
		<category><![CDATA[Agile Estimating]]></category>
		<category><![CDATA[defect management]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=908</guid>
		<description><![CDATA[When migrating a product from a traditional approach to an agile one, teams commonly bring along a large database of bugs. These are the result of an inadequate focus on continuously high quality. Shortly into their agile initiative, many teams (and their product owners) decide to aggressively work through the bug backlog. A common approach [...]]]></description>
			<content:encoded><![CDATA[<p>When migrating a product from a traditional approach to an agile one, teams commonly bring along a large database of bugs. These are the result of an inadequate focus on continuously high quality. Shortly into their agile initiative, many teams (and their product owners) decide to aggressively work through the bug backlog. A common approach for doing so is to plan to fix x bugs per sprint or spend y hours on bugs per sprint. Sometimes teams write a user story for this activity such as &#8220;As a user, I want at least 15 bugs fixed&#8221; or &#8220;As a user, I want you to spend about 50 hours this sprint fixing bugs so that the application becomes gradually more high quality.&#8221; Even a team that doesn&#8217;t explicitly write such a user story will usually include a row on its taskboard to make the bug fixing visible and to track it.</p>
<p>In these situations a common question is whether the team should assign some number of story points to the work of fixing these legacy bugs.</p>
<p>If the team does not assign a story point value to this work, velocity will show the amount of &#8220;forward progress&#8221; the team is making each sprint. This has the advantage of making visible that the team is going more slowly through the work than it could if these legacy bugs had been fixed when originally found.</p>
<p>On the other hand, if the team does assign points to the bug-fixing effort, velocity comes to represent the team&#8217;s true capacity to accomplish work. </p>
<p>My usual recommendation is to assign points to the bug fixing. This really achieves the best of both worlds. We are able to see how much work the team is really able to accomplish but also able to look at the historical data and see how much went into the bug-fixing story each sprint. Knowing this can be helpful to a team and its product owner. For example, imagine a situation in which the product owner is considering suspending bug fixing for the next six sprints in order to add a valuable different feature into a release. If we know that the team&#8217;s full historical average velocity was 25 but that 5 points went to bug fixing each sprint, we know that suspending bug fixing for the next six sprints will result in 30 (6*5) more points of new functionality. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/should-story-points-be-assigned-to-a-bug-fixing-story/feed</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Why There Should Not Be a &#8220;Release Backlog&#8221;</title>
		<link>http://blog.mountaingoatsoftware.com/why-there-should-not-be-a-release-backlog</link>
		<comments>http://blog.mountaingoatsoftware.com/why-there-should-not-be-a-release-backlog#comments</comments>
		<pubDate>Sun, 08 Feb 2009 04:40:50 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Agile Planning]]></category>
		<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[agile release planning]]></category>
		<category><![CDATA[product backlog]]></category>
		<category><![CDATA[sprint backlog]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=97</guid>
		<description><![CDATA[A rejection of the idea that agile teams should use a Release Backlog in addition to the already generally accepted Product and Sprint (or Iteration) Backlogs.]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t heard the term &#8220;release backlog&#8221; in many months, but it&#8217;s come up in three conversations over the past week. So, I want to share my thoughts on whether a team using an <a href="http://www.mountaingoatsoftware.com/topics/agile-project-management">Agile project management</a> approach should have a Release Backlog in addition to the conventional Product and Sprint (or Iteration) Backlogs.</p>
<p>First, let&#8217;s clarify what people mean when they refer to a &#8220;release backlog.&#8221; A release backlog is a subset of the product backlog that is planned to be delivered in the coming release, typically a three- to six-month horizon. A release backlog would presumably contain the same type of items as on a product backlog. My preference for this, of course, would be user stories. So, at the start of some release planning horizon, a product owner with help from the team and other stakeholders would example the product backlog, select some amount of high priority work and move those items to the release backlog. Later, in sprint (iteration) planning, the team would examine the release product and select some amount of work to do. (Notice how this already goes against existing agile literature that says the team selects top priority items for the sprint <em>from the product backlog?</em>)</p>
<p>I am opposed to the use of a release backlog for a couple of reasons:</p>
<p><strong>First,</strong> in all projects that are not being done as fixed-scope contracts (and, arguably, even then) we don&#8217;t know exactly what user stories or features will be delivered in a release. To say that there is a release backlog may not imply a guarantee that all features on it are delivered. However, it does create additional work as items are moved off back and forth between the product and release backlogs. This will happen as the team&#8217;s velocity changes (even by small amounts) from sprint to sprint. If the release backlog is to show what a team will deliver in a release, it should contain an amount of work equal to the number of story points (or ideal days) times the number of remaining sprints. If you have an average velocity of 20 and 6 sprints left, the release backlog should contain 120 points worth of work. Suppose the team finishes 24 points of work in a sprint. The backlog is now down to 96 points (120-24) but should contain 100 (5 sprints left x an average velocity of 20). Things get even more difficult if that good velocity of 24 increases the team&#8217;s average velocity to 21. In that case the release backlog should contain 5&#215;21=105 points of work; we need to move 9 points of work from the product backlog to the sprint backlog. If there&#8217;s a release backlog, this moving of items back and forth from product backlog to release backlog will happen every sprint.</p>
<p>Second, introducing a release backlog creates additional confusion. We&#8217;ve already overloaded the word &#8220;backlog&#8221; with &#8220;product backlog&#8221; and &#8220;sprint backlog.&#8221; Why confuse things further with a third type of backlog unless there is an immensely compelling reason to do so?</p>
<p>Third, introducing the concept of a Release Backlog actually makes it harder for product owners to do one of the most important things they should be doing&#8211;looking at the features or user stories that just miss the cut of being in a release. When I look at a product backlog and count down the number of story points that I anticipate will be in the release, the most interesting thing to me is not necessarily the set of user stories that will make it into the release. I&#8217;m often just as interested in the next few user stories below that cut-off point. That is, I want to know what user stories won&#8217;t quite make it into the release. After all, we say that one of the benefits of agile (on some, not all, projects) is the ability to decide later if we should release a few sprints early (if a lot has been done), on the planned date, or perhaps a sprint or two late if we want to add more functionality before a release. This is made more difficult with a Release Backlog because a product owner now needs to examine both a Product Backlog and a Release Backlog to make these decisions.</p>
<p>So, what do I propose instead?</p>
<p>I advocate that all teams track their velocities. This leads to a graph like this:</p>
<img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/velocityaverages.jpg" alt="Velocity as graphed over the last nine sprints." title="velocityaverages" width="450" height="277" class="size-full wp-image-103" />
<p>This graph shows a team calculating three average velocities:</p>
<ol>
<li>Long term average, defined as the mean of the last eight sprints</li>
<li>Worst case average, defined as the mean of the worst three chosen among the last eight sprints</li>
<li>Best case average, defined as the mean of the best three chosen among the last eight sprints</li>
</ol>
<p>You can choose your own ways of calculating long-term, best-case, and worst-case average velocities. These are just the ones I like. We use these average velocities as shown in this figure:</p>
<img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/predictingwherewefinish.jpg" alt="Using velocity to predict how much will be done by a given date." title="predictingwherewefinish" width="450" height="338" class="size-full wp-image-102" />
<p>In this figure, the product backlog is shown on the left as a stack of index cards. We use the three average velocities multiplied by the number of remaining sprints to draw arrows pointing into the product backlog. The range created by these arrows indicates the likely amount of work finished by the planned date. Our release plan is the work defined by the arrows. Rather than a Release Backlog as a new work product or artifact, my equivalent of a release backlog is the product backlog and these arrows pointing into it.</p>
<p>As you can imagine, predicting velocity as a range is much more likely to be accurate than using a single point estimate (&#8220;Our velocity is 31.&#8221;) as has been implied by everyone I&#8217;ve heard talk about a Release Backlog. Additionally, looking at figures like these should make it apparent that the amount of work expected to be delivered in a release will change from sprint to sprint. Pointing arrows into a product backlog is much easier and more helpful than creating a new work product, the Release Backlog.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/why-there-should-not-be-a-release-backlog/feed</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>Predicting Velocity When Teams Change Frequently</title>
		<link>http://blog.mountaingoatsoftware.com/predicting-velocity-when-team-membership-or-size-changes-frequently</link>
		<comments>http://blog.mountaingoatsoftware.com/predicting-velocity-when-team-membership-or-size-changes-frequently#comments</comments>
		<pubDate>Mon, 11 Aug 2008 03:28:57 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Agile Planning]]></category>
		<category><![CDATA[agile release planning]]></category>
		<category><![CDATA[metrics]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=50</guid>
		<description><![CDATA[As a measure of the amount of work completed in an iteration, velocity works extremely well when teams are relatively stable. If the same people stay on a team, it is reasonable to assume that the amount of work they complete will be relatively constant from iteration to iteration. This allows us to plan using [...]]]></description>
			<content:encoded><![CDATA[<p>As a measure of the amount of work completed in an iteration, velocity works extremely well when teams are relatively stable. If the same people stay on a team, it is reasonable to assume that the amount of work they complete will be relatively constant from iteration to iteration. This allows us to plan using inferences such as &#8220;This team has an average velocity of 25 points per iteration over the last year and they have time for 8 iterations in this new project; therefore they will complete around 200 points in those 8 iterations.&#8221;</p>
<p>But what do we do when we are <a href="http://www.mountaingoatsoftware.com/topics/agile-project-management">managing an agile project</a> where team membership or size changes frequently?</p>
<p>To answer this question most effectively, you should collect data on how teams of different sizes have performed over time in your organization. When I was a VP of Development at a couple of agile organizations, I used to collect data on velocity and team size changes in a simple spreadsheet similar to this:</p>
<table border="1">
<tr>
<th>Initial Team Size</th>
<th>New Team Size</th>
<th>Median of Last 5</th>
<th>Iteration +1</th>
<th>Iteration +2</th>
<th>Iteration +3</th>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>25</td>
<td>20</td>
<td>24</td>
<td>28</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>16</td>
<td>16</td>
<td>15</td>
<td>19</td>
</tr>
<tr>
<td>8</td>
<td>6</td>
<td>50</td>
<td>40</td>
<td>40</td>
<td>42</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>12</td>
<td>10</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
<p>The first column represented the size of the team before a change occurred. The next column represented the new size of the team (up or down). The third column was what I considered to be a reasonable &#8220;long term average&#8221; velocity for the team at its initial size. Because team&#8217;s could change frequently (by a person or two) I settled on using the median value of the team&#8217;s last five iterations. The tradeoff in using a longer measure (median of 15 iterations perhaps) is that you&#8217;d have fewer observations. The next columns represent the actual velocities of teams over the next three iterations. Notice that for the last team values are not shown for the last two iterations. This is usually because the team size changed again. If you have a significant number of teams, the rows in this type of spreadsheet will accumulate quite quickly.</p>
<p>In some of the organizations where I used this approach we did not have a standardized definition of story point (or we&#8217;re using ideal days, which were not as normalized as you might think). So all analysis was done on a percentage basis. What I wanted to know was &#8220;What is the average impact of adding a person to a seven-person team?&#8221; I would have loved the answer to be something like &#8220;Velocity goes up 15%.&#8221; Unfortunately, it wasn&#8217;t that straightforward because velocity often dipped for a couple of iterations before going up. By tracking data I found that usually by the third iteration a team had settled in on a new velocity, which is why my spreadsheet above only tracks through Iteration+3. By all means, track more and see what you find. (But keep in mind that the data will get sparse as team sizes will change again.)</p>
<p>Another tab in my spreadsheet, expressed all the data in percentage terms. The first two rows </p>
<table border="1">
<tr>
<th>Initial Team Size</th>
<th>New Team Size</th>
<th>Iteration +1</th>
<th>Iteration +2</th>
<th>Iteration +3</th>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>-20%</td>
<td>-4%</td>
<td>+12%</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>0%</td>
<td>-6%</td>
<td>+15%</td>
</tr>
</table>
<p>(Example: Iteration +1 in the first row is -20% based on the team dropping its velocity from 25 to 20.) </p>
<p>I then simply averaged these percentages for each team size change to get results like:</p>
<table border="1">
<tr>
<th>Initial Team Size</th>
<th>New Team Size</th>
<th>% Change in Iteration +1</th>
<th>% Change in Iteration +2</th>
<th>% Change in Iteration +3</th>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>-10%</td>
<td>-5%</td>
<td>+15%</td>
</tr>
</table>
<p>This allowed me to answer all sorts of questions, including:</p>
<ul>
<li>What will this team&#8217;s velocity be if we add two people?</li>
<li>How soon could we get this project if we added a person to each team?</li>
<li>If I want all those projects done by the end of the year, how many people would we need to add?</li>
<li>What would be the impact of not approving the new employees in the budget?</li>
<li>What would be the impact of a 15% layoff?</li>
</ul>
<p>There are of course many flaws with this approach. Adding Susan to the project is very different than &#8220;adding an unknown person&#8221; to the project. Still, if I have the data on averages across the board in our organization I can make assumptions about specifically adding Susan (if I want, there can be many more risks in doing this). Notice that the approach does not attempt to take into consideration who it was that was added or even what skillset the person had. You could collect such data if you wanted. As anal about collecting all sorts of data like this as I am when I have access to it, I knew though that collecting that type of data would have made this just hard enough that I wouldn&#8217;t have done it regularly.</p>
<p>I did collect a few other bits of data that I left out of the initial table (so as to have more horizontal room for the data of real interest). For example, I collected data such as iteration length and the name of the team&#8217;s ScrumMaster (the latter was in case I had questions a few weeks later).</p>
<p>The approach described here was just simple enough that I could get empirical evidence of the impact of team size changes. This was invaluable when discussing headcount changes with product owners and the CEO.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/predicting-velocity-when-team-membership-or-size-changes-frequently/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Is It a Good Idea to Establish a Common Baseline for Story Points?</title>
		<link>http://blog.mountaingoatsoftware.com/is-it-a-good-idea-to-establish-a-common-baseline-for-story-points</link>
		<comments>http://blog.mountaingoatsoftware.com/is-it-a-good-idea-to-establish-a-common-baseline-for-story-points#comments</comments>
		<pubDate>Sat, 09 Aug 2008 14:52:48 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Agile Estimating]]></category>
		<category><![CDATA[Scaling Scrum/Agile]]></category>
		<category><![CDATA[agile estimation]]></category>
		<category><![CDATA[large projects]]></category>
		<category><![CDATA[metrics]]></category>
		<category><![CDATA[story points]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=44</guid>
		<description><![CDATA[In my previous post, I wrote about how to establish a common baseline for story points across relatively large teams (a few hundred developers). In this post I want to consider whether doing so is a good idea. The need for a common baseline to story points usually arises from the reasonable desire to know [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://blog.mountaingoatsoftware.com/?p=43">previous post</a>, I wrote about how to establish a common baseline for story points across relatively large teams (a few hundred developers). In this post I want to consider whether doing so is a good idea.</p>
<p>The need for a common baseline to story points usually arises from the reasonable desire to know how big the entire project is. To know that, we must know the size of the work to be done by each team. Unfortunately, along with this goal comes the ability to compare teams based on their velocities. Since many managers are constantly looking for ways to compare team and individual performance it is not surprising that they begin to make such velocity comparisons. Almost all such comparisons are disruptive to performance of the combined, overall group or department.</p>
<p>A chart such as the one that follows can show a lot of interesting information. </p>
<p><a href='http://blog.mountaingoatsoftware.com/wp-content/uploads/velocitycomparisonbeforelarge.jpg'><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/velocitycomparisonbeforesmall1.jpg" alt="Velocities before teams told they would be compared" title="Velocities before teams told they would be compared" width="450" height="273" class="aligncenter size-full wp-image-47" /></a></p>
<p>However, this chart can be very dangerous because of how teams will assume the data is being interpreted. Shown a chart like this a common team response will be to feel that they need to faster than the other teams. Achieving this additional speed may come from working in a more focused manner (a good thing), but it may come instead from sacrificing quality, leaving important refactorings undone, or a variety of other not-so-good manners.</p>
<p>Some teams may respond to the pressure for their abstract measure of velocity to increase by gradually inflating the number of story points assigned to a story. This can happen in subtle and not particularly nefarious ways that can accumulate into large problems. Consider, for example, a team that is arguing over whether a particular story should be estimated at 5 or 8 points. If the team is under pressure (real or just perceived) to increase velocity they will be more likely to assign the 8. The next story the team considers is slightly larger. They compare it to the newly assigned 8 and decide to give it a 13. Without pressure to improve velocity, this same team may have given the first item a 5 and the second (slightly larger still) item an 8. In this one scenario the team has inflated their points from 5+8=13 to 8+13=21, or more than 50%. Story point inflation such as this tends to happen very quickly if it happens at all.</p>
<p>Consider what happened in the next few iterations for the four teams shown in the previous figure.</p>
<p><a href='http://blog.mountaingoatsoftware.com/wp-content/uploads/velocitycomparisonafterlarge.jpg'><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/velocitycomparisonaftersmall.jpg" alt="Four teams and their velocities" title="Comparison of four team velocities over time" width="450" height="273" class="aligncenter size-full wp-image-48" /></a></p>
<p>Not surprisingly, someone in the Project Management Office distributed the chart showing the similarities over the first three iterations. Two of the teams reacted by instantly inflating their story points. After seeing that, the yellow team followed suit. The green team is either extremely virtuous or they haven&#8217;t noticed the charts yet. </p>
<p>So, should you establish a common baseline? Yes, if there are advantages to doing so on your project. If you do, however, you need to make sure you go out of your way to create safety around that baseline for the teams. Stress that this isn&#8217;t being done as a way to compare teams and that you (and your bosses know) that there are many factors that influence velocity, not just &#8220;how good&#8221; a team.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/is-it-a-good-idea-to-establish-a-common-baseline-for-story-points/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Establishing a Common Baseline for Story Points</title>
		<link>http://blog.mountaingoatsoftware.com/establishing-a-common-baseline-for-story-points</link>
		<comments>http://blog.mountaingoatsoftware.com/establishing-a-common-baseline-for-story-points#comments</comments>
		<pubDate>Wed, 06 Aug 2008 12:13:10 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Agile Estimating]]></category>
		<category><![CDATA[Scaling Scrum/Agile]]></category>
		<category><![CDATA[agile estimation]]></category>
		<category><![CDATA[large projects]]></category>
		<category><![CDATA[story points]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=43</guid>
		<description><![CDATA[A common criticism of story points is that the meaning of a story point will differ among teams. In this post I want to describe how can we establish a common definition of a story point across multiple teams within an organization. The best way I&#8217;ve found to do this is to bring a broad [...]]]></description>
			<content:encoded><![CDATA[<p>A common criticism of story points is that the meaning of a story point will differ among teams. In this post I want to describe how can we establish a common definition of a story point across multiple teams within an organization.</p>
<p>The best way I&#8217;ve found to do this is to bring a broad group of individuals representing various teams together and have them estimate a dozen or so product backlog items (ideally in the form of user stories in my opinion). Not each estimator needs to understand every item but most people should understand most items. The items being estimated do not need to be new items; some could be from a project finished recently that many estimators remember or worked on. Some items could be artificial; perhaps the team is asked to estimate, &#8220;a typical transaction activity report.&#8221; If that meant something to most estimators, it would be a good candidate item.</p>
<p>I&#8217;ve done with this 46 people in a large conference room&#8211;44 estimators plus me and a coach from my client who wanted to watch so he could moderate such a meeting the next time one would be needed. The 44 estimators represented 22 teams; two estimators per team were in the meeting. If you&#8217;ve seen or used the <a href="http://www.mountaingoatsoftware.com/products/cards">Mountain Goat planning poker cards</a>, you&#8217;ll have noticed that they feature a very large number in the middle (plus the number in a smaller font in the corners). We could have done something cute like put eight little goats on the eight card. We put the very large number there deliberately, though: We wanted it to be visible across a potentially large conference room. </p>
<p>You can probably imagine how difficult it might be to gain consensus among 46 people playing planning poker. While it will not take proportionately longer to derive estimates, it does take quite awhile with that many people. I think it took us about two hours to estimate twelve items. </p>
<p>But when that meeting was over, each pair of estimators went back to their teams with twelve estimates. Those estimates could then be used as the basis for estimating future work. As each team estimated new product backlog items they would do so by comparing them to the initial 12 plus any estimates that had been produced since (by them or any other team).</p>
<p>I&#8217;ll blog next about when it may or may not be a good idea to establish such a common baseline.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/establishing-a-common-baseline-for-story-points/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
	</channel>
</rss>

