<?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; user stories</title>
	<atom:link href="http://blog.mountaingoatsoftware.com/tag/user-stories/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>In Defense of Large Numbers</title>
		<link>http://blog.mountaingoatsoftware.com/in-defense-of-large-numbers</link>
		<comments>http://blog.mountaingoatsoftware.com/in-defense-of-large-numbers#comments</comments>
		<pubDate>Mon, 28 Nov 2011 16:15:19 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Agile Estimating]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=1202</guid>
		<description><![CDATA[People are often surprised that I allow (or even encourage) people to estimate with story points as large as 20, 40, and 100. We include these values in the decks of Planning Poker cards that we sell and give away in classes and at conferences. Yet many people tell me they start out my taking [...]]]></description>
			<content:encoded><![CDATA[<p>People are often surprised that I allow (or even encourage) people to estimate with story points as large as 20, 40, and 100. We include these values in the decks of <a href="http://store.mountaingoatsoftware.com/" title="Planning Poker Cards">Planning Poker cards</a> that we sell and give away in classes and at conferences. Yet many people tell me they start out my taking the 20, 40 and 100 cards out of the deck and throwing them away. </p>
<p>I find this unnecessary and, in some cases, detrimental to good planning. These large numbers can play a role in estimating and planning on some projects. Let&#8217;s see how.</p>
<p>Suppose your boss wants to know the general size of a new project being considered. The boss doesn&#8217;t need a perfect, very precise estimate. Something like &#8220;around a year&#8221; or &#8220;three to six months&#8221; is enough in this case. To answer this question you&#8217;ll want to write a product backlog. You want to put no more effort into this than you need to. Since the boss wants a high-level estimate, you can write a high-level product backlog. Big user stories (<a href="http://blog.mountaingoatsoftware.com/stories-epics-and-themes" title="definition of an "epic"">&#8220;epics&#8221;</a>) that describe large swaths of functionality will suffice.</p>
<p>And these epic user stories can be estimated with the large story point values. </p>
<p>Do you want to do this on every project? No, definitely not. There are some projects where when the boss asks for a plan you better be close. &#8220;Heads will roll if you&#8217;re wrong,&#8221; the boss announces on those projects. On those projects you don&#8217;t want to estimate epics and, therefore, won&#8217;t use the large values. Other projects (such as contract development) won&#8217;t have the tolerance for error that may come when estimating epics and using values such as 20, 40 and 100. </p>
<p>But some projects can tolerate that amount of error in the estimates. Mis-estimating a few epics is probably not enough to change the answer we give a boss who just wants to know if we think a project can be released in Q1 or Q4 next year. </p>
<p>Removing the large values from a deck of Planning Poker cards is like deciding to strike &#8220;millions&#8221; and &#8220;billions&#8221; from our vocabulary just because our bank balances are only in the thousands. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/in-defense-of-large-numbers/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<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>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>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>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>
		<item>
		<title>Writing User Stories for Back-end Systems</title>
		<link>http://blog.mountaingoatsoftware.com/writing-user-stories-for-back-end-systems</link>
		<comments>http://blog.mountaingoatsoftware.com/writing-user-stories-for-back-end-systems#comments</comments>
		<pubDate>Mon, 25 Feb 2008 03:58:58 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprint Artifacts]]></category>
		<category><![CDATA[agile requirements]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=19</guid>
		<description><![CDATA[I was asked recently how to go about writing user stories for a back-end financial system. This is an interesting example and is a question I get asked a lot, so I thought I should answer it here. This example brings up a couple of key interesting challenges: While there may be users of the [...]]]></description>
			<content:encoded><![CDATA[<p>I was asked recently how to go about writing user stories for a back-end financial system. This is an interesting example and is a question I get asked a lot, so I thought I should answer it here. This example brings up a couple of key interesting challenges:</p>
<ul>
<li>While there may be users of the system they are not often not direct users (i.e., with hands on the keyboard waiting for something to happen)</li>
<li>The functionality is often larger than will fit in one iteration</li>
</ul>
<p>So that we can deal with these challenges, let&#8217;s make up some more context for the example. Suppose our financial system takes in a lot of daily data and produces flat files that will be sent to banks and other partners at the end of the day. Some of the files are simple formats. Other files are in more involved formats with multiple record types within the file and possibly with multiple lines for some of the transactions. This would be a fairly standard batch-processing type application.</p>
<p>I want to write user stories in the template I recommend in <a title="user stories applied book" href="http://www.mountaingoatsoftware.com/book/2">the book</a>: <em>As a , I want  so that .</em> So, let&#8217;s deal with these challenges in order and first try to figure out who the user will be in our stories? Given the context provided above the user, is probably a bank or business partner. This will let us write stories like <em>&#8220;As a bank, I want&#8230;&#8221; </em>It&#8217;s entirely possible that we will want to get more specific and sometimes write stories for more specific users:</p>
<ul>
<li>As a commercial bank, I want&#8230;.</li>
<li>As a savings &#038; loan, I want&#8230;</li>
<li>As the Bank of America, I want&#8230; (assuming we have some specific business partnership that provides BofA with unique functionality)</li>
</ul>
<p>Now, what is it these banks want?</p>
<p>At a high level we can start out with some epics, perhaps like these:</p>
<ul>
<li>As a bank, I want to receive a file showing all checks to be cleared so that I can debit and credit the right accounts.</li>
<li>As a bank, I want to receive a correctly formatted 5300 file so that I can adjust balances as appropriate.</li>
<li>As a bank, I want to receive a file showing the status of all resubmitted transactions so that I can update the database with new information.</li>
</ul>
<p>(Note that I am liberally making up specific business rules or details. Presumably someone writing the real user stories could add real and relevant detail instead.)</p>
<p>First, notice it is OK to humanize the bank with &#8220;As a bank, I want&#8230;&#8221; Programmers do this all the time in conversation. &#8220;OK, suppose I&#8217;m the bank and you send me a 5300 file with a bad record. In that case, I&#8217;ll&#8230;&#8221;</p>
<p>As I said at the start of this post, one of the challenges in an application like this is that some of these user stories we just made up could be large. Suppose our mythical file format 5300 includes a header, three different record types, and a footer. We could break up the 5300 file user story above into things like:</p>
<ul>
<li>As a bank, I want to receive a 5300 file with the correct header and footer so that I can process the file correctly.</li>
<li>As a bank, I want to receive a 5300 file with correctly formatted prearranged payment records so that I can process those correctly.</li>
<li>As a bank, I want to receive a 5300 file with correctly formatted deposit entry records so that I can process them.</li>
<li>As a bank, I want to receive a 5300 file with correctly formatted addendum records so that I can process them.</li>
</ul>
<p>If those were still too big, I would find ways to split them smaller based on the specific formatting of the records. Suppose our deposit entry record type sometimes fits on one line but can also span multiple lines. In that case I could write these user stories:</p>
<ul>
<li>As a bank, I want to receive a 5300 file with correctly formatted single-line deposit entry records so that I can process them.</li>
<li>As a bank, I want to receive a 5300 file with correctly formatted deposit entry records that include continuation lines so that I can process them.</li>
</ul>
<p>Is the system &#8220;potentially shippable&#8221; after each of these user stories is delivered? Yes, it kind of is. While I&#8217;ll admit that we&#8217;re unlikely to find a bank that will take a 5300 file with only a header and a footer, it&#8217;s possible. Especially if we think of the situation in which the bank is simultaneously writing their own software to process the 5300 files we send them. Imagine meeting with the bank before the start of the next iteration and perhaps agreeing, &#8220;OK, in this iteration we&#8217;ll create some blank 5300 files with just headers and footers. But that will let us make sure that the communication problems are worked out, that you can read the files we write, and so on&#8230;.&#8221;  These stories also work well because they will likely fit with how the programmers will want to build the system.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/writing-user-stories-for-back-end-systems/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Mike Cohn Video Podcast &#8211; Effective User Stories Applied</title>
		<link>http://blog.mountaingoatsoftware.com/mike-cohn-video-podcast-effective-user-stories-applied</link>
		<comments>http://blog.mountaingoatsoftware.com/mike-cohn-video-podcast-effective-user-stories-applied#comments</comments>
		<pubDate>Fri, 19 Oct 2007 16:42:24 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=704</guid>
		<description><![CDATA[Mike Cohn of Mountain Goat Software was interviewed recently by Ted Neward.]]></description>
			<content:encoded><![CDATA[<p>
Mike Cohn of Mountain Goat Software was interviewed recently by Ted Neward. The interview was recorded by <a HREF="http://www.informit.com/podcasts/" TITLE="InformIT">InformIT</a> as part of their <a HREF="http://www.informit.com/podcasts/" TITLE="on Software site">onSoftware</a> series of audio and video podcasts. You can subscribe to the onSoftware podcasts and get Ted&#39;s interview of Mike <a HREF="http://www.informit.com/podcasts/episode.aspx?e=c00adc43-cb24-455d-9a51-09adfe5ab1b7">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/mike-cohn-video-podcast-effective-user-stories-applied/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmers and testers (and others) can work together on things smaller than user stories</title>
		<link>http://blog.mountaingoatsoftware.com/programmers-and-testers-and-others-can-work-together-on-things-smaller-than-user-stories</link>
		<comments>http://blog.mountaingoatsoftware.com/programmers-and-testers-and-others-can-work-together-on-things-smaller-than-user-stories#comments</comments>
		<pubDate>Mon, 30 Jul 2007 22:41:42 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Sprinting]]></category>
		<category><![CDATA[teamwork]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=11</guid>
		<description><![CDATA[A common misperception is that testers cannot do any work during an iteration until the programmers finish a user story or product backlog item. However, the unit of transfer between programmer and tester can be smaller than the user story. Let&#8217;s see how this could work through an example: Suppose a tester and I are [...]]]></description>
			<content:encoded><![CDATA[<p>A common misperception is that testers cannot do any work during an iteration until the programmers finish a user story or product backlog item. However, the unit of transfer between programmer and tester can be smaller than the user story. Let&rsquo;s see how this could work through an example:</p>
<p>Suppose a tester and I are working on the story about auto-incrementing the next check number in a checkbook management system. We would talk before getting started and agree that I&rsquo;m going to go code the simple scenario where the user enters one check after another and that we&rsquo;ll force the session to start with check 100. So entering five checks will give 101, 102,&#8230;105. The tester goes and writes an automated test for that while I code it. We check that in tomorrow morning and it becomes part of the nightly build. We&rsquo;ve just exchanged work at a level smaller than the individual user story / product backlog item. Let&rsquo;s do it again.</p>
<p>Next the tester and I talk and agree that we want to read the last check number from the file storage part of our product. So now our check numbers have to start at the right place rather than always starting with 100. The tester writes the automated tests while I code. We both check in our work and add it to the nightly build.</p>
<p>Next we decide to tackle the situation where the user doesn&rsquo;t enter one check after another. Instead of check, check, check, check we want to handle sequences like check, check, deposit, EFT, check, deposit, check and make sure the check numbers are incrementing correctly.</p>
<p>Then we decide to handle the case where the user manually types in a check number, overriding the default. Perhaps an analyst figures out what to do in some edge cases around this part of the user story (do we warn the user they&rsquo;re missing a check? does the sequence start to go off the last entered check number or the highest check number?). While the analyst figures that out the tester is automating and I&rsquo;m coding. And so it goes&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/programmers-and-testers-and-others-can-work-together-on-things-smaller-than-user-stories/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Miscommunicating with the written word</title>
		<link>http://blog.mountaingoatsoftware.com/miscommunicating-with-the-written-word</link>
		<comments>http://blog.mountaingoatsoftware.com/miscommunicating-with-the-written-word#comments</comments>
		<pubDate>Tue, 22 May 2007 22:04:10 +0000</pubDate>
		<dc:creator>Mike Cohn</dc:creator>
				<category><![CDATA[Musings]]></category>
		<category><![CDATA[agile requirements]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://blog.mountaingoatsoftware.com/?p=9</guid>
		<description><![CDATA[What a wonderfully poor medium it is to communicate with written words. I&#8217;m sometimes amazed that we&#8217;re able to communicate meaning at all. Here are two good examples of how hard it is to communicate with written words. A few weeks ago I was traveling and decided it was time to schedule another Certified ScrumMaster [...]]]></description>
			<content:encoded><![CDATA[<p>What a wonderfully poor medium it is to communicate with written words. I&#8217;m sometimes amazed that we&#8217;re able to communicate meaning at all. Here are two good examples of how hard it is to communicate with written words.<br />
A few weeks ago I was traveling and decided it was time to schedule another <a title="Scrum Training" href="http://www.mountaingoatsoftware.com/scrum_training">Certified ScrumMaster</a> class. I emailed my assistant, Tonya, and said, &#8220;Please book the Hyatt in Denver for July 31-August 2.&#8221; A day or two later she emailed back saying, &#8220;The hotel is booked.&#8221; With that crossed off my mental to-do list I moved on to the next thing.</p>
<p>About two weeks later I&#8217;m again on the road and Tonya emails me saying, &#8220;Did you want me to find a different hotel in Denver or are you just not going to do that class?&#8221; I&#8217;m very confused because she&#8217;s told me the &#8220;hotel is booked.&#8221; Since that&#8217;s the case why is she asking me about booking a different hotel? We exchange a few more emails until I finally realize that her reply to me (&#8220;The hotel is booked&#8221;) did not mean &#8220;I&#8217;ve finished with that task; the hotel is booked.&#8221; It instead meant &#8220;The hotel is already booked by someone else; now what should I do?&#8221;</p>
<p>What&#8217;s interesting is to look back over the communication&#8211;nothing is wrong with what either of us typed into our emails except that we were each coming out the question from a completely different context.</p>
<p>Here&#8217;s a second example of how easy it is to miscommunicate: I&#8217;m in London this week teaching some classes for my good friends at <a title="Conchango" href="http://www.conchango.com">Conchango</a>. Since I can&#8217;t watch the basketball playoffs as I normally would this time of year I&#8217;ve been taking the opportunity to try to learn the rules to cricket. To someone with absolutely no prior exposure to the game it&#8217;s quite confusing especially as it seems to go on forever. I mentioned to my class today that I&#8217;m trying to figure the game out. One of the participants in the class shared with me the following instructions. These are apparently marketed as &#8220;Cricket Rules for Foreigners&#8221; throughout the UK:</p>
<blockquote><p>You have two sides, one out in the field and one in. Each man that&#8217;s in the side that&#8217;s in goes out, and when he&#8217;s out he comes in and the next man goes in until he&#8217;s out. When they are all out, the side that&#8217;s out comes in and the side thats been in goes out and tries to get those coming in, out. Sometimes you get men still in and not out.</p>
<p>When a man goes out to go in, the men who are out try to get him out, and when he is out he goes in and the next man in goes out and goes in. There are two men called umpires who stay all out all the time and they decide when the men who are in are out. When both sides have been in and all the men have been out, and both sides have been out twice after all the men have been in, including those who are not out, that is the end of the game!</p></blockquote>
<p>These rules are obviously intentionally obtuse. Notice how they are (probably) perfectly correct yet they say nothing about how to really play cricket. What strikes me is how similar these rules are to many requirements documents I&#8217;ve seen in the past&#8211;they may be accurate and perhaps clear to someone who already knows what is being said but they sure don&#8217;t convey any true understanding to the reader.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mountaingoatsoftware.com/miscommunicating-with-the-written-word/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

