<?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; Sprint Artifacts</title>
	<atom:link href="http://blog.mountaingoatsoftware.com/category/artifacts/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>Stories, Epics and Themes</title>
		<link>http://blog.mountaingoatsoftware.com/stories-epics-and-themes</link>
		<comments>http://blog.mountaingoatsoftware.com/stories-epics-and-themes#comments</comments>
		<pubDate>Mon, 24 Oct 2011 15:00:17 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=1199</guid>
		<description><![CDATA[I&#8217;ve been getting more and more emails lately from people confused about the difference between &#8220;user story&#8221;, &#8220;epic&#8221; and &#8220;theme.&#8221; So I thought his month we&#8217;d return and cover some basic&#8211;but very helpful&#8211;territory by explaining those terms. First, the terms don&#8217;t matter that much. These are not terms with important specific meanings like &#8220;pointer&#8221; to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been getting more and more emails lately from people confused about the difference between &#8220;user story&#8221;, &#8220;epic&#8221; and &#8220;theme.&#8221; So I thought his month we&#8217;d return and cover some basic&#8211;but very helpful&#8211;territory by explaining those terms.</p>
<p>First, the terms don&#8217;t matter that much. These are not terms with important specific meanings like &#8220;pointer&#8221; to a programmer or &#8220;collateralized debt obligation&#8221; to whomever it is that&#8217;s important. Story, epic and theme are merely terms we use to help simplify some discussions teams have. The terms do have standard meanings that date back to some of the earliest Extreme Programming (XP) teams. And it&#8217;s nice to use terms in industry-standard ways. But, if these terms didn&#8217;t exist, you&#8217;d make up your own.</p>
<p>So let&#8217;s see what each means.</p>
<p>A user story is simply something a user wants. Stories are more than just text written on an index card but for our purposes here, just think of user story as a bit of text saying something like &#8220;Paginate the monthly sales report&#8221; or &#8220;Change tax calculations on invoices.&#8221; Many teams have learned the benefits of writing user stories in the form of &#8220;As a <type of user> I <want/can/need/etc. some goal> so that <some reason>.&#8221; But it is not necessary that a user story be written that way. The <a href="http://blog.mountaingoatsoftware.com/advantages-of-the-as-a-user-i-want-user-story-template">advantages of that format</a> are covered elsewhere on this site.</p>
<p>An epic is a large user story. There&#8217;s no magic threshold at which we call a particular story an epic. It just means &#8220;big user story.&#8221; I like to think of this in relation to movies. If I tell you a particular movie was an &#8220;action-adventure movie&#8221; that tells you something about the movie. There&#8217;s probably some car chases, probably some shooting, and so on. It tells you this even though there is no universal definition that we&#8217;ve agreed to follow and that an action-adventure movie must contain at least 3 car chases, at least 45 bullets must be shot, and &#8230;</p>
<p>So, &#8220;epic&#8221; is just a label we apply to a large story. Calling a story an epic can sometimes convey additional meaning. Suppose you ask me if I had time yesterday to write the user stories about the monthly reporting part of the system. &#8220;Yes,&#8221; I reply, &#8220;but they are mostly epics.&#8221; That tells you that while I did write them, I didn&#8217;t get the chance to break most of them down into stories that are probably small enough to implement directly.</p>
<p>Finally, &#8220;theme&#8221; is a collection of stories. We could put a rubber band around that group of stories I wrote about monthly reporting and we&#8217;d call that a &#8220;theme.&#8221; Sometimes it&#8217;s helpful to think about a group of stories so we have a term for that. Sticking with the movie analogy above, in my DVD rack I have filed the James Bond movies together. They are a theme or grouping.</p>
<p>Hopefully you&#8217;ve found this short explanation helpful. I look forward to your thoughts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/stories-epics-and-themes/feed</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>A Sample Format for a Spreadsheet-Based Product Backlog</title>
		<link>http://blog.mountaingoatsoftware.com/a-sample-format-for-a-spreadsheet-based-product-backlog</link>
		<comments>http://blog.mountaingoatsoftware.com/a-sample-format-for-a-spreadsheet-based-product-backlog#comments</comments>
		<pubDate>Fri, 01 Jul 2011 16:05:14 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[product backlog]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=1110</guid>
		<description><![CDATA[I want to show a real easy way to put user stories in a spreadsheet-based product backlog. I wrote this after seeing someone tweet a screen capture of a product backlog I made 9 years ago and thought to myself, &#8220;Yikes, that&#8217;s out of date for how I do it today&#8230;&#8221; As you probably know [...]]]></description>
			<content:encoded><![CDATA[<p>I want to show a real easy way to put user stories in a spreadsheet-based product backlog. I wrote this after seeing someone tweet a screen capture of a product backlog I made 9 years ago and thought to myself, &#8220;Yikes, that&#8217;s out of date for how I do it today&#8230;&#8221;</p>
<p>As you probably know I&#8217;m a big fan of writing the product backlog in the form of user stories and of writing user stories in the form, &#8220;As a <type of user>, I <want / can / am required to / etc> <some goal> so that <some reason>.&#8221;  An example being, &#8220;As a frequent flyer, I really want to be able to connect to the internet while flying so that I can update my blog while traveling rather than having to save this as a text file and updating my blog later.&#8221;  (Can you guess where I am while writing this?) </p>
<p>What I&#8217;ve found makes a user story in this format very easy to work with in a spreadsheet is to take the boilerplate parts and put them into column headings. So we&#8217;ll have column headings like &#8220;As a&#8221; and &#8220;I&#8221; and &#8220;so that&#8221;. The meat of each story is then clearly visible in each row. Additional columns can be added for things like a unique identifier, notes, status and such. In this example, I&#8217;ve also included a column for the theme or grouping of which the story is a part. You can see this in the screen capture below. You can click the image for a larger view. </p>
<p><a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/fullsize-product-backlog.jpg"><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/smaller-product-backlog.jpg" alt="the product backlog in Excel" title="smaller-product-backlog" width="600" height="323" class="aligncenter size-full wp-image-1111" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/a-sample-format-for-a-spreadsheet-based-product-backlog/feed</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>A New Artifact &#8211; The Long-Term Product Backlog</title>
		<link>http://blog.mountaingoatsoftware.com/a-new-artifact-the-long-term-product-backlog</link>
		<comments>http://blog.mountaingoatsoftware.com/a-new-artifact-the-long-term-product-backlog#comments</comments>
		<pubDate>Fri, 06 May 2011 08:15:24 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[product backlog]]></category>
		<category><![CDATA[product owner]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=1000</guid>
		<description><![CDATA[The weather turned nice about two weeks ago, which meant it was time for spring cleaning about the Cohn home, affectionately known as the Cohnderosa (which will only mean something if you&#8217;re old enough to remember &#8220;Bonanza&#8221;). While washing the windows around the outside of the house I had plenty of time to think about [...]]]></description>
			<content:encoded><![CDATA[<p>The weather turned nice about two weeks ago, which meant it was time for spring cleaning about the Cohn home, affectionately known as the Cohnderosa (which will only mean something if you&#8217;re old enough to remember &#8220;Bonanza&#8221;). While washing the windows around the outside of the house I had plenty of time to think about spring cleaning I&#8217;d also just helped a couple of clients with&#8211;we cleaned up their product backlogs.</p>
<p><a href="http://blog.mountaingoatsoftware.com/wp-content/uploads/waste-basket.jpg"><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/waste-basket.jpg" alt="The Long-Term Product Backlog" title="waste-basket" width="300" height="401" class="alignright size-full wp-image-1001" /></a></p>
<p>In order to clean up the product backlog, I want to introduce you to a new Scrum artifact&#8211;the Long-Term Product Backlog. The Long-Term Product Backlog is maintained by the product owner and is usually round, black and sits next to or under the product owner&#8217;s desk. Left unattended, a product backlog can become large and hard to work with. If your backlog has reached this point, take some time to do some spring cleaning&#8212;review the backlog and delete / throw away user stories that you can finally admit you&#8217;re never going to get to.</p>
<p>Some product owners or teams feel this is an admission of failure. It&#8217;s not. In most cases it&#8217;s an admission of success&#8211;we&#8217;re throwing away feature ideas that we once thought important because since writing them down we&#8217;ve discovered even more important features. So celebrate the fact that you&#8217;ve got newer, bigger, better feature ideas and delete the less valuable ones from your product backlog.</p>
<p>If permanently deleting such ideas is too big of a step, perhaps you really do want to introduce a new artifact into your process. Create a spreadsheet and paste the user stories there for safe keeping. Or print a report from your product backlog tool and file the report somewhere safe just in case. In my experience, though, you won&#8217;t miss them. And just like the bright new view through the windows of the Conderosa, you&#8217;ll be able to see the rest of your product backlog much more clearly.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/a-new-artifact-the-long-term-product-backlog/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Make the Product Backlog DEEP</title>
		<link>http://blog.mountaingoatsoftware.com/make-the-product-backlog-deep</link>
		<comments>http://blog.mountaingoatsoftware.com/make-the-product-backlog-deep#comments</comments>
		<pubDate>Mon, 14 Dec 2009 15:50:59 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[product backlog]]></category>
		<category><![CDATA[product owner]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=486</guid>
		<description><![CDATA[The product backlog should be DEEP: detailed appropriately, estimated, emergent, and prioritized.]]></description>
			<content:encoded><![CDATA[<p>Roman Pichler, author of <em><a href="http://www.mikecohnsignatureseries.com/books/agile-product-management">Agile Product Management with Scrum: Creating Products That Customers Love,</a></em> and I use the acronym DEEP to summarize key attributes of a good product backlog.</p>
<ul>
<li><strong>Detailed Appropriately.</strong> User stories on the product backlog that will be done soon need to be sufficiently well understood that they can be completed in the coming sprint. Stories that will not be developed for awhile should be described with less detail.</li>
<li><strong>Estimated.</strong> The product backlog is more than a list of all work to be done; it is also a useful planning tool. Because items further down the backlog are not as well understood (yet), the estimates associated with them will be less precise than estimates given items at the top.</li>
<li><strong>Emergent.</strong> A product backlog is not static. It will change over time. As more is learned, user stories on the product backlog will be added, removed, or reprioritized.</li>
<li><strong>Prioritized.</strong> The product backlog should be sorted with the most valuable items at the top and the least valuable at the bottom. By always working in priority order, the team is able to maximize the value of the product or system being developed.</li>
</ul>
<p>Product backlogs are discussed in much more detail in <a href="http://www.mountaingoatsoftware.com/books/7--succeeding-with-agile">Succeeding with Agile</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/make-the-product-backlog-deep/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Bugs on the Product Backlog</title>
		<link>http://blog.mountaingoatsoftware.com/bugs-on-the-product-backlog</link>
		<comments>http://blog.mountaingoatsoftware.com/bugs-on-the-product-backlog#comments</comments>
		<pubDate>Tue, 07 Jul 2009 03:17:28 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[Sprinting]]></category>
		<category><![CDATA[defect management]]></category>
		<category><![CDATA[product backlog]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=208</guid>
		<description><![CDATA[Ideally bugs belong on the product backlog just like any feature request. But, that would often necessitate a significant change for the rest of the organization so two backlogs are used. ]]></description>
			<content:encoded><![CDATA[<p>A common <a href="http://www.mountaingoatsoftware.com/topics/agile-project-management">agile project management</a> question is whether bugs belong on the product backlog. Before I address that question, let me clarify that the question refers to bugs that are unrelated to functionality being coded during the sprint. If someone finds a bug during a sprint that is related to the features being worked on, the best thing to do is yell, &#8220;Hey, Mike, the boojum code is broken when I&#8230;&#8221;  The second best thing to do is to stick a new task card on the task board saying &#8220;Fix the boojum code; it breaks when&#8230;&#8221;</p>
<p>But what about a bug found today in something the team wrote a month or a year ago? And what about the existing bug database that a team new to agile is almost sure to bring with them?</p>
<p>The ideal situation is to put the bugs right onto the product backlog. To see why, consider the situation from a user&#8217;s perspective: Do you think a user cares whether something is considered a New Feature or a Bug? No. The user just wants the system to behave in some way different from how it behaves today. They don&#8217;t care what it&#8217;s called. </p>
<p>But notice I called this the <i>ideal situation.</i> It isn&#8217;t always practical&#8211;and sometimes for reasons out of the team&#8217;s control or influence. Bug databases have a way of becoming embedded into organizations. The tech support group uses them as a primary way of communicating with the developers. The marketing group uses the bug database in a similar way. This makes it quit the bug database cold turkey. </p>
<p>In these cases, the most common solution teams use is to have two backlogs</p>
<ul>
<li>a product backlog of features</li>
<li>a bug backlog</li>
</ul>
<p>This approach is a bit harder on the team and the product owner but allows an agile team to work more easily with existing processes in the organization. </p>
<p>Sometimes when we make such accommodations to the overall organization, the accommodation can damage or destroy the agile adoption. Allowing everyone to work on five concurrent projects is an example of a crippling accommodation. Accommodating the organization&#8217;s use of a bug database is not crippling. It&#8217;s just a bit more work. </p>
<p>The product owner takes on most of the additional work by having to prioritize two separate work queues and then present them to the team in a more or less consolidated manner (&#8220;My top priorities are the first three items on the product backlog, then bugs #12403 and 12415, then these next two items on the product backlog&#8230;&#8221;). This isn&#8217;t too onerous as the items would need to be prioritized even if all were in one backlog.</p>
<p>So: Ideally bugs belong on the product backlog just like any feature request. But, that would often necessitate a significant change for the rest of the organization so two backlogs are used. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/bugs-on-the-product-backlog/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Using a Task Board with One Remote Team Member</title>
		<link>http://blog.mountaingoatsoftware.com/using-a-task-board-with-one-remote-team-member</link>
		<comments>http://blog.mountaingoatsoftware.com/using-a-task-board-with-one-remote-team-member#comments</comments>
		<pubDate>Sun, 31 May 2009 20:45:48 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[Sprinting]]></category>
		<category><![CDATA[agile teams]]></category>
		<category><![CDATA[distributed teams]]></category>
		<category><![CDATA[taskboard]]></category>
		<category><![CDATA[teamwork]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=203</guid>
		<description><![CDATA[Describes how to use a task board when a team has one remote member]]></description>
			<content:encoded><![CDATA[<p>I want to address a question I was emailed yesterday but that I receive frequently. What should we do in the case when the team really likes having a <a href="http://www.mountaingoatsoftware.com/task-boards">physical task board</a>, but when one team member is remote?</p>
<p>My first answer is always: Try to get the one person to move to where the rest of the team is. I don&#8217;t expect to see any moving trucks roll out when I ask this, but I have to ask. I figured if I keep asking, some team somewhere will eventually have the person move. Having one remote is a  cost that must be borne by the full team. For the right person, it&#8217;s easily worth it. But sometimes, the person who is remote has not special skills, knowledge or experience to justify the added hassle.  </p>
<p>So, assuming that we&#8217;ve tried the &#8220;move here&#8221; solution and it didn&#8217;t work, what can a team do that likes the physical task board but that has one remote member?</p>
<p>My recommendation is to continue to use the physical task board&#8211;it is simply too beneficial to the collocated team members to give it up in favor of a <a href="http://www.userstories.com">product backlog tool</a>, especially if team members are already used to it and like it. How the team conveys information on the task board to the remote team member depends on what that person does.</p>
<p>Sometimes the remote person works remotely because they have a very specialized skill that couldn&#8217;t be filled in the office where the rest of the team is. This would be the case, for example, if  our remote person is an expert in Windows internals and is writing boot-time code in C++. It would also be the case if our remote person has twenty years of experience in the domain and with some of our really old code. In these cases, the remote person usually (not always) works for a day or two relatively alone. The remote person in this case could identify during the daily Scrum what he or she will work on and not need further interaction with the task board until selecting the next task. Here, the remote person doesn&#8217;t really interact with the task board at all and interacts only with the team. Not ideal as I&#8217;d like the person to see the tasks, but this can work in some situations.</p>
<p>What is more common is for the ScrumMaster to take on the responsibility of updating an electronic version that mirrors the physical task board. A shared spreadsheet is normally sufficient for this, but some teams opt for a more specialized tool, which is fine. Many tools offer 5-10 user free licenses and since the tool is only needed by the ScrumMaster and one remote employees, the free license is adequate.</p>
<p>Normally the ScrumMaster updates the electronic task board once a day, usually right after the daily scrum meeting. Of course, reading the physical task board and updating the electronic one can be quite time-consuming because the ScrumMaster has to look at each task in both places to see if that item needs to be updated. </p>
<p>One good way of minimizing the time the ScrumMaster spends doing this is to mark the cards on the physical task board. The mark indicates &#8220;I&#8217;ve updated this task. Please update it in the online task board.&#8221; I like to use <a href="http://www.officedepot.com/a/products/395971/Post-it-Arrow-Flags-Bright-Colors/">Post-It flags</a> for this. As team members do their daily scrum, they stick one of these flags (of any color) on the card. If the estimate changes, if the task is done, if a new task is added, those cards are tagged with a flag. When the meeting is over, the ScrumMaster can very easily see which items need to be updated. The ScrumMaster removes the flags once the online task board is updated.  This approach also works in situations where the ScrumMaster updates the board more than once a day. Any time someone changes the board, flag the task. </p>
<p>Other teams do something similar using <a href="http://www.officedepot.com/a/products/395971/Post-it-Arrow-Flags-Bright-Colors/">color-coded dots</a>. Anything touched on Monday is blue, Tuesday is red, and so on. Two problems occur though: First, the dot packs usually come with four colors to a pack so you have to buy a fifth color. Second, it&#8217;s a hassle to make sure we have the right color on hand.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/using-a-task-board-with-one-remote-team-member/feed</wfw:commentRss>
		<slash:comments>29</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>Non-functional Requirements as User Stories</title>
		<link>http://blog.mountaingoatsoftware.com/non-functional-requirements-as-user-stories</link>
		<comments>http://blog.mountaingoatsoftware.com/non-functional-requirements-as-user-stories#comments</comments>
		<pubDate>Fri, 21 Nov 2008 16:26:51 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Agile Planning]]></category>
		<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[agile requirements]]></category>
		<category><![CDATA[product backlog]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=62</guid>
		<description><![CDATA[A common challenge with writing user stories is how to handle a product&#8217;s non-functional requirements. These are requirements that are not about specific functionality (&#8220;As a user of a word processor, I want to insert a table into my document.&#8221;), but are rather about an attribute or characteristic of the system. Examples include reliability, availability, [...]]]></description>
			<content:encoded><![CDATA[<p>A common challenge with writing user stories is how to handle a product&#8217;s non-functional requirements. These are requirements that are not about specific functionality (&#8220;As a user of a word processor, I want to insert a table into my document.&#8221;), but are rather about an attribute or characteristic of the system. Examples include reliability, availability, portability, scalability, usability, maintainability. As you can see from that list, non-functional requirements are often referred to as &#8220;-ilities&#8221;. Of course, not all non-functional requirements end in &#8220;-ility.&#8221; We also have security, performance, robustness and so on.</p>
<p>Thinking back into the dark ages, I can remember when I first read about &#8220;non-functional requirements.&#8221; The term threw me for a loop. &#8220;If it&#8217;s non-functional, why do I care about it?&#8221; I&#8217;m sure the author of that book clarified this for me a page later, but the term has always seemed an odd one to me. I prefer to think of non-functional requirements as &#8220;constraints&#8221; we put on the system. When a product owner says &#8220;this system must perform adequately with 100,000 concurrent users&#8221; the product owner is putting a constraint on the development team. The product owner is effectively saying, &#8220;Develop this software any way you&#8217;d like as long as you achieve 100,000 concurrent users.&#8221; Each constraint we put on a system narrows the design choices a bit; calling these &#8220;constraints&#8221; rather than &#8220;non-functional requirements&#8221; helps us remember this.</p>
<p>Fortunately constraints / non-functional requirements can be easily handled as user stories. Here are a couple of examples:</p>
<ul>
<li>As a customer, I want to be able to run your product on all versions of Windows from Windows 95 on.</li>
<li>As the CTO, I want the system to use our existing orders database rather than create a new one sot that we don&#8217;t have one more database to maintain.</li>
<li>As a user, I want the site to be available 99.999% of the time I try to access it so that I don&#8217;t get frustrated and find another site to use.</li>
<li>As someone who speaks a Latin-based language, I might want to run your software someday.</li>
<li>As a user, I want the driving directions to be the best 90% of the time and reasonable 99% of the time.</li>
</ul>
<p>As you can see from these I was quite easily able to stick with the &#8220;As a &lt;type of user&gt;, I want &lt;some goal&gt;, so that &lt;some reason&gt;&#8221; template that I prefer for most user stories. I do this for a couple of reasons but want to comment further on only one of them here. Consider the example of the CTO constraining the team to use the existing orders database. (This was the real situation; the team was considering a second orders database that would be sychronized at night. The CTO overheard this and said &#8220;no!&#8221;) If we wrote this requirement as simply &#8220;Must use existing orders database&#8221; it would be entirely possible that a few months down the road we wouldn&#8217;t remember why we should be constrained in that way. We&#8217;d ask the product owner if she cared if we used a secondary database, and she&#8217;d say she had no objections. And we&#8217;d make a mistake of using one. Embedding the person who wants something can be very useful.</p>
<p>But, you should be careful not to get obsessed with that template. It&#8217;s a thinking tool only. Trying to put a constraint into this template is a good exercise as it helps make sure you understand who wants what and why. If you end up with a confusingly worded statement, drop the template. If you can&#8217;t find a way to word the constraint, just write the constraint in whatever way feels natural</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/non-functional-requirements-as-user-stories/feed</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Visualizing a Large Product Backlog With a Treemap</title>
		<link>http://blog.mountaingoatsoftware.com/visualizing-a-large-product-backlog-with-a-treemap</link>
		<comments>http://blog.mountaingoatsoftware.com/visualizing-a-large-product-backlog-with-a-treemap#comments</comments>
		<pubDate>Wed, 02 Jul 2008 22:09:48 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Scaling Scrum/Agile]]></category>
		<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[agile release planning]]></category>
		<category><![CDATA[large projects]]></category>
		<category><![CDATA[product backlog]]></category>
		<category><![CDATA[product owner]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=33</guid>
		<description><![CDATA[How to visualize a large product backlog using a treemap.]]></description>
			<content:encoded><![CDATA[<p>In the early days we promoted <a href="http://www.mountaingoatsoftware.com/topics/agile-project-management">agile project management</a> only for small teams because that was where it originated. We had plenty of experience to say that agile worked well on seven- to ten-person teams. We were also quick to learn the techniques that allowed agile project management methodologies to scale up to around 20-40 people. </p>
<p>These days, though, there are many truly large projects being done with agile methodologies. In preparing for this posting I started counting on my fingers the number of 100+ person projects I&#8217;m aware of. I quickly ran out of fingers. I&#8217;ve been involved in a couple of 500+ person projects and am aware of three projects that each have over 1,000 people. We are truly at the point of doing large scale agile.</p>
<p>Unfortunately, the charts and tools we use for such large projects have not entirely caught up with us. For example, the time-tested Scrum burndown chart is absolutely wonderful but is really limited to showing only one thing: a single team&#8217;s rate of progress through their product backlog. This month I want to write about visualizing large product backlogs using a technique I&#8217;ve been advocating with my clients for three years but will be writing about here for the first time.</p>
<p>Suppose you have a very large product backlog&#8211;such as one with lots of themes (groups of related user stories) or being worked on by multiple agile teams. The best way to visualize this product backlog is with a <em>treemap</em>. Treemaps were invented in the 1990s by Dr. Ben Shneiderman as a way of visualizing hierarchical (that is, tree-structured) data. </p>
<p>The following is a simple treemap of a two-story house:</p>
<p><a href='http://blog.mountaingoatsoftware.com/wp-content/uploads/house_treemap.jpg'><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/house_treemap.jpg" alt="treemap of two floors of a house" title="house_treemap" width="450" height="320" class="aligncenter size-full wp-image-37" /></a></p>
<p>In this treemap, each rectangle is sized to represent the relative area of the room. From it you can see that the master bedroom is about twice the size of either kid&#8217;s room and a little larger than the downstairs family room. The combined green area of the downstairs rooms is slightly larger than the area of blue upstairs rooms. From this very simple treemap you can get a feel of certain aspects of this house.</p>
<p>To visualize a product backlog with a treemap we need to conceptualize it as hierarchical data. We can do this a couple of different ways. For example,</p>
<p>Rental Car Theme</p>
<ul>
<li>As a traveler, I can rent a car</li>
<li>As a traveler, I can get collision insurance on a car rental policy.</li>
<li>As a traveler, I can request a baby car seat be inside my car.</li>
</ul>
<p>Airplane Theme</p>
<ul>
<li>As a traveler, I can request an aisle seat.</li>
<li>As a frequent flyer, I can request an upgrade to first class.</li>
</ul>
<p>Or we could create a product backlog as a tree with levels for</p>
<ul>
<li>Team</li>
<ul>
<li>Product Backlog Items Being Worked On By That Team</li>
</ul>
</ul>
<p>The following figure shows a product backlog as a treemap. There are five themes in the treemap. (Theme 4 is in the top left; Theme 1 is in the bottom right. You can click on it to enlarge it but be sure t come back.) Each theme is made up of a number of individual user stories. Story 4-28 (indicating the 28th story of theme 4) is in the top left. I&#8217;ve used this &#8220;theme-dash-story&#8221; notation for simplicity only for this example. I wouldn&#8217;t do that on a real project, of course.</p>
<p><a href='http://blog.mountaingoatsoftware.com/wp-content/uploads/fulltreemap.jpg'><br />
    <img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/fulltreemap_inline.jpg" alt="a treemap" title="fulltreemap_inline" width="450" height="351" class="aligncenter size-full wp-image-36" /><br />
</a></p>
<p>The size of each story in the preceding figure represents the number of story points that the story was assigned when estimated. Colors can be used on a treemap to represent an additional attribute of the data. On agile projects I&#8217;ve used colors to represent whether a user story has been developed or not. One color coding we used was:</p>
<ol>
<li>Done</li>
<li>Started but not done</li>
<li>Not started but not planned to have been started yet</li>
<li>Not started but it should have been started by now</li>
<li>Blocked</li>
</ol>
<p>I&#8217;ve also used color to indicate which team would work on a user story / product backlog item or whether the item was ready for development or not. Treemaps are very flexible in this regard. Check out the link to the stock market as a treemap at the end to see a great example of using color.</p>
<p>A good treemap is interactive&#8211;you can mouse over, click on regions of it, and so on. For example, in the treemap above you&#8217;ll notice that some of the user stories of Theme 4 are so small you can&#8217;t read them. Clicking on a part of Theme 4 should zoom the treemap in so it displays only Theme 4, meaning more room is available and more detail can be shown as below: </p>
<p><a href='http://blog.mountaingoatsoftware.com/wp-content/uploads/theme4zoomed.jpg'><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/theme4zoomed_small.jpg" alt="Zoomed in on Theme 4" title="theme4zoomed_small" width="450" height="240" class="aligncenter size-full wp-image-40" /></a></p>
<p>Sometimes zooming isn&#8217;t enough. A good treemap implementation will also display additional detail when mousing over part of it as shown in this example:</p>
<p><a href='http://blog.mountaingoatsoftware.com/wp-content/uploads/popup.jpg'><img src="http://blog.mountaingoatsoftware.com/wp-content/uploads/popup_small.jpg" alt="A treemap with an active popup" title="popup_small" width="450" height="239" class="aligncenter size-full wp-image-41" /></a></p>
<p>Treemaps are an excellent way of visualizing large product backlogs. To date, I&#8217;ve made use of various open source or relatively inexpensive general treemapping tools to create these on my projects or for my clients. Hopefully now some of the leading agile tool vendors begin to incorporate this type of visualization technique into their products. I would love to be able to visualize a large product backlog and interact with directly from within some of those tools. Until then, check out some of the links below for useful ways to create treemaps. The ones in this posting were created with IBM&#8217;s free <a href="http://services.alphaworks.ibm.com/manyeyes/">Many Eyes</a> tool.</p>
<p>Useful links:</p>
<ol>
<li><a href="http://www.smartmoney.com/map-of-the-market/">The stock market as a treemap</a></li>
<li><a href="http://services.alphaworks.ibm.com/manyeyes/page/Treemap.html">IBM&#8217;s Free Many Eyes tool</a></li>
<li><a href="http://download.macrofocus.com/treemap/">A good interactive example of a treemap</a></li>
<li><a href="http://marumushi.com/apps/newsmap/newsmap.cfm">Read news headlines as a treemap</a></li>
<li><a href="http://js-treemap.sourceforge.net/">A simple JavaScript implementation you could add to your project homepage</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/visualizing-a-large-product-backlog-with-a-treemap/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Advantages of the &#8220;As a user, I want&#8221; user story template</title>
		<link>http://blog.mountaingoatsoftware.com/advantages-of-the-as-a-user-i-want-user-story-template</link>
		<comments>http://blog.mountaingoatsoftware.com/advantages-of-the-as-a-user-i-want-user-story-template#comments</comments>
		<pubDate>Sat, 26 Apr 2008 00:20:11 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[agile requirements]]></category>
		<category><![CDATA[product backlog]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=24</guid>
		<description><![CDATA[In my user stories book and in all my training and conference sessions on user stories I advocate writing user stories in the form of &#8220;As a &#60;type of user&#62;, I want &#60;some goal&#62; so that &#60;some reason&#62;.&#8221; While I consider the so-that clause optional, I really like this template. At a recent conference, someone [...]]]></description>
			<content:encoded><![CDATA[<p>In my user stories book and in all my training and conference sessions on user stories I advocate writing user stories in the form of &#8220;As a &lt;type of user&gt;, I want &lt;some goal&gt; so that &lt;some reason&gt;.&#8221; While I consider the so-that clause optional, I really like this template.</p>
<p>At a recent conference, someone asked me why. Because I get that question fairly often I want to give three reasons why here:</p>
<p><strong>Reason 1</strong><br />
Something significant and I&#8217;m tempted to say magical happens when requirements are put in the first person. Obviously by saying &#8220;As a such-and-such, I want&#8230;.&#8221; you can see how the person&#8217;s mind goes instantly to imagining he or she is a such-and-such.  As for the magic, Paul McCartney was interviewed and asked about why the Beatles songs were so amazingly popular. One of his responses was that their songs were among the first to use a lot of pronouns. Think about it: <em>She Loves You, I Wanna Hold Your Hand, I Saw Her Standing There, I Am The Walrus, Baby You Can Drive My Car</em>, etc. His point was that these helped people more closely identify with the songs. I tried briefly to find a source for this interview tonight and the closest I found <a href="http://www.listology.com/content_show.cfm/content_id.8190">was this</a>. The information in that reference fits my recollection of hearing McCartney says this during a radio interview in 1973 or 74 that I assume was recorded when the Beatles were together.</p>
<p><strong>Reason Two</strong><br />
Having a structure to the stories actually helps the product owner prioritize. If the product backlog is a jumble of things like Fix exception handing, Let users make reservations, Users want to see photos, Show room size options, and so on, the product owner has to work harder to understand what the feature is, who benefits from it, and what the value of it is. </p>
<p><strong>Reason Three</strong><br />
I&#8217;ve heard an argument that writing stories with this template actually suppresses the information content of the story because there is so much boilerplate in the text. If you find that true then correct it in how you present the story. I&#8217;ve seen backlogs in Word that present the boilerplate in grayed text with the unique parts in black. I&#8217;ve created product backlogs in Excel that use column headings to filter out the common text. Look and you&#8217;ll see what I mean:</p>
<p><img src="http://www.mountaingoatsoftware.com/system/asset/file/62/backlog.jpg" alt="sample user stories in Excel" /></p>
<p>Seriously take a look at the image above before continuing&#8230;.I&#8217;ll wait&#8230;&#8230;Please, really look at it before reading further&#8230;..</p>
<p>OK, here&#8217;s how I bet you read the spreadsheet. I bet that as you read most of the rows you added in the &#8220;As a&#8230;&#8221;, &#8220;I want&#8230;.&#8221; and &#8220;so that&#8230;.&#8221; text, possibly even by looking at the heading as you read across each row. I&#8217;ve experimented by asking people and this is what most people do. If that text is unnecessary, why do we mentally mouth the words to ourselves or even glance at the heading while reading the row? Perhaps it&#8217;s not so non-essential after all.</p>
<p>For now, and probably a long time to come, I&#8217;ll be sticking with the &#8220;As a &lt;type of user&gt;, I want &lt;some goal&gt; so that &lt;some reason&gt;&#8221; template for these and other reasons.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/advantages-of-the-as-a-user-i-want-user-story-template/feed</wfw:commentRss>
		<slash:comments>98</slash:comments>
		</item>
	</channel>
</rss>

