<?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>Tyner Blain &#187; User Stories</title>
	<atom:link href="http://tynerblain.com/blog/category/requirements/requirements-models/user-stories-requirements-models-requirements/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Wed, 08 Feb 2012 16:38:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Agile Estimation, Prediction, and Commitment</title>
		<link>http://tynerblain.com/blog/2011/08/09/agile-estimation/</link>
		<comments>http://tynerblain.com/blog/2011/08/09/agile-estimation/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 06:32:33 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[agile estimation]]></category>
		<category><![CDATA[agile prediction]]></category>
		<category><![CDATA[agile release planning]]></category>
		<category><![CDATA[cone of uncertainty]]></category>
		<category><![CDATA[project planning]]></category>
		<category><![CDATA[release planning]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1488</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2011%2F08%2F09%2Fagile-estimation%2F", "shorturl": "http://bit.ly/nUdL7S", "style": "big", "title": "Agile Estimation, Prediction, and Commitment" }); Your boss wants a commitment.  You want to offer a prediction.  Agile, you say, only allows you to estimate and predict &#8211; not to commit.  &#8221;Horse-hockey!&#8221; your boss exclaims, &#8220;I want one throat to choke, and it will be yours if [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2011%252F08%252F09%252Fagile-estimation%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FnUdL7S%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Agile%20Estimation%2C%20Prediction%2C%20and%20Commitment%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2011%2F08%2F09%2Fagile-estimation%2F", "shorturl": "http://bit.ly/nUdL7S", "style": "big", "title": "Agile Estimation, Prediction, and Commitment" });</script></div>
<p><img class="alignnone" title="One Throat" src="http://sehlhorst.smugmug.com/Other/blog/i-sBtqDPL/0/O/throat.jpg" alt="" width="166" height="250" /></p>
<p>Your boss wants a commitment.  You want to offer a prediction.  Agile, you say, only allows you to estimate and predict &#8211; not to commit.  &#8221;Horse-hockey!&#8221; your boss exclaims, &#8220;I want <em>one</em> throat to choke, and it will be yours if you don&#8217;t make a commitment and meet it.&#8221;  There&#8217;s a way to keep yourself off the corporate gallows &#8211; estimate, predict, <em>and</em> commit &#8211; using agile principles.</p>
<p>This is an article about agile product management and release planning.</p>
<p><span id="more-1488"></span></p>
<h1>Change and Uncertainty</h1>
<p><img class="alignnone" title="pyramid" src="http://sehlhorst.smugmug.com/Other/blog/i-kLX4P5V/0/O/pyramid.jpg" alt="" width="250" height="163" /></p>
<p>In the dark ages before your team became agile, you would make estimates and commitments.  You never <em>exactly</em> met your commitments, and no one <em>really</em> noticed.  That was how the game was played.  You made a commitment, everyone <em>knew</em> it would be wrong, but they expected it anyway.  Maybe your boss handicapped your commitment, removing scope, lowering expectations, padding the schedule.  Heck, that&#8217;s been the recipe for success since they planned the pyramids.</p>
<p>It makes sense.</p>
<ol>
<li><strong>Your early estimates are wrong. </strong> When you add them up, the total will be wrong.  If you do <a title="PERT estimation tutorial" href="http://tynerblain.com/blog/2006/04/13/foundation-series-basic-pert-estimate-tutorial/">PERT estimation</a>, the <a title="Advanced PERT page 1" href="http://tynerblain.com/blog/2009/06/18/advanced-pert-estimation/">law of large numbers</a> will <a title="Advanced PERT estimation - page 2" href="http://tynerblain.com/blog/2009/06/18/advanced-pert-estimation/2/">help you in aggregate</a>.  But you&#8217;ll still be wrong.</li>
<li><strong>The outside demands on, and availability of, your people will change.</strong> Unplanned sick time, attrition, levels of commitment over time, lots of &#8220;people stuff&#8221; is really unknown.</li>
<li><strong>The needs of your customers will change. </strong> <a title="Adapting to Changing Markets" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">Markets evolve over time</a>.  You get smarter, your competitors get better, your customer&#8217;s expectations change.</li>
</ol>
<p><img class="alignnone" title="sphinx" src="http://sehlhorst.smugmug.com/Other/blog/i-PJksfgv/0/O/sphinx.jpg" alt="" width="250" height="187" /></p>
<p>Agile processes are designed to help you deliver what your customer actually needs, not what was originally asked for.  Contrast the two worlds.</p>
<p>In the old world, you would commit to delivering a couple pyramids.  After spending double your budget, with double the project duration, you would have delivered one pyramid.  When you deliver it, you find out that sphinxes are <em>all the rage</em>.  Oops.</p>
<p>Your team changed to agile, so that you could deliver the sphinx.  But your Pharaoh still wants a commitment to deliver a couple pyramids (the smart ones will be expecting to get just one).  You can stay true to agile, and still mollify your boss&#8217; need to have a commitment, if you take advantage of the first-principles of why agile estimation works.</p>
<h2>Estimation</h2>
<p>A commitment is a factual prediction of the future.  &#8221;This will take two weeks.&#8221;  Nobody is prescient.</p>
<p>A factual prediction has to be nuanced.  &#8221;I expect* this will take no more than two weeks.&#8221;</p>
<p style="padding-left: 30px;">*in reality, this is shorthand for a mathematical prediction, such as &#8220;I expect, with 95% confidence, that this will take no more than two weeks.&#8221;</p>
<p>Few non-scientist, non-engineers, non-mathematicians understand that 95% confidence has a precise meaning.  People usually interpret it to mean &#8220;a 5% chance that it will take more than two weeks.&#8221;  What it really means is that if this exact same task were performed twenty thousand times (in a hypothetical world, of course), then nineteen thousand of those times, it would be completed in under two weeks &#8211; do you feel lucky?</p>
<p>To make a statement like this, you actually have to create <a title="PERT Estimation" href="http://tynerblain.com/blog/2006/04/13/foundation-series-basic-pert-estimate-tutorial/">a PERT estimate</a> &#8211; identifying the best-case, worst-case, and most-likely case for how long a task will take.</p>
<p><img class="alignnone" title="PERT Estimate" src="http://sehlhorst.smugmug.com/photos/567766108_8mN5Z-L.png" alt="" width="450" height="327" /></p>
<p>Unfortunately, we&#8217;re rarely asked to make a commitment about a <em>single</em> task &#8211; but rather a large collection of tasks &#8211; well-defined, ill-defined, and undefined.</p>
<p>You can combine PERT estimates for the individual tasks, resulting in an overall estimate of the collection of tasks.</p>
<p><img class="alignnone" title="Combined PERT Estimates" src="http://sehlhorst.smugmug.com/photos/567787127_5TbDg-L.png" alt="" width="450" height="327" /></p>
<p>The beauty of this approach is that the <a title="Central Limit Theorem" href="http://en.wikipedia.org/wiki/Central_limit_theorem">central limit theorem</a>, and <a title="Law of Large Numbers" href="http://en.wikipedia.org/wiki/Law_of_large_numbers">the law of large numbers</a>, work to help you estimate a collection of tasks &#8211; you can actually provide better estimates of a group of tasks than a single task.  This obviously helps with the <em>well-defined</em> tasks that you know about at the start of the project.  This even helps with the <em>ill-defined</em> tasks.  Rationalists will argue that the key, then, is to do more up-front research to discover the <em>undefined</em> tasks &#8211; and then we&#8217;re set.  As Frederick Brooks (<em>Mythical Man-Month</em>) points out in <em><a title="The Design of Design" href="http://tynerblain.com/blog/2010/07/06/the-design-of-design/">The Design of Design</a></em>, this debate has been going on since Descartes and Locke.  It is not a new idea.</p>
<p>Big Up-Front Design and Requirements (BUFD &amp; BUFR) hasn&#8217;t worked particularly well, so far.</p>
<p><img class="alignnone" title="baby boy" src="http://sehlhorst.smugmug.com/Other/blog/i-Szbjk5c/0/O/baby.jpg" alt="" width="250" height="174" /></p>
<p>Don&#8217;t throw out the baby with the bath-water, however.  The math of estimation is still important and useful.  Even if empiricism is not the silver bullet.</p>
<h1>Prediction</h1>
<p>Estimation is a form of prediction.  Even agile teams do it.  In Scrum, you estimate a collection of user stories &#8211; in story points that represent complexity, and you <em>predict</em> how many points the team can complete in <em>this sprint</em>.  Note the time factor.  If you&#8217;re working a two-week sprint, there is very little risk of changes in staffing during a two-week period.  There&#8217;s also very little risk that your market will change significantly in two weeks &#8211; and if it does, what are the odds that you will notice <em>and</em> materially change your requirements in <em>two weeks</em>?</p>
<p>Visually, let&#8217;s take that PERT estimate and turn it sideways &#8211; so we can introduce the dimension of time.  Imagine you estimated all of the tasks (well-defined, ill-defined, and a <em>guess</em> about the undefined), <em>as if they were all to happen in the first sprint</em>.  Ignore inter-task dependencies, and pretend you had unlimited resources and the ability to perform all tasks in parallel.</p>
<p><img class="alignnone" title="Estimate Without Time" src="http://sehlhorst.smugmug.com/Other/blog/i-84bwNmj/0/O/20110808Prediction-and.png" alt="" width="450" height="365" /></p>
<p>The graph above shows the aggregate estimate &#8211; the circle is your best <em>prediction</em>, with error bars representing your confidence interval in the estimate.  If you were using PERT estimates, these could represent that 5% and 95% confidence lines.  Subjectively pick something based on your team&#8217;s experience in the domain and your confidence in your guesses (about the <em>undefined</em> tasks).</p>
<p>We need a segue into the &#8220;best of waterfall&#8221; approach to estimating projects, to steal and invert a good idea.</p>
<h1>The Cone of Uncertainty</h1>
<p>The folks at <a title="Cone of Uncertainty" href="http://www.construx.com/Page.aspx?cid=1648">Construx have published a nice explanation of the <em>cone of uncertainty</em></a> &#8211; an adaptation of an idea from Steven McConnell&#8217;s <em>Software Estimation: Demystifying The Black Art</em> (2006).  That article uses his imagery with permission &#8211; so please go look at it there.  The idea is that as the project becomes better defined (e.g. <em>during the project</em>), the amount of uncertainty is reduced.</p>
<p>The findings show that initial estimates are off by 400% (either low by a factor of 4 or high by a factor of 4)!  Even after &#8220;nailing down&#8221; requirements, estimates are still off by 30% to 50%!</p>
<p>As bad as that sounds, it is actually worse.  This is a prediction for <em>the original project</em> (delivering pyramids).  Not only are your estimates wrong &#8211; but <strong>they are bad estimates for delivering <em>the wrong product</em></strong>.</p>
<p>But &#8211; the core idea is sound &#8211; the further into the future you have to execute, the greater the mistakes in your estimate.</p>
<p>Taking that concept, and applying it to our diagram, we get the following:</p>
<p><img class="alignnone" title="Cone of Uncertainty" src="http://sehlhorst.smugmug.com/Other/blog/i-qwXrRM4/0/O/20110808Prediction-and.png" alt="" width="450" height="363" /></p>
<p>The further into the future you are trying to <em>predict</em>, the less accuracy you have in your prediction.  This reduction in accuracy is reflected as a widening of the <em>confidence bands</em> for your estimate.</p>
<ul>
<li>A couple sprints&#8217; worth of work is not much different than one sprint &#8211; so your estimation range is not much changed.</li>
<li>An entire release of sprints (say 6 to 10 sprints) has much more opportunity for <em>the unknown</em> to rear its head.</li>
</ul>
<p>Now, your prediction is (probably) unusably vague and imprecise.  &#8221;This set of tasks will take X plus or minus a factor of two.&#8221;</p>
<p>That&#8217;s the reality.</p>
<p>Note: This has always been the reality.  People have historically reduced this &#8220;risk to timing&#8221; by hiding the &#8220;risk of change&#8221; aspects &#8211; and waterfall processes encourage you to deliver <em>the wrong thing, as close to on-time as possible.</em></p>
<p><em><img class="alignnone" title="Ostrich" src="http://sehlhorst.smugmug.com/Other/blog/i-FmRbFG8/0/O/ostrich.jpg" alt="" width="194" height="250" /></em></p>
<p>That&#8217;s not what we want to do, however.</p>
<p>We still want to deliver the (not-yet-defined) <em>right</em> product, as efficiently as possible.  That&#8217;s the goal of agile.  (For folks who haven&#8217;t been here at Tyner Blain for long &#8211; &#8220;right&#8221; includes both value and quality).</p>
<h1>Refinement</h1>
<p>Because we&#8217;re agile, and we&#8217;re willing to &#8220;get smarter&#8221; about our product over time, we have an opportunity to improve.  Because of the nature of compounding estimates and the cone of uncertainty, our uncertainty gets smaller over time.</p>
<p>Let&#8217;s remove our artificial simplification that we could do everything &#8220;right now&#8221; and look at what we think we know right now, about the end of the release.</p>
<p><img class="alignnone" title="today predicting the release" src="http://sehlhorst.smugmug.com/Other/blog/i-8mRL3Pd/0/O/20110808Prediction-and.png" alt="" width="450" height="363" /></p>
<p>Our ability to <em>predict</em> the amount of effort (for today&#8217;s definition of the product) at the end of the release is not very good.</p>
<p><img class="alignnone" title="release planning after first sprint" src="http://sehlhorst.smugmug.com/Other/blog/i-WjNhLZd/0/O/20110808Prediction-and.png" alt="" width="450" height="363" /></p>
<p>Our ability to predict (today&#8217;s definition of the product) one sprint into the future is much better.</p>
<p><img class="alignnone" title="predicting the release after one sprint" src="http://sehlhorst.smugmug.com/Other/blog/i-rmXLSKW/0/O/20110808Prediction-and.png" alt="" width="450" height="363" /></p>
<p>After completing the first sprint, we are <em>a little bit smarter</em> &#8211; the ill-defined tasks are better defined.  Maybe some of the undefined tasks are now ill-defined.  The same cone of uncertainty is now a little bit smaller &#8211; we are a little bit smarter, and the time horizon of the release date is a little bit closer.</p>
<p><img class="alignnone" title="cone of uncertainty shrinks with each sprint" src="http://sehlhorst.smugmug.com/Other/blog/i-42LNqnZ/0/O/20110808Prediction-and.png" alt="" width="450" height="363" /></p>
<p>The trend continues &#8211; each sprint gets us closer to the release date, and with each sprint (assuming we get feedback from our customers, and continue to study our markets) we get a little bit smarter.  We also get better at predicting the team&#8217;s velocity (how much &#8220;product&#8221; they can deliver during each sprint).</p>
<h1>Commitment</h1>
<p>Your boss still wants a commitment, however.  And that&#8217;s where we get to change the way we look at this (again).</p>
<p>The above diagrams all display how we converge on an estimate for a stable body of work.  However, we know that the body of work is constantly changing.</p>
<p>Backlog! [you say]</p>
<p>Yes!  The backlog.  The backlog is an ordered, prioritized list of user stories and bugs.  I was talking with Luke Hohmann of <a title="Innovation Games" href="http://innovationgames.com/">Innovation Games</a> last month, and one of<a title="Bang for the Buck Innovation Game" href="http://innovationgames.com/game_view/instant_play/KR25FMG33K0IKNKZV15JXCIXL4S4W1X2"> the most popular online Innovation Game</a>s is now the one they created based on <a title="Prioritize by Bang for the Buck" href="http://tynerblain.com/blog/2008/10/20/planning-sprints-part-2/">prioritizing by bang for the buck</a>.  Play it today online (for free!).  How cool is that?</p>
<p>The backlog represents the work the team is going to do &#8211; in the order in which the team is going to do it.  Over time, as we get smarter, we will add and remove items from the backlog &#8211; because we discover new capabilities that are important, and because we learn that some things aren&#8217;t worth doing.  We will even re-order the backlog as we recognize shifting priorities in the markets (or in our changing strategy).</p>
<p>As this happens, it turns out that the items at the top of the list are least likely to get displaced, and therefore most likely to still be part of the product by the time we get to the release.</p>
<p><strong>Instead of thinking about uncertainty in terms of how long it takes, think about uncertainty in terms of how much we complete in a fixed amount of time.</strong> In agile, generally, we apply<a title="Timeboxing Software Delivery" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/"> a timebox approach</a> to determining what gets built.</p>
<p>Now, uncertainty, instead of manifesting as &#8220;<em>when</em> do we finish?&#8221; becomes &#8220;<em>what</em> will we finish?&#8221;</p>
<p>Your boss is rational.  She appreciates the constraints, she just wants to know <em>what you can commit</em>.  Every boss I&#8217;ve worked with has been willing (sometimes only after much discussion) to treat this uncertainty in terms of <em>what</em> instead of <em>when</em>.  They acknowledge that they need to translate (usually for <em>their</em> boss) into a &#8220;fixed&#8221; commitment.</p>
<p>The solution: <em>commit </em>to a subset of what you <em>predict</em> you can complete.</p>
<p>At the start of the release, you may have 500 points worth of stories.  Based on your team&#8217;s expected velocity, and the number of sprints in the release, you <em>predict</em> that you can complete 320 points worth of stories (5 people on the team, a team velocity of 40 points per sprint, and 8 sprints in the release).  Starting at the top of the backlog and working down, draw a cut-line at the last story you can complete (when you reach 320 points).  This is your <em>prediction</em>.</p>
<p>Now the commitment part.  You&#8217;ll have to figure out what you&#8217;re comfortable with.  Maybe for 8 sprints (say, 16 weeks into the future), you may only be comfortable <em>committing</em> to half that amount &#8211; 160 points.  Go back to the top of the backlog, and count down until you reach 160 points.  Everything above the line is what you <em>commit</em> to delivering.</p>
<p>Maybe you are comfortable committing to 240 points, maybe only 80.  This is like playing spades.  The more you can commit to, without missing, the better off you are.  Your tolerance for risk is different than mine.</p>
<p>You can also <em>negotiate</em> with your boss.  Commit to 160 points now, and provide an update after every other sprint.  More likely than not, you will be <em>increasing</em> the scope of your commitment with every update.</p>
<p>Mid-project updates of &#8220;we can do more&#8221; are always better than &#8220;we can do less.&#8221;  And both are better than end-of-project surprises.  This also allows you to have updates that look like this:</p>
<p style="padding-left: 30px;">We didn&#8217;t know this at the start of the release, but X is really important to our customers &#8211; and we will be able to deliver X <em>in addition to</em> what we already committed.  Without slipping the release date.</p>
<h1>Conclusion</h1>
<p>Making commitments with an agile process is not impossible.  It just needs to be approached differently (if you want to stay true to agile).  The end result: better predictions, more realistic commitments, and the likelihood that each update will be good news instead of bad.</p>
<p>[Update: Changed initial image.  Thanks <a title="CC Attribution link" href="http://www.flickr.com/photos/archer10/">Dennis</a> for the great photo!]</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Agile+Estimation%2C+Prediction%2C+and+Commitment+http%3A%2F%2Fbit.ly%2FnUdL7S+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2011/08/09/agile-estimation/&amp;t=Agile+Estimation%2C+Prediction%2C+and+Commitment" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2011/08/09/agile-estimation/feed/</wfw:commentRss>
		<slash:comments>100</slash:comments>
		</item>
		<item>
		<title>Agile Documentation</title>
		<link>http://tynerblain.com/blog/2010/11/16/agile-documentation/</link>
		<comments>http://tynerblain.com/blog/2010/11/16/agile-documentation/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 21:15:14 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[agile documentation]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[just enough documentation]]></category>
		<category><![CDATA[user story]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1398</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F11%2F16%2Fagile-documentation%2F", "shorturl": "http://bit.ly/af85o7", "style": "big", "title": "Agile Documentation" }); Agile values working software over comprehensive documentation &#8211; it is 1/4th of the original manifesto.  That doesn&#8217;t mean don&#8217;t document!  It means don&#8217;t document more than you need to document.  Documentation does have value, but the practice of documenting got excessive &#8211; that&#8217;s why [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2010%252F11%252F16%252Fagile-documentation%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Faf85o7%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Agile%20Documentation%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F11%2F16%2Fagile-documentation%2F", "shorturl": "http://bit.ly/af85o7", "style": "big", "title": "Agile Documentation" });</script></div>
<p>Agile <a title="agile values - by alistair cockburn" href="http://tynerblain.com/blog/2006/05/10/agile-values-alistair-cockburn-on-the-agile-manifesto/">values working software over comprehensive documentation</a> &#8211; it is 1/4th of the original manifesto.  That doesn&#8217;t mean <em>don&#8217;t document</em>!  It means <em>don&#8217;t document more than you </em>need<em> to document</em>.  Documentation does have value, but the practice of documenting got excessive &#8211; that&#8217;s why a reaction to the <em>bad stuff</em> earned a spot as one of the pillars of agile.  How do you avoid over-reacting when changing a culture of over-documentation?</p>
<p><span id="more-1398"></span></p>
<h2>The Need for Documentation</h2>
<p>We need documentation to help us communicate.  You can define an agile team as &#8220;the people creating the product.&#8221;  You can interpret &#8220;creating&#8221; as the people we normally think of as <em>executing</em> to accomplish the goals, or you can be more inclusive, and think of <em>the people who have the goals</em> as being part of the team too.</p>
<p><strong>Philosophically, agile stresses collaboration</strong>.  Usually it is couched in terms of (1) people who are executing <em>collaborate</em> to devise the best solutions and (2) people who are part of the team <em>collaborate</em> with the people for whom they are creating the product.  Personally, my experience has been that projects with committed sponsors succeed, and projects without them fail &#8211; so I always think of the sponsors as <em>part of the team</em>.</p>
<p><img class="alignnone" title="collaboration" src="http://sehlhorst.smugmug.com/Other/blog/collaboration/1063052453_72GGi-O.jpg" alt="" width="250" height="166" /></p>
<p>Regardless of your definition &#8211; collaboration requires communication, and communication benefits from documentation.</p>
<h2>Temporal Communication</h2>
<p>Communication among groups of people happens over time.</p>
<p><img class="alignnone" title="date and time" src="http://sehlhorst.smugmug.com/Other/blog/date-and-time/1093411326_FYxXH-O.jpg" alt="" width="250" height="166" /></p>
<p>Some collaboration is transient &#8211; communication happens <em>right now</em>, and is only important <em>right now</em>.  Other communications are persistent &#8211; the collaboration happens right now, but we need to <em>remember later</em> what we agreed upon and why.  There are variations of &#8220;right now&#8221; and varying degrees of &#8220;later&#8221;, but slightly oversimplifying,</p>
<ul>
<li>There is communication <em>for now.</em></li>
<li>There is communication <em>for later</em>. </li>
</ul>
<p><strong>Both are important.</strong></p>
<p>Documentation, in the vision from your nightmares &#8211; giant requirements documents, architectural analyses, and detailed psychographic profiles &#8211; is very inefficient when communicating <em>for now</em>.</p>
<p><img class="alignnone" title="stack of documents" src="http://sehlhorst.smugmug.com/Other/blog/papers/1093432018_nAxDh-O.jpg" alt="" width="166" height="250" /></p>
<p>These massive documents, while getting in the way of a conversation, do provide the opportunity to remember (in the future) why we make the decisions we make (today).</p>
<p>Documentation, as emphasized in most agile discussions &#8211; user stories and acceptance criteria, on an index card, taped on the wall &#8211; is not a robust solution for communication that <em>happens later</em>.</p>
<p><img class="alignnone" title="product backlog" src="http://sehlhorst.smugmug.com/Other/blog/story-backlog-small/1093432000_NBZWf-O.jpg" alt="" width="250" height="187" /></p>
<p>This low-overhead approach to capturing today&#8217;s ideas actually facilitates and improves today&#8217;s conversation &#8211; but does not give us a record we can use in the future for why we made our decisions.</p>
<p>As an agile team, there are ways we can approach <em>both</em> the persistent and transient documentation tactics to make them more valuable.  We can tweak our transient documents to make them more useful for persistence.  We can take an agile approach to development of persistent documents, so that we only do <em>just enough documentation</em> &#8211; trading off the minimum amount of short term efficiency to avoid long-term blunders.</p>
<h2>Transient Documents for the Future</h2>
<p>The image above is from a workshop defining the product backlog for an initial sprint for a new project.  The team identified the most important stories for the first sprint, their acceptance criteria, and the size, in story points, for each story.  As part of scrum, the stories are written in user-story format, with acceptance criteria for each story identified and documented on additional index cards (taped to the index cards for the associated stories).  Great transient way to capture the <em>must do</em> and <em>makes it better</em> stories that the product owner is thinking about.</p>
<p>As a team, we made a couple minor tweaks to make these story cards more useful.  First, all of the stories were organized into themes that help establish the context (for the team), and combine the stories into &#8220;meaningful areas of focus&#8221; for communication with stakeholders.</p>
<p><img class="alignnone" title="themes for stories" src="http://sehlhorst.smugmug.com/Other/blog/themes-450/1093470549_eUbnW-O.jpg" alt="" width="450" height="337" /></p>
<p>Each story got a blob of color in the top left hand corner, identifying which of the five themes were being supported.  You can see a few of them circled in the image above.</p>
<p>We also developed a set of 8 proto-personas (prototype, early draft, very rough personas &#8211; almost stereotypes) that the overall product / project was designed to support.  Each persona got a different color star.</p>
<p><img class="alignnone" title="personas for user stories" src="http://sehlhorst.smugmug.com/Other/blog/personas-450/1093470532_Uh9tj-O.jpg" alt="" width="450" height="337" /></p>
<p>Each user story got a corresponding colored-star sticker to indicate for which persona the story has been written.  Specifically, when multiple personas could use a story, we identified for which persona we were implementing the story in this sprint.</p>
<p>In the &#8220;right now&#8221; world, these tweaks helped us understand, question, and confirm the themes and personas being supported in the first story.  Those conversations allowed us to reach pragmatic compromises about which stakeholders were going to benefit and when.  They also allowed us to craft the outbound message that is step one of stakeholder expectation management.</p>
<p>The list of themes changed while we were doing this &#8211; moving from 4 to 5 themes, as we realized that there was value in splitting one of the themes.  The group of proto-personas grew from an initial set of 3 to a set of 8, as we quickly realized that the team was trying to &#8220;build something for everyone&#8221; and we wanted to avoid <a title="elastic user problem" href="http://tynerblain.com/blog/2007/07/23/elastic-users/">the elastic user problem</a>, and instead, roll out capabilities sequentially that satisfied valuable groups of users with similar goals and perspectives.</p>
<h2>Culture Change for Stakeholders</h2>
<p>As you would expect, having a bunch of cards stuck on the wall provides a great, visceral, <em>now</em> communication for the team &#8211; both in implementing and communicating.  However, <em>cards on the wall</em> is very transient.  It also doesn&#8217;t provide a good way to communicate with old-school stakeholders (imagine the execs who have their admins <em>print out their emails</em> for them to read and annotate &#8211; those folks still exist!).</p>
<p>This can make it hard for the &#8220;not part of the implementation&#8221; part of the team to collaborate and communicate.</p>
<blockquote><p>In <a title="user stories applied" href="http://www.amazon.com/dp/0321205685?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0321205685&amp;creative=373489&amp;camp=211189"><em>User Stories Applied</em></a>, Mike Cohn stresses that the brevity of user stories is intentionally designed to facilitate (and I would add “dependent upon”) conversation.  I find it to be both a strength and a weakness of user stories.  It is strong because you can cover a lot of ground quickly (breadth) and capture a number of stories, much like the list above.  It is weak because the requirements documentation does not stand on its own – it requires conversation to fill in the details.  I’ve had some success using the “Verify that…” user acceptance tests as the method of documenting those details (depth), in conjunction with the brief, easily consumable stories.</p>
<p><cite><a title="Stakeholders in a Barrel" href="http://tynerblain.com/blog/2008/12/30/stakeholders-in-a-barrel/">Stakeholders in a Barrel</a></cite></p>
</blockquote>
<p>Those conversations happened as part of getting the stories defined, getting them on the board in the right order, and defining the acceptance criteria.  Stakeholders often have a short memory, especially when they were the ones making a compromise.  You need some way to <a title="providing context in agile" href="http://tynerblain.com/blog/2008/10/01/agile-product-management-providing-context/">retain the context of the conversation</a> that led to the particular organization and content of the stories on the wall.</p>
<h2>Persistent Documents in the Present</h2>
<p>Agile proponents complain about the massive get-in-your-way documents that slow down the start of projects, prevent the teams from <a title="Markets Change - You Adapt and Win or Ignore and Fail" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">adapting to changing market conditions</a>, and otherwise make it harder to deliver great products.  I agree.  Agile proponents also rail against the &#8220;build it all, then release it,&#8221; waterfall, process for creating software &#8211; and propose an alternative &#8211; iterative development of the software.  I agree again.</p>
<p>Why not apply the same principle of iterative development to persistent documents?</p>
<p>Consider the example above of using colored-star stickers to identify the people for whom each story is being implemented in any given sprint.  The majority of the time spent on this analysis is around understanding which people are important (to the success of the product), and for which people the ability to perform this user story is important (to the person).  The combination of these two importances is an input to prioritization.  A minimal amount of time is spent putting stickers on cards, and creating multiple cards for the same story (each with a different sticker <a title="slicing stories by persona" href="http://tynerblain.com/blog/2010/10/05/use-cases-and-iteration/">for a different persona and potentially different acceptance criteria</a>).</p>
<p>Add a tiny bit of overhead, and capture the information in a spreadsheet (or whatever).</p>
<p><img class="alignnone" title="use case to actor mapping" src="http://sehlhorst.smugmug.com/photos/49195704-M.jpg" alt="" width="580" height="193" /></p>
<p>The image above shows <a title="actor to use case mapping" href="http://tynerblain.com/blog/2008/06/09/use-case-to-actor-mapping/">a mapping of use cases to actors</a>.  It could just as easily show a mapping of user stories to personas.  The transition <a title="actors and personas" href="http://tynerblain.com/blog/2007/12/20/global-actor-hierarchies-and-personas/">from thinking about actors to thinking about personas</a> is a small one.  This chart comes from an earlier article on <a title="communicate your delivery schedule with use cases" href="http://tynerblain.com/blog/2005/12/22/communicating-a-delivery-schedule-with-use-cases/">communicating a delivery schedule with use cases</a> &#8211; it helps stakeholders get a big picture view of who benefits when &#8211; a user-centric, yet still top-down perspective.</p>
<p>Note: Another nuance to incremental delivery is that you can introduce the &#8220;bare bones&#8221; version of a story now, and the &#8220;better&#8221; version of it later.  You can also <a title="actor hierarchies and improving use cases over time" href="http://tynerblain.com/blog/2006/12/13/actor-hierarchies/">communicate that stories get better over time, for some users</a>, with the same type of chart.</p>
<p>A very similar, and also simple to create table can show how each theme is getting &#8220;representation&#8221; within each sprint.  That view facilitates great discussions about trying to emphasize one theme and then another sequentially, versus doing the most important items in each theme first &#8211; gradually making progress in each theme.  Creating that view, and using it to communicate, has helped me address concerns that &#8220;external&#8221; stakeholders have shared about how a team appeared to be &#8220;chaotic and random&#8221; in their approach to prioritization and implementation.</p>
<h2>Many Models</h2>
<p>There are many types of documentation &#8211; and many types of models for emphasizing and discussing particular aspects of a complex system (like users and goals and solutions).  Creating a simple diagram like the following whiteboard sketch is almost required for effective transient communication in some projects.</p>
<p><img class="alignnone" title="simple agile model" src="http://sehlhorst.smugmug.com/photos/429885895_48JaP-O.jpg" alt="" width="400" height="282" /> [from <a title="Simple Agile Model Example" href="http://tynerblain.com/blog/2008/12/03/simple-agile-model-example/">Simple Agile Model Example</a>]</p>
<p>When most folks are complaining about documentation, they are not complaining about the sketch above.  They would consider that sketch to be <em>augmenting a conversation</em>.  Fine.  That&#8217;s what I did, at the time.  Then I took a picture of it.  Suddenly, it was documentation.  A stakeholder came by later, confirmed that the system needed to work this way, and <em>signed the whiteboard</em> &#8211; and the photo was updated.</p>
<p>Every <em>heavyweight</em> document can start out this way.  And it can evolve.  It should evolve.  If you&#8217;re going to succeed, it <em>must</em> evolve as your team gets smarter, your competitors react, and your market changes.</p>
<p>The trick is that you don&#8217;t have to write the <em>final version</em> before you get started.  Capture at a high level what you know right now &#8211; just like a roadmap.  Capture in <em>just enough detail</em> what you need right now &#8211; just like a story backlog.  And change it as you go.</p>
<h2>Conclusion</h2>
<p>Documentation is not bad.  Documenting stuff you will never use is bad.  Documenting stuff you don&#8217;t need for a long time is risky, because it will probably change before you refer back to your document.</p>
<p>Documenting why you made decisions right now, as part of <em>transient</em> collaboration and communication is important, so that you collectively remember.  That documentation <em>persists</em> and your team can build upon knowledge, incrementally &#8211; just as your team builds upon the evolving code base, incrementally.</p>
<p> </p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Agile+Documentation+http%3A%2F%2Fbit.ly%2Faf85o7+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2010/11/16/agile-documentation/&amp;t=Agile+Documentation" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/11/16/agile-documentation/feed/</wfw:commentRss>
		<slash:comments>56</slash:comments>
		</item>
		<item>
		<title>Atomic Requirements</title>
		<link>http://tynerblain.com/blog/2010/09/14/atomic-requirements/</link>
		<comments>http://tynerblain.com/blog/2010/09/14/atomic-requirements/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 15:35:25 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Ishikawa Diagram]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[writing atomic requirements]]></category>
		<category><![CDATA[writing good requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1315</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F09%2F14%2Fatomic-requirements%2F", "shorturl": "http://bit.ly/9OCVmS", "style": "big", "title": "Atomic Requirements" }); Each requirement you write represents a single market need, that you either satisfy or fail to satisfy.  A well written requirement is independently deliverable and represents an incremental increase in the value of your software.  That is the definition of an atomic requirement.  Read [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2010%252F09%252F14%252Fatomic-requirements%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9OCVmS%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Atomic%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F09%2F14%2Fatomic-requirements%2F", "shorturl": "http://bit.ly/9OCVmS", "style": "big", "title": "Atomic Requirements" });</script></div>
<p><img class="alignnone" title="Rules of Requirements Logo #9" src="http://sehlhorst.smugmug.com/photos/128628670-M.png" alt="" width="250" height="250" /></p>
<p>Each requirement you write represents a single market need, that you either satisfy or fail to satisfy.  A well written requirement is independently deliverable and represents an incremental increase in the value of your software.  That is the definition of an atomic requirement.  Read on to see why atomic requirements are important.</p>
<p><span id="more-1315"></span></p>
<h2>Atomic Requirements &#8211; Revisiting</h2>
<p><img class="alignnone" title="atomic" src="http://sehlhorst.smugmug.com/Other/blog/atom/1005966203_AFtcP-O.jpg" alt="" width="250" height="187" /></p>
<p>As part of the ongoing series, <a title="Rules of Writing Good Requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">Writing Good Requirements &#8211; The Big Ten Rules</a>, I wrote about the <a title="Writing atomic requirements" href="http://tynerblain.com/blog/2006/06/14/writing-atomic-requirements/">importance of atomic requirements</a> first in 2006.  That article touched on only one aspect of atomic requirements &#8211; being able to ask &#8220;is it done?&#8221;</p>
<p>Writing atomic requirements is important from two perspectives &#8211; delivering value to your customers, and operating efficiently.  You get benefits both operationally, and in how you are delivering value when you write atomic requirements.</p>
<h2>Atomic Requirements Accelerate Value Delivery</h2>
<p>In a recent article, I proposed <a title="splitting user stories while maintaining atomicity" href="http://tynerblain.com/blog/2010/09/08/sprint-backlog-splitting-user-stories/">methods for splitting user stories when they are too large</a> to be delivered <a title="Inside a Scrum sprint - foundation series" href="http://tynerblain.com/blog/2010/08/24/inside-a-scrum-sprint/">within a single Scrum sprint</a>.  That article looked at ways to break up <a title="Writing Complete User Stories" href="http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/">complete user stories</a> (an agile requirement artifact, <a title="Comparing user stories and use cases" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">similar to a use case</a>) that were <em>already</em> atomic, making them even smaller.  Think of that article as <em>Atomic Requirements 301</em> &#8211; sort of an advanced class on splitting the atom.  There are opportunities to subdivide <em>molecular</em> requirements &#8211; those made up of multiple <em>atomic</em> goals &#8211; the topic of this article, which would be <em>Atomic Requirements 101</em>.</p>
<p>If you&#8217;re using an agile development process like Scrum, consider a user story like the following:</p>
<ul>
<li>As an online shopper, I need to find and compare similar products, a few times a year, so that I can make an informed purchasing decision.</li>
</ul>
<p>The key element, from an atomicity perspective, is <em>find and compare</em>.  These are actually discrete user goals, although it may not be immediately obvious.  Rewriting as follows, will highlight this:</p>
<ul>
<li>As an online shopper, I need to find products and compare similar products, a few times a year, so that I can make an informed purchase.</li>
</ul>
<p>Rewritten like this, <em>find products</em> and <em>compare similar products</em> are clearly different activities supporting different user goals.  They should be split into separate, atomic user stories.</p>
<ol>
<li>As an online shopper, I need to find products, a few times a year, so that I can purchase desired products.</li>
<li>As an online shopper, I need to compare similar products when shopping online, so that I can make an informed purchase.</li>
</ol>
<ul> </ul>
<p>These two user stories can be delivered separately.  If this example were for B2B (business-to-business) eCommerce, the example would be different &#8211; because the online shopper is (often) not the right persona.  A typical situation in B2B is that one person will do the research to determine <em>what to buy</em>, and another person will make the decision of <em>from whom to buy it</em>.</p>
<p>This rule applies for non-agile requirements development as well &#8211; consider the following &#8220;BRD-style&#8221; requirement example:</p>
<ul>
<li>The system must record all purchases and submit them to the fulfillment system for processing.</li>
</ul>
<p>Recording purchases and submitting them for processing are two different activities.  While they likely support the same goal, they may also support different goals and could be implemented separately.  Recording purchases is important not only for fulfillment, but potentially also for analytics.  Pushing data to a fulfillment system can be done in either a manual or automated fashion &#8211; providing a distinct cost-reduction opportunity.  To write these as atomic requirements, they must be separated.</p>
<ol>
<li>The system must record all purchases.</li>
<li>The system must submit all recorded purchases to the fulfillment system for processing.</li>
</ol>
<p>This example shows only the bare bones &#8211; there is more involved in writing either requirement, particularly around defining the n<a title="Non-functional requirements" href="http://tynerblain.com/blog/2006/05/23/non-functional-requirements-era/">on-functional requirements</a> and <a title="separating business rules increases agility" href="http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/">business rules</a> (see also: <a title="separating rules from requirements" href="http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/">why you benefit when you separate rules from requirements</a>, and <a title="The difference between business rules and business requirements" href="http://tynerblain.com/blog/2006/10/18/business-rules-and-requirements/">the difference between business rules and business requirements</a>) that affect and constrain each requirement.  This is easier to see when the requirements are atomic. These two atomic requirements may be rewritten as follows:</p>
<ol>
<li>The system must record all purchases on the same day that they are created, recording information per [BR117: Purchase Data Rules].</li>
<li>The system must submit all recorded purchases to the fulfillment system for processing per [BR231: Fulfillment System Data Interchange Specification].</li>
</ol>
<p>These additional constraints are not non-atomic additional requirements, they are constraints that specify <em>how</em> the system must perform the atomic actions.</p>
<p><img class="alignnone" title="connected atoms - representing requirements traceability" src="http://sehlhorst.smugmug.com/Other/blog/connected-atoms/1005966204_i6K49-O.jpg" alt="" width="250" height="187" /></p>
<p>The previous examples allude to another key benefit of atomicity &#8211; clean traceability.  Each requirement (or user story) exists to support one or more goals.  Requirements traceability can get complex, when many goals are dependent upon multiple requirements to be realized and many requirements enable multiple goals.  This approach to representing <a title="Goal decomposition with Ishikawa diagrams" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">goal-decomposition</a> (or <a title="user story decomposition" href="http://tynerblain.com/blog/2007/06/27/benefits-of-agile-stories/">user story decomposition</a>) is critical to assuring that you are <a title="Writing Valuable Requirements" href="http://tynerblain.com/blog/2009/07/29/valuable-requirements/">writing valuable requirements</a>.</p>
<p>The simple version of traceability can be visualized with this <a title="structured requirements introduction" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">view of structured requirements</a>, presenting (and slightly extending) some of <a title="Process Impact - Karl Wiegers" href="http://www.processimpact.com/">Karl Wiegers&#8217; work</a> on requirements.  If you&#8217;re doing any work in requirements of any kind, you need to read Karl&#8217;s stuff &#8211; his <em><a title="Software Requirements, Karl Wiegers" href="http://www.amazon.com/dp/0735618798?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0735618798&amp;creative=373489&amp;camp=211189">Software Requirements</a></em> is a must-have.</p>
<p><img class="alignnone" title="requirements structure" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" alt="" width="567" height="450" /></p>
<p>This diagram makes it seem pretty straightforward.  Where it gets messy is when the multi-goal-per-requirement and multi-requirement-per-goal dependencies (that always exist) turn it from a simple tree into a complex graph.  Non-atomic requirements make that graph messier (a hassle, but not a problem)as each &#8220;requirement that is really multiple requirements&#8221; ads extra dependency relationships to your traceability model.  This becomes a <em>problem</em>, however, when you need to change.</p>
<p>Every project has implementation tasks that take longer than originally expected.  Using a t<a title="timeboxes for scheduling" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">ime-box approach to managing the content of each release</a> gives you a straightforward framework for determining how much stuff will be delivered in each release.  When you have to slip something, you have to revisit prioritization.  With well-defined requirements, each valuable requirement that could be delivered provides value by enabling users (or systems as users) to achieve a goal.  When you have to delay the implementation of a requirement, you delay the goals that it supports.</p>
<p>As soon as you realize you are considering delaying <em>part of a requirement</em>, that is a red flag that your requirement is not atomic.</p>
<p><strong>Atomic Requirements Simplify Operations</strong></p>
<p>Atomic requirements allow you to make these on-the-fly prioritization decisions with <em>much better insight</em> into the resultant delay in value.  This allows you to better manage communication with your stakeholders &#8211; validating that you are delaying the realization of the right goals.</p>
<p>The same benefits apply when originally planning your software iterations and releases.  Conceptually, you can imagine &#8220;scheduling&#8221; <em>everything</em> for the first release, immediately discovering that <em>most things</em> need to slip to future releases.  That&#8217;s how most* software projects really play out.</p>
<p>*There are times when you intentionally delay particular capabilities, based on external factors &#8211; market positioning, customer-adoption cadences, sales-team capacity (to absorb change), etc.</p>
<h2>Conclusion</h2>
<p><strong>Writing atomic requirements helps you</strong></p>
<ul>
<li>Organize and describe <em>why</em> you are asking the team to build what they are building, and <em>how</em> stakeholders will benefit from what will be built.</li>
<li>Understand the <em>assignable value</em> of each requirement by maximizing clarity in the dependency tree &#8211; each requirement is in place for specific reasons.</li>
<li>Communicate the relevance of each requirement to the implementation team &#8211; informing cost-benefit discussions around the inevitable schedule-change discussions.</li>
<li>Test the deliverables &#8211; atomic requirements get graded as pass-fail, not &#8220;X% working.&#8221;</li>
</ul>
<p>Attributions:</p>
<ul>
<li>Thanks <a title="Clix on sxc" href="http://www.sxc.hu/profile/clix">clix </a>for both &#8220;atomic&#8221; photos!</li>
</ul>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Atomic+Requirements+http%3A%2F%2Fbit.ly%2F9OCVmS+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2010/09/14/atomic-requirements/&amp;t=Atomic+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/09/14/atomic-requirements/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Sprint Backlog &#8211; Don&#8217;t Solve Half of the Problem</title>
		<link>http://tynerblain.com/blog/2010/09/08/sprint-backlog-splitting-user-stories/</link>
		<comments>http://tynerblain.com/blog/2010/09/08/sprint-backlog-splitting-user-stories/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 15:19:28 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[backlog]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[sprint]]></category>
		<category><![CDATA[user story decomposition]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1305</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F09%2F08%2Fsprint-backlog-splitting-user-stories%2F", "shorturl": "http://bit.ly/9aC0aX", "style": "big", "title": "Sprint Backlog - Don't Solve Half of the Problem" }); Every team that transitions to agile faces this problem &#8211; some stories are too big to fit in a single sprint.  Most of the teams that I have worked with have the wrong instinct &#8211; to solve [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2010%252F09%252F08%252Fsprint-backlog-splitting-user-stories%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9aC0aX%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Sprint%20Backlog%20-%20Don%27t%20Solve%20Half%20of%20the%20Problem%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F09%2F08%2Fsprint-backlog-splitting-user-stories%2F", "shorturl": "http://bit.ly/9aC0aX", "style": "big", "title": "Sprint Backlog - Don't Solve Half of the Problem" });</script></div>
<p><img class="alignnone" title="half a coin" src="http://sehlhorst.smugmug.com/Other/blog/coin/999585259_ZZZWM-O.jpg" alt="" width="250" height="175" /></p>
<p>Every team that transitions to agile faces this problem &#8211; some stories are too big to fit in a single sprint.  Most of the teams that I have worked with have the wrong instinct &#8211; to solve half of the problem for all users.</p>
<p>The right approach is to first solve all of the problem for a subset of the users.</p>
<p><span id="more-1305"></span></p>
<h2>The Goal of the Story</h2>
<p>User stories were created as lower-overhead use cases that served to better describe chunks of valuable software that could be rapidly developed, delivered, reviewed, used, and improved.  Writing user stories that undermine that intent &#8211; rapid, valuable, incremental delivery &#8211; is a bad way to write user stories.</p>
<p>Imagine you are part of the team building GoToAssist, a product designed to do this.  Your product manager and product owner put the following story into the top of your backlog &#8211; it is the most valuable capability you could add.</p>
<p><strong>As a provider of IT support, I need to remotely resolve issues on multiple computers simultaneously, every day, so that those computers will run well. </strong></p>
<p>The acceptance criteria include requiring that the solution working when accessing Apple computers, and PCs running various versions of windows and Linux.  Other acceptance criteria include allowing the solution to work well through network connections having minimum characteristics, not requiring the remote users to take action, and other elements that characterize what would be considered acceptable solutions by the stakeholders.</p>
<p>Your team immediately raises a red flag that <a title="Using timeboxes to schedule delivery" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">this user story is &#8220;too big&#8221; for a single sprint</a>.</p>
<p>Since the goal of the sprint is to deliver valuable, shippable software, you have a problem with any user story that cannot be <a title="What happens inside a Scrum sprint" href="http://tynerblain.com/blog/2010/08/24/inside-a-scrum-sprint/">completed within a single sprint</a>.</p>
<p><strong> No problem, just decompose the user story into smaller user stories&#8230;</strong></p>
<h2>Inside-Out User Stories (Bad)</h2>
<p>Note: Don&#8217;t confuse <em>making smaller user stories</em> with <em><a title="Decomposing user stories into tasks" href="http://tynerblain.com/blog/2007/06/27/benefits-of-agile-stories/">defining the tasks required to implement a user story</a></em>. Task definition is important and valuable for helping the development team organize their activities.  Making <em>smaller</em> user stories is not a good approach for organizing the team&#8217;s activities &#8211; use tasks instead.  The size and structure of user stories should align with the user&#8217;s goals.</p>
<p>An inside out perspective or approach is one that starts with an awareness of what is involved in creating the software, and either never, or only later considers the perspective of what it is like use the software.</p>
<p>When approaching the problem inside-out, you will break the story down as follows:</p>
<ol>
<li> As a provider of IT support, I need to remotely gain access to multiple computers simultaneously&#8230;</li>
<li>As a provider of IT support, I need to remotely authenticate as an administrator to each computer I access&#8230;</li>
<li>As a provider of IT support, I need to remotely control each computer I access&#8230;</li>
<li> As a provider of IT support, I need to remotely restore control of each computer&#8230;</li>
</ol>
<p>This approach looks very appealing, because it is very clear what has to be done to support each new user story, and each new user story is appreciably smaller.  Assume that each new user story is &#8220;small enough&#8221; for the team and does not need to be further reduced in size.  It is very easy to see how the scope of development work has been reduced for each user story.</p>
<p>The problem shows up when you approach this schedule from a user&#8217;s perspective.  Imagine that this product shipped with only stories 1 &amp; 2, and not 3 &amp; 4.  How useful would the user find the product to be if she could remotely access a computer and authenticate, but not actually control the computer (to do her remote support work) or return control to the computer&#8217;s owner?</p>
<p><img class="alignnone" title="pieces" src="http://sehlhorst.smugmug.com/Other/blog/pieces-small/999624114_CRNZ3-O.jpg" alt="" width="250" height="217" /></p>
<p>The reason you should <em>not </em>break the original user story up into these pieces is that the new stories do not independently represent delivery of <a title="Write Valuable Requirements" href="http://tynerblain.com/blog/2009/07/29/valuable-requirements/">valuable</a> software.  These proposed smaller user stories are atomic (each step is discrete), but each step has no independent value.  The value is implicit in the sequence of steps, and is only realized when all four steps can be completed.  The original story is already <a title="Writing Complete User Stories" href="http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/">the smallest set of activities that allow the user to achieve his goal &#8211; a complete user story</a>.</p>
<p>The problem with decomposing the original user story from the inside-out is that the new user stories don&#8217;t provide independent value to any of the users.</p>
<p><strong> What about trying an approach that provides all of the value to some of the users?</strong></p>
<h2>Outside-In Story Decomposition (Good)</h2>
<p><img class="alignnone" title="IT support specialist persona" src="http://sehlhorst.smugmug.com/Other/blog/techie-face-small/60909507_JW6SB-O.jpg" alt="" width="165" height="250" /></p>
<p>You are still faced with the challenge of making the story smaller, but now with the constraint of only delivering pieces that provide independent value.  You need an approach that will work to split the story up per-user.  &#8220;Provider of IT support&#8221; is an overly broad category of users &#8211; it is heterogeneous, within which different groups of users will use the product differently.  I am a &#8220;provider of IT support&#8221; to my family, but I never have a need to access multiple computers simultaneously.  I also don&#8217;t need to do this more than once a month on average.  A corporate IT specialist responsible for 100 users would really benefit from simultaneous remote access to multiple machines &#8211; allowing her to multi-task, starting updates on a second machine while the first machine is working, etc.</p>
<p><img class="alignnone" title="Normal person persona" src="http://sehlhorst.smugmug.com/Other/blog/middle-aged-woman-small/60909472_YTZuH-O.jpg" alt="" width="250" height="234" /></p>
<p>There are at least two different personas that care about the &#8220;remote administration&#8221; user story, within the &#8220;provider of IT support&#8221; user category.  One persona who needs to access only one machine at a time, and one persona who needs to access multiple machines simultaneously.  This split allows you to decouple all of the work associated with managing simultaneous connections from the work associated with the sequence of steps (as applied through a single connection).  This may reduce the size of the original user story enough to complete it in one sprint, but probably not, since it only &#8220;shaves off a little work.&#8221;</p>
<p>Another way to discover different sets of people who could benefit from delivering the user story differently is to look at the acceptance criteria.</p>
<p>Right off the bat, we&#8217;ve called out that the solution needs to work when the remotely accessed computers are running several different operating systems.  You can make the user story smaller by constraining to one supported platform at a time.  Whichever platform you pick first &#8211; say Linux &#8211; has some users who will value your solution.  Start with them, then add another platform.  Work with the product manager to determine how many customers in the market will require each platform or combination of platforms &#8211; that will guide the sequence in which you build support for each platform.</p>
<p>Another acceptance criteria required that the remote users not need to be involved &#8211; enabling &#8220;unattended&#8221; remote support &#8211; a key market differentiator.  A key differentiator for the corporate IT specialist persona, who gets value from not having to coordinate support activities with multiple remote users.  In fact, it is probably a must-have feature for those customers.  As a family-support specialist, I don&#8217;t really have this need.  My mom is going to call me, and I can fix her pc while we&#8217;re on the phone.  I&#8217;m not trying to remotely administer her machine when a corporate policy has changed (on my schedule) &#8211; I&#8217;m doing it when a problem arises (on her schedule).  This criteria can be deferred for a later iteration of the story</p>
<p>This approach works because, while it may be not be intuitive (from the inside) that this is a viable way to decompose the story, it makes send from an outside-in, user perspective.  Think about the different sources of value / problems, and how <a title="Kano analysis" href="http://tynerblain.com/blog/2009/09/28/kano-analysis-for-product-managers/">different people value solutions to the same problems differently</a>.  The important characteristics of the problem will vary from one persona to another.</p>
<h2>What About Development Efficiency?</h2>
<p>As a developer, you may very correctly complain that this is a really inefficient development process.  Some portion of the work done to enable controlling a single machine may need to be discarded and recreated in order to control multiple machines in parallel.</p>
<p>While these extra development costs are very visible, especially to developers, they are much smaller than the benefits that come from delivering the working software earlier.  The cost of resolving bugs increases by orders of magnitude as you move through the product creation life cycle (from development to testing to deployment).  The value of solutions also increases by orders of magnitude as they move through the process.  Getting working product deployed earlier allows you to start realizing value (and therefore revenue) earlier.</p>
<p>That increase in revenue far outweighs the cost of a less-efficient development approach.  Ignoring revenue side and focusing only on the cost side is being penny-wise but pound-foolish.</p>
<h2>Dogma and Pragmatism</h2>
<p><img class="alignnone" title="Rodin's Thinker" src="http://sehlhorst.smugmug.com/Other/blog/thinker-small/999631679_KXbxN-O.jpg" alt="" width="250" height="187" /></p>
<p>None of this should be taken as dogma.  My experience has been that this approach has almost always worked, sometimes requiring more radical thinking than others.  When it does not work (e.g. does not provide additional value, or does not sufficiently reduce the size of the stories), don&#8217;t do it.  I&#8217;ll always remember Kent Beck saying to me &#8211; &#8220;If it costs more to test (in advance) than it costs to fix the bugs (after the fact), then don&#8217;t test.&#8221;</p>
<p><strong> The same applies here, be pragmatic about it.</strong></p>
<p>If you&#8217;ve been biting your tongue since the middle of the &#8220;Inside-Out&#8221; section, because you can always just wait until all four user stories are completed in separate sprints, before releasing the software, then my apologies.  Of course you can do that.  But you are undermining a precept of Scrum &#8211; that every sprint could be released, if you needed to release it.</p>
<p>That may not apply to you &#8211; I work with some teams that develop enterprise software, and for them, releasing every sprint makes no sense &#8211; their customers can&#8217;t absorb the rapid improvements, their sales teams aren&#8217;t willing to sell differently, etc.  So, please forgive me, and go back and read the <em>Outside-In</em> section again, since you were probably ignoring that section as you started planning a great comment about this.</p>
<p>Who knows &#8211; a &#8220;too big&#8221; user story may appear in the backlog for the last sprint within your current release &#8211; wouldn&#8217;t it be great if you had the choice to release something (valuable) in the current release?</p>
<p>Think about this problem from an outside-in perspective.  The smallest story is one that allows a single customer to perform a single task, for which he will pay you.</p>
<h2>People Over Process &#8211; Conclusion</h2>
<p><strong>The objective that every sprint deliver valuable, working software, is not a </strong><em><strong>requirement</strong></em><strong>.  It is a </strong><em><strong>design principle</strong></em><strong> of the Scrum process. </strong></p>
<p>Agile is not about mandating processes, it is about getting better and faster.  When you can&#8217;t reasonably decompose a story into something that can be delivered in a single sprint, don&#8217;t.  You can have a sprint where you don&#8217;t deliver anything, because you only complete part of one thing.  Yes, it will look bad on the burn-down chart.</p>
<p>Will it mess with your velocity?  A bit.  But who cares?  Velocity is a measurement that helps inform projected delivery schedules.  You may have one sprint with zero velocity, but in the next sprint, when you do deliver the &#8220;two sprint story&#8221;, you&#8217;ll have double the velocity.  Magically, your running average is back to normal.</p>
<p><strong>Don&#8217;t let the rulers you use to measure the team&#8217;s output cause you to act irrationally.</strong></p>
<p>Attributions:</p>
<ul>
<li>Thanks to <a title="Half a Coin" href="http://www.flickr.com/photos/8510225@N07/2217689909/">John Loo</a> for the half-a-coin image.</li>
<li>Thanks to <a title="puzzle" href="http://commons.wikimedia.org/wiki/File:Mech_puzzle_3_disassembled.jpg">Handige Harry</a> for the puzzle pieces image.</li>
</ul>
<p> </p>
<p><!--3809b58eddb5482091df67fd19a9eaf4--></p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Sprint+Backlog+%E2%80%93+Don%E2%80%99t+Solve+Half+of+the+Problem+http%3A%2F%2Fbit.ly%2F9aC0aX+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2010/09/08/sprint-backlog-splitting-user-stories/&amp;t=Sprint+Backlog+%E2%80%93+Don%E2%80%99t+Solve+Half+of+the+Problem" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/09/08/sprint-backlog-splitting-user-stories/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Inside A Scrum Sprint</title>
		<link>http://tynerblain.com/blog/2010/08/24/inside-a-scrum-sprint/</link>
		<comments>http://tynerblain.com/blog/2010/08/24/inside-a-scrum-sprint/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 04:06:22 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[user stories inside a scrum sprint]]></category>
		<category><![CDATA[user story]]></category>
		<category><![CDATA[user story life cycle]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1279</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F08%2F24%2Finside-a-scrum-sprint%2F", "shorturl": "http://bit.ly/aSWSqO", "style": "big", "title": "Foundation Series: Inside A Scrum Sprint" }); People who already use Scrum will only find one new thing in this article &#8211; a way to communicate what happens inside a sprint that has proven effective for me.  People who are new to Scrum who wonder &#8220;how do things [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2010%252F08%252F24%252Finside-a-scrum-sprint%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FaSWSqO%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Foundation%20Series%3A%20Inside%20A%20Scrum%20Sprint%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F08%2F24%2Finside-a-scrum-sprint%2F", "shorturl": "http://bit.ly/aSWSqO", "style": "big", "title": "Foundation Series: Inside A Scrum Sprint" });</script></div>
<p><img class="alignnone" title="Scrum Classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" alt="Photo of students in a classroom, learning scrum" width="250" height="195" /></p>
<p>People who already use <a title="Scrum introduction" href="http://www.mountaingoatsoftware.com/topics/scrum">Scrum </a>will only find one new thing in this article &#8211; a way to communicate what happens <em>inside</em> a sprint that has proven effective for me.  People who are new to Scrum who wonder &#8220;<em>how do things work inside a sprint?&#8221;</em> will see how things work in a way that avoids hyperbole and is easy to map to what they already understand from traditional software development processes.</p>
<h2><span id="more-1279"></span>Two Teams Separated by a Common Process</h2>
<p><img class="alignnone" title="George Bernard Shaw" src="http://sehlhorst.smugmug.com/Other/blog/GBS-small/980999434_zHDRi-O.jpg" alt="" width="187" height="250" /></p>
<p>George Bernard Shaw was <a title="George Bernard Shaw" href="http://en.wikipedia.org/wiki/George_Bernard_Shaw">an Irish author in London </a>who memorably said &#8220;<em>England and America are two countries separated by a common language.</em>&#8221;  The same can be said about teams developing in agile and waterfall processes.</p>
<p>The story of agile adoption is one that has many colorful examples of adoption and of <em>spreading the gospel</em>.  Some practitioners traveled across the ocean from the agile continent to the lands of agile and opportunity to reap the rewards.  A few of those, after realizing the benefits of agile, invade our consciousness with a <em>hellfire and brimstone tale of doom</em> for anyone who doesn&#8217;t convert to the new religion.</p>
<p>Others seem hell-bent on kidnapping entire development teams, smuggling them across the ocean in the belly of steamer ships and unceremoniously dumping them in the land of agile, ready or not.  Scrum is but one branch of the agile movement.</p>
<p>Stalwarts of <em>the old way, which has worked fine </em>for me<em>, thank you very much</em>, refuse to leave their comfortable lives to step into the unknown wilds of agile.  Open-minded but responsible potential converts ask questions to gain an understanding of what life in the new world might be like.  <em>What will life be like if I join this Scrum congregation?</em></p>
<h2>How Does Scrum <em>Really</em> Work?</h2>
<p>The <a title="Scrum by MountainGoat Software" href="http://www.mountaingoatsoftware.com/topics/scrum">best explanations of how scrum works</a> that I&#8217;ve read come from <a title="Mike Cohn" href="http://www.mountaingoatsoftware.com/company/about-mike-cohn">Mike Cohn</a> and <a title="Mountain Goat Software" href="http://www.mountaingoatsoftware.com/">Mountain Goat Software</a>.  The training, videos, and explanations they share provide fantastic top-down introductions (as well as guidance after adopting Scrum).  His book, <em><a title="User Stories Applied" href="http://www.amazon.com/dp/0321205685?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0321205685&amp;creative=373489&amp;camp=211189">User Stories Applied</a></em>, is the ultimate reference when gaining an understanding of the mechanics of using user stories as the central artifacts for developing software with scrum.</p>
<p><img class="alignnone" title="Scrum process, from Mountain Goat Software" src="http://sehlhorst.smugmug.com/Other/blog/ScrumSmallLabelled/981015853_PJtuQ-O.png" alt="" width="399" height="188" /> [<a title="Scrum Process from Mountain Goat Software" href="http://sehlhorst.smugmug.com/Other/blog/ScrumLargeLabelled/981015855_M3hzW-O.png">larger image</a>]</p>
<p>The process diagram above provides a good outside-in, top-down view of how &#8220;this newfangled process&#8221; results in shippable product, incrementally.  It is a great way to present the concept of Scrum, and incremental development in general.</p>
<p>When people I&#8217;ve worked with first gain this understanding, they often ask, what are the artifacts that live in these backlogs?  User stories live there.  Sometimes <a title="Use Cases vs User Stories" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">use cases make more sense than user stories for Scrum</a>- it depends (read the article to see which works best in your circumstance).  The common element is an <a title="Outside-In Software Development" href="http://tynerblain.com/blog/2007/09/27/outside-in/">outside-in</a>, <a title="User Centered Design" href="http://tynerblain.com/blog/2007/02/22/user-centered-design-bridge/">user-centric approach</a> to describing <em>which problems the software is intended to solve</em>.  This is also known as <a title="Goal Driven vs. Feature Driven development" href="http://tynerblain.com/blog/2006/08/09/features-or-goals/">goal-driven development</a>.</p>
<p>Once people understand the top-down view of the process, and have an idea of what user stories are, the next question they tend to ask is &#8220;how do stories move through the Scrum process?&#8221;</p>
<p>The first attempt at answering this question leans on the process diagram above:</p>
<ol>
<li>The product owner takes the most important stories from the <em>product backlog</em> and puts them into the <em>sprint backlog</em> &#8211; collaborating with the team to agree on the scope of work for <em>this</em> sprint (based on the amount of work, capacity of the team, real-world constraints, etc).</li>
<li>The team &#8220;<strong>works the stories</strong>&#8220;, meeting every day to communicate effectively and provide progress updates &#8211; best visualized with <a title="modified burndown chart" href="http://www.mountaingoatsoftware.com/scrum/alt-releaseburndown">a burndown chart</a>.  This chart says &#8220;we started with X work to do, and every day, we track how much of X remains to be done.&#8221;</li>
<li>At the end of the sprint, the work is done, and the software (or an update to the software) is ready to deliver.</li>
<li>Sometimes, multiple sprints happen between <em>releases</em> &#8211; launches of the updated software, because customers (and the rest of your organization) incur a cost when changing to the latest version.  But the output of each sprint <em>is deliverable</em> &#8211; that&#8217;s a key concept &#8211; even if you choose not to deliver it just yet.</li>
</ol>
<h2>What Does it Mean to <em>Work The Stories</em>?</h2>
<p>I&#8217;ve repeatedly had people ask, after absorbing the above explanation, &#8220;what does it mean to <em>work the stories</em>?&#8221;</p>
<p>I&#8217;ve had consistent success (in bridging the language divide) using the following diagrams (drawn on a whiteboard) to explain how stories flow through the sprint process in Scrum.</p>
<p>The first diagram shows that user stories have a structure &#8211; the story itself, and the acceptance criteria for the story. I also establish that the story is going to go through a life cycle within the sprint.</p>
<p><img class="alignnone" title="User Stories have structure and a lifecycle" src="http://sehlhorst.smugmug.com/Other/blog/201008242b/981774852_PbBwD-O.png" alt="" width="450" height="320" /> [<a title="anatomy of a user story inside a sprint" href="http://sehlhorst.smugmug.com/Other/blog/201008242/981808359_QsSxE-O.png">larger image</a>]</p>
<p>Next I remind folks that the user stories make it into the sprint backlog because they are the most important (highest priority) not-yet-implemented stories in the product backlog.</p>
<p><img class="alignnone" title="user stories in a sprint backlog" src="http://sehlhorst.smugmug.com/Other/blog/201008243b/981774888_7nARd-O.png" alt="" width="450" height="320" />[<a title="user stories in the sprint backlog come from the top of the product backlog" href="http://sehlhorst.smugmug.com/Other/blog/201008243/981808388_aWcsJ-O.png">larger image</a>]</p>
<p>Developers on the team <em>pull</em> stories from the sprint backlog and begin working on them.  These stories are <em>work in progress</em>, and are owned by individuals.  Some teams maintain that priority order within the sprint backlog (e.g. implement the most important story in the sprint first, etc.), while other teams use a more coarse-grained approach, relying on the product backlog prioritization to assure that everything in <em>this</em> sprint is the next most important stuff, and the order that the team implements, within the sprint, is up to the team.  Some folks like to strenuously debate this decision (<a title="Don't prioritize within sprints" href="http://agile.dzone.com/articles/scrum-anti-pattern">don&#8217;t prioritize within sprints</a> vs. <a title="Do prioritize within sprints" href="http://availagility.co.uk/2010/01/20/scrum-anti-pattern-not-prioritising-stories-within-sprints/">do prioritize within sprints</a>).  Both approaches are valid, and you should choose the right one for <em>your </em>team.</p>
<p><img class="alignnone" title="individuals pull stories from the backlog" src="http://sehlhorst.smugmug.com/Other/blog/201008244b/981774926_aBAn7-O.png" alt="" width="450" height="320" />[<a title="individuals pull stories from the backlog inside the sprint" href="http://sehlhorst.smugmug.com/Other/blog/201008244/981808413_QhD53-O.png">larger image</a>]</p>
<p>As each user story owner believes that her work is complete (all unit tests pass, and the developer believes that the acceptance criteria have been met), the story is ready to be tested by QA.  This step, in particular, helps people who are new to scrum and who think of things as &#8220;code and test&#8221;, to make some sense of the inner workings of a sprint.  When working with a team that was under-staffed in the QA department, I discovered that calling out this queue of user stories waiting to be tested helped convince management to increase QA investment in the team.  When too many stories pile up here, you know you have a problem.</p>
<p><img class="alignnone" title="completed user stories are queued up for QA" src="http://sehlhorst.smugmug.com/Other/blog/201008245b/981774942_xRKCT-O.png" alt="" width="450" height="320" />[<a title="user stories are queued for qa inside a sprint" href="http://sehlhorst.smugmug.com/Other/blog/201008245/981808440_kRCjz-O.png">larger image</a>]</p>
<p>The scrum team member responsible for testing the user story has the responsibility of assuring that it meets all of the acceptance criteria.  He pulls the story from the queue of &#8220;done&#8221; stories, and tests.</p>
<p><img class="alignnone" title="testing a user story within a sprint" src="http://sehlhorst.smugmug.com/Other/blog/201008246b/981774960_LBRof-O.png" alt="" width="450" height="320" />[<a title="qa rejecting a user story inside a sprint" href="http://sehlhorst.smugmug.com/Other/blog/201008246/981808480_22dSS-O.png">larger image</a>]</p>
<p>If the story fails to meet any of the acceptance criteria, it moves back into either the <em>sprint backlog</em> or the <em>being developed</em> column, where a member of the team resumes ownership of the user story and works to resolve the issue.  Once the issue is resolved, the user story is re-queued for testing.  When the user story meets the acceptance criteria, it is moved into the <em>done done</em> column.</p>
<p><img class="alignnone" title="user stories that are done done" src="http://sehlhorst.smugmug.com/Other/blog/201008247b/981774980_e85hf-O.png" alt="" width="450" height="320" />[<a title="lifecycle of a user story in a scrum sprint" href="http://sehlhorst.smugmug.com/Other/blog/201008247/981808535_CeNJf-O.png">larger image</a>]</p>
<h2>Conclusion</h2>
<p>If you are new to Scrum, and wondered how the sausage is made inside a sprint, this gives you a framework for understanding what is going on, and how the team delivers.  If you already know or use Scrum, you may have learned a couple things.</p>
<ul>
<li>Using this framework to describe how a sprint works is effective when explaining to people who do not have any experience with agile.</li>
<li>Laying things out this way visually, will give you an easy-to-see signal if your team is unbalanced between developers and testers.</li>
</ul>
<p>I&#8217;ve been involved with agile teams and processes for just over 11 years now, and incremental development is burned into my brain.  If you are new to scrum, <em>please</em> let me know if this seemed like a good way for you to consume this material.  If you&#8217;re an old hat, and have other suggestions or presentations, please add them in the comments below, because future readers will benefit from the additional ideas.</p>
<p> </p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Foundation+Series%3A+Inside+A+Scrum+Sprint+http%3A%2F%2Fbit.ly%2FaSWSqO+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2010/08/24/inside-a-scrum-sprint/&amp;t=Foundation+Series%3A+Inside+A+Scrum+Sprint" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/08/24/inside-a-scrum-sprint/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Measuring Great Design &#8211; Mad Libs Input Form</title>
		<link>http://tynerblain.com/blog/2010/03/01/measuring-interaction-design/</link>
		<comments>http://tynerblain.com/blog/2010/03/01/measuring-interaction-design/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 05:20:02 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[measuring ux]]></category>
		<category><![CDATA[return on investment]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1174</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F03%2F01%2Fmeasuring-interaction-design%2F", "style": "big", "title": "Measuring Great Design - Mad Libs Input Form" }); I came across a really interesting article LukeW.com, showing how making changes to the way an input form on a website increased interaction by 25 to 40%. The changes reflect the value of thinking outside-in, investing in user experience, and [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2010%252F03%252F01%252Fmeasuring-interaction-design%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Measuring%20Great%20Design%20-%20Mad%20Libs%20Input%20Form%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F03%2F01%2Fmeasuring-interaction-design%2F", "style": "big", "title": "Measuring Great Design - Mad Libs Input Form" });</script></div>
<p><img class="alignnone" title="mad libs pads" src="http://sehlhorst.smugmug.com/Other/blog/mad-libs-on-table/800579804_irVsp-O.jpg" alt="image of mad libs pads" width="250" height="187" /></p>
<p>I came across a really interesting article <a title="LukeW" href="http://www.lukew.com/">LukeW.com</a>, showing how making changes to the way an input form on a website increased interaction by 25 to 40%.  The changes reflect the value of thinking outside-in, investing in user experience, and performance measurement.</p>
<p>Bonus: the idea is cool.</p>
<p><span id="more-1174"></span></p>
<h2>Mad Libs Input Form</h2>
<p><img class="alignnone" title="mad libs form example" src="http://sehlhorst.smugmug.com/Other/blog/mad-libs-small/800576580_TZurw-O.png" alt="before and after screenshot of mad libs input form redesign" width="250" height="237" />[<a title="luke's article on mad libs input form" href="http://www.lukew.com/ff/entry.asp?1007">full size image available in Luke's article</a>]</p>
<p>The idea being presented is to replace the old boring web input form designed for a computer.  The new, fun form is a fill-in-the-blank (aka Mad Libs) layout.  The <a title="mad libs web form" href="http://www.lukew.com/ff/entry.asp?1007">article </a>is on <a title="About Luke" href="http://www.lukew.com/about/index.asp">Luke Wroblewski&#8217;s</a> site.  The team at Vast.com created and tested a version of this form for the Kelly Blue Book site.  [Luke cites Huffduffer.com as the first place where he saw this technique.] Thanks, Luke for sharing this with all of us!</p>
<h2>Outside-In Development</h2>
<p>Product managers are acutely aware of the need to solve market problems.  We are regularly reminded that we&#8217;re creating solutions for people in our markets who use our products to solve their problems. When we write requirements, we avoid writing design specifications, and thereby lose the ability to enforce that the proposed solutions also take an outside-in approach.  We <a title="prioritization example from an outside-in perspective" href="http://tynerblain.com/blog/2009/10/19/agile-prioritization/">maintain an outside-in perspective</a>, but we lost the ability to influence an outside-in aesthetic.</p>
<p>Note: Outside-In Software Development is a great book, <a title="outside-in software development book review" href="http://tynerblain.com/blog/2007/09/27/outside-in/">you should read it</a>.</p>
<p>That&#8217;s one area where user experience works well in concert with product management &#8211; assuring that the same drivers of <em>what</em> to build are informing the design of <em>how</em> it is built.</p>
<p>The genius (or at least elegance) of this Mad Libs form from Vast  / Kelly Blue Book is that it humanizes the experience of requesting that a nearby dealer contact you to discuss a possible purchase of a car from them.  The forms we&#8217;ve all had to fill out on countless web sites are very <em>inside-out</em>.  They expose the inner workings of the program &#8211; &#8220;gather this info, and that info, and this other info.&#8221;  Those forms force users to do what the program wants.  Blech.  The form that Ron Kurti designed, however, forces the program to do what the users want.  Huzzah!</p>
<h2>Bad Requirements Prevent Elegance</h2>
<p>I&#8217;ve written about the importance of <a title="writing requirements without design" href="http://tynerblain.com/blog/2009/11/03/design-free-requirements/">writing design-free requirements</a> several times.  Avoiding design constraints in your requirements is even one of the pillars of the <a title="twelve rules of writing good requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">big 10 rules of writing requirements</a>.</p>
<p>If you had written the requirements for this <em>contact the dealer</em> page, would you have specified the design of the form?</p>
<p>Most of the requirements analysts I&#8217;ve worked with would have.  I&#8217;ve even worked with companies that have developed templates / stencils defining <em>how</em> these interface specifications must be documented &#8211; requiring that all the fields be aligned, with specific pixel gaps, etc.</p>
<p>If you had specified the design (read: limited the choices of the designer), you would have prevented this solution.</p>
<p>Mr. Kurti&#8217;s elegant solution is clearly better.</p>
<p>One way to write the requirements that would not have prevented this solution would be with a <a title="user stories compared to use cases" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">user story and acceptance criteria</a>:</p>
<blockquote><p>As a car-shopper, I want to engage a car dealer, once every few years, so that I can purchase the car I selected.</p>
<ul>
<li>The car-shopper can provide his contact info (name, email, phone) for the car dealer.</li>
<li>The system will display the information identifying the selected vehicle.</li>
<li>The system will display the information identifying the dealer being contacted.</li>
<li>The system will include an opt-in newsletter-subscription option.</li>
<li>The system will notify the specified dealer when the car-shopper indicates.</li>
</ul>
</blockquote>
<p>The user story nudges the developers into an outside-in perspective by emphasizing the <a title="user goals vs corporate goals" href="http://tynerblain.com/blog/2009/06/22/user-goals-and-corporate-goals/">user&#8217;s goal</a>.  The <a title="acceptance criteria can be testable, non-functional requirements" href="http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/">acceptance criteria</a> make it clear that <em>any</em> solution that meets those criteria is acceptable to the product manager.  It allows the interaction designer to create a compelling solution, rather than forcing him to recreate a boring experience.</p>
<h2>Measurement Rocks</h2>
<p>The Vast team measured the impact of making this change to their form, and saw between a 25% and 40% increase in conversion (people contacting dealers versus people abandoning the process when they see the form).  That&#8217;s <strong>a</strong> <em><strong>lot</strong></em><strong> more leads</strong> for the dealers, and presumably a lot more money for Kelly Blue Book and Vast.  This is a great example of how you can <a title="measuring the ROI of design" href="http://tynerblain.com/blog/2007/07/30/measuring-the-roi-of-design/">measure the impact of investing in user experience</a>, because it should spark ideas for you.</p>
<p><strong>What can you measure and test and improve?</strong></p>
<p><strong><span style="font-weight: normal;">Now <em>that&#8217;s </em><a title="definition of return on investment" href="http://tynerblain.com/blog/2006/02/01/definition-of-roi-return-on-investment/">ROI</a> for you.</span></strong></p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Measuring+Great+Design+%E2%80%93+Mad+Libs+Input+Form+http%3A%2F%2Fbit.ly%2FdeB9Po+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2010/03/01/measuring-interaction-design/&amp;t=Measuring+Great+Design+%E2%80%93+Mad+Libs+Input+Form" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/03/01/measuring-interaction-design/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Design-Free Requirements</title>
		<link>http://tynerblain.com/blog/2009/11/03/design-free-requirements/</link>
		<comments>http://tynerblain.com/blog/2009/11/03/design-free-requirements/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 16:16:06 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[big ten rules]]></category>
		<category><![CDATA[product management and design]]></category>
		<category><![CDATA[rules of requirements]]></category>
		<category><![CDATA[rules of writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1106</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F11%2F03%2Fdesign-free-requirements%2F", "style": "big", "title": "Design-Free Requirements" }); Design-Free requirements are important for two reasons, and hard for two other reasons. Design-free requirements are hard because you &#8220;know what you want&#8221; when you should be documenting &#8220;why you want it.&#8221;  Writing design-free requirements can be hard when you don&#8217;t trust your development team to [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2009%252F11%252F03%252Fdesign-free-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Design-Free%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F11%2F03%2Fdesign-free-requirements%2F", "style": "big", "title": "Design-Free Requirements" });</script></div>
<p><img class="alignnone" title="Design-Free Requirements Logo" src="http://sehlhorst.smugmug.com/photos/128628560-M.png" alt="" width="250" height="250" /></p>
<p>Design-Free requirements are important for two reasons, and hard for two other reasons.</p>
<p>Design-free requirements are hard because you &#8220;know what you want&#8221; when you should be documenting &#8220;why you want it.&#8221;  Writing design-free requirements can be hard when you don&#8217;t trust your development team to &#8220;do the right thing&#8221; even though it is not your job to design the solution.</p>
<h2><span id="more-1106"></span>Design-Free Requirements &#8211; Revisiting</h2>
<p><img class="alignnone" title="alphabet soup" src="http://sehlhorst.smugmug.com/photos/89784885-M.jpg" alt="" width="250" height="187" /></p>
<p>It has been three years since I wrote <em><a title="Separating Requirements from Design" href="http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/">Writing Design-Free Requirements</a></em> as part of <em><a title="The rules of writing requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">The Big Ten Rules of Writing Requirements</a></em>.  In that time, agile development practices have moved from being an esoteric development methodology to being the topic on the tips of everyone&#8217;s tongues as executives and organizations try to either (1) get the benefits of the state of the art in software-development process or (2) do something shiny and fashionable.</p>
<p>The previous article centered on elements of designs within MRD, PRD, and SRS artifacts.  A regular <a title="Alphabet Soup of Requirements Artifacts" href="http://tynerblain.com/blog/2006/08/24/alphabet-soup/">alphabet soup of artifacts</a>.  Honoring the <a title="agile manifesto - Alistair Cockburn speaks" href="http://tynerblain.com/blog/2006/05/10/agile-values-alistair-cockburn-on-the-agile-manifesto/">values behind the agile manifesto</a> encourages us to emphasize <em>working software</em> over <em>comprehensive documentation</em>.  In that light, we&#8217;ll take a &#8220;what is needed&#8221; approach to talking about how requirements, design, and implementation are all needed &#8211; rather than issue an edict about where that information should be captured.</p>
<h2>Agile Development Inputs</h2>
<p><strong>When creating software, someone needs to know:</strong></p>
<ul>
<li>What <a title="solve problems, don't address problem manifestations" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">problems are being solved</a>, and how important (valuable) they are to be solved.</li>
<li><a title="defining personas" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">Who has the problems</a> and who is using the software to (help) solve those problems.</li>
<li><a title="defining constraints" href="http://tynerblain.com/blog/2007/11/08/abilene-paradox/">What constraints limit the space</a> that defines the universe of possible viable solutions.</li>
<li>What <a title="nonfunctional requirements and acceptance criteria in agile" href="http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/">acceptance criteria</a> define if the delivered solution will be acceptable.</li>
</ul>
<p><strong>Subject to those inputs, someone needs to make design decisions:</strong></p>
<ul>
<li>User experience design -<a title="user interaction design" href="http://tynerblain.com/blog/2006/03/07/interaction-design-explained-by-alan-cooper/"> what interactions</a> will a user of our solution love?</li>
<li>Program design &#8211; how (in a nuts and bolts way) will our solution <a title="feature-driven design explained" href="http://tynerblain.com/blog/2006/03/27/foundation-series-feature-driven-development-fdd-explained/">function</a>?</li>
</ul>
<p>When talking about agile and talking about design, we should take a look at how Kent Beck and Alan Cooper, as respective though leaders in each space, view this.</p>
<blockquote><p>Cooper doesn’t talk much about creating the requirements to support the daily use scenarios – he proposes moving directly into design of the solution. This differs from the more traditional technique of <a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="Use cases are supported with functional requirements" href="http://tynerblain.com/blog/2006/02/10/writing-functional-requirements-to-support-use-cases/">writing functional requirements to support use cases</a>. Cooper also breaks down design into two components – program design and interaction design. Program design is everything you don’t see. Interaction design is everything you do see.</p>
<p>[...]</p>
<p>Cooper argues that designing the interaction should happen before any code is written. He uses a construction analogy to drive home his perspective – you can’t pour the concrete before you build the forms. Kent Beck, founder of the XP programming philosophy disagrees with the premise. Beck believes that the cost of changing software is low, and the imagery Cooper uses is hyperbole. We touch on, and <a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="Cooper vs Beck" href="http://tynerblain.com/blog/2006/03/07/interaction-design-explained-by-alan-cooper/">link to that debate in this post</a>.</p>
<p><cite><a title="Overview of the interaction design process" href="http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/">Interaction Design Process Overview</a></cite></p></blockquote>
<p>I don&#8217;t believe that Beck is arguing for &#8220;don&#8217;t do design&#8221; &#8211; I believe he is arguing for &#8220;don&#8217;t do <em>big upfront design</em> that would delay implementation.&#8221;  He&#8217;s championing the agile values that emphasize creating working software and responding to change.  I can imagine him saying &#8220;no one will buy a design, they want a solution.&#8221;  Cooper&#8217;s point is that create a solution without first understanding how someone will use it, you can&#8217;t create a great product.</p>
<p>Program design has many <em>hidden</em> impacts &#8211; cost of maintenance, cost to change, and the performance of the solution.  You can have a design (or architecture) that makes everything easier to do in the future &#8211; at the cost of delaying the delivery of anything.  Or you can have a design that minimizes the time to deliver the first thing, while increasing the cost to deliver any particular next thing.  Or you can design a solution that falls somewhere between those extremes.</p>
<p>If you say &#8220;we don&#8217;t do design&#8221; you&#8217;re lying.  Every solution includes design.  Your team&#8217;s design process may be &#8220;big and upfront&#8221; or it could be a couple sketches on a whiteboard, or some email exchanges.  You may create storyboards and wireframes.  Or design may be the thing that happens right before the programmer&#8217;s fingers strike the keys.  Design may be explicit or it may be implicit &#8211; but it never &#8220;doesn&#8217;t happen.&#8221;</p>
<p>In the movie Amadeus, Salieri is astounded that there are no rough drafts of Mozart&#8217;s compositions.  That&#8217;s because Mozart did the design in his head, not because he didn&#8217;t do design.  I&#8217;ve worked with programmers who&#8217;s &#8220;implicit designs&#8221; were great, but that is the <em>exception</em>, not the rule.</p>
<h2>Who Owns Design?</h2>
<p>Since design happens <em>sometime before fingers strike the keyboard</em>, the real question is &#8211; &#8220;who owns the design?&#8221;</p>
<ul>
<li>You have a product manager developing an understanding of market problems, and prioritizing the problems that should be solved with your product.</li>
<li>You may have a product owner managing the backlog and clarifying those requirements (problems) for the development team.</li>
<li>You may have an interface (or interaction) designer or team of designers who are broadly responsible for &#8220;how users interact with our products.&#8221;</li>
<li>You may have an architect or lead engineer who is responsible for the &#8220;big picture design&#8221; of how your product works.</li>
<li>You have developers and testers who are responsible for delivering your product. [Note: coding without testing is like typing code without compiling - <em>maybe</em> it works, but probably not.]</li>
</ul>
<p>You may not have distinct individuals with each of these titles &#8211; every small team I&#8217;ve worked with has people wearing multiple hats.  This is especially true when you have an agile team full of <a title="specialized generalists and stagging an agile team" href="http://tynerblain.com/blog/2008/02/14/specializing-generalists/">specializing generalists</a> &#8211; any given story (or task) may have a different architect and different implementer.  I&#8217;ve only worked with one company where the architects are NOT part of the development team.  If your team is set up that way, please comment below &#8211; I had never seen that before, and I&#8217;m not convinced that it is the best way to organize &#8211; what have your experiences been?</p>
<p>Generally, &#8220;program design&#8221; is clearly owned by the development team &#8211; and product managers (and product owners) know better than to specify program design in their requirements.  Neither the lead engineer nor the product manager believes that the product manager is a <em>better</em> programmer &#8211; so the product manager better not be <a title="requirements versus design" href="http://tynerblain.com/blog/2006/02/11/requirements-vs-design-which-is-which-and-why/">specifying program design and mislabeling it as requirements</a>.  Coincidentally, Steve Johnson, at Pragmatic Marketing has a post running right now with a bit of a <a title="requirement or design?  a quiz" href="http://pragmaticmarketing.typepad.com/productmarketing/2009/11/lets-play-req-or-spec-duplicate-images.html">quiz &#8211; is this a req(uirment) or a spec (design)</a>?</p>
<p>Where the line is more blurred is around interface and/or interaction design.  Some development teams have interface designers as part of the team.  Some companies organize with interface design as a &#8220;shared service&#8221; within the company.  Either approach can be the &#8220;right one&#8221; &#8211; it depends on too many details to make a sweeping generalization.  When the designers are members of the development team, the solution (from a product management perspective) is the same &#8211; the &#8220;team&#8221; is responsible for all design.  When the designers are not part of the development team, the developers have to consume two sets of guidance &#8211; &#8220;solve this problem&#8221; from product management, and &#8220;the solution needs to look like / act like this&#8221; from the designers.</p>
<p><a title="ux and product management collaboration" href="http://tynerblain.com/blog/2007/03/05/product-management-and-ux/">Collaboration between product management and user experience</a> people is the ideal solution.  The &#8220;requirements&#8221; and &#8220;design&#8221; inputs to the development team are comprehensive and consistent.</p>
<h2>Design-Free Requirements</h2>
<p>There are benefits &#8211; especially when being agile and <em>minimizing</em> documentation &#8211; to delivering requirements and design <em>at the same time</em>.  Just don&#8217;t do it by embedding design constraints within the requirements.</p>
<ul>
<li>When people on your team misinterpret design as requirements, they are unnecessarily constrained.</li>
<li>As a product manager &#8211; are you the best designer on your team?  If you&#8217;re busy designing, who&#8217;s product managing?</li>
</ul>
<p>This is trickiest when writing use cases &#8211; sequencing a set of interactions <em>is</em> interaction design.  That is one benefit of<a title="user stories vs use cases" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/"> writing a user story instead of a use case</a>.  An approach that has worked well for me with multiple teams is to deliver user stories (requirements) combined with storyboards (interaction design) and wireframes (interface design).  When details are needed (usually when &#8220;changing&#8221; versus &#8220;creating&#8221; an interface), screenshots can replace wireframes.  When business processes are complicated, process flows can replace storyboards.</p>
<p>Just don&#8217;t embed the designs within the requirements.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Design-Free+Requirements+http%3A%2F%2Fbit.ly%2F1pf903+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2009/11/03/design-free-requirements/&amp;t=Design-Free+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/11/03/design-free-requirements/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Concise Requirements</title>
		<link>http://tynerblain.com/blog/2009/08/03/concise-requirements/</link>
		<comments>http://tynerblain.com/blog/2009/08/03/concise-requirements/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 03:23:17 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Ishikawa Diagram]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[concise requirements]]></category>
		<category><![CDATA[writing good requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1010</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F08%2F03%2Fconcise-requirements%2F", "style": "big", "title": "Concise Requirements" }); Concise requirements give your team a useful, easy to read and easy to change understanding of what must be done.  Great requirements exist to do three things: Identify the problems that need to be solved. Explain why those problems are worth solving. Define when those problems are [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2009%252F08%252F03%252Fconcise-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Concise%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F08%2F03%2Fconcise-requirements%2F", "style": "big", "title": "Concise Requirements" });</script></div>
<p><img class="alignnone" title="concise requirements logo" src="http://sehlhorst.smugmug.com/photos/128628545-M.png" alt="" width="250" height="250" /></p>
<p><em>Concise</em> requirements give your team a useful, easy to read and easy to change understanding of what must be done.  Great requirements exist to do three things:</p>
<ol>
<li>Identify the problems that need to be solved.</li>
<li>Explain why those problems are worth solving.</li>
<li>Define when those problems <em><span style="text-decoration: underline;">are</span></em> solved.</li>
</ol>
<h2><span id="more-1010"></span>Concise Requirements &#8211; Revisiting</h2>
<p><img class="alignnone" title="ipod 2006" src="http://sehlhorst.smugmug.com/photos/610301383_BDte6-L.jpg" alt="" width="149" height="250" /><img class="alignnone" title="ipod 2009" src="http://sehlhorst.smugmug.com/photos/610301393_sfN5r-L.jpg" alt="" width="141" height="250" /></p>
<p>In the three years since we last looked at <em><a title="writing concise requirements" href="http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/">Writing Concise Requirements</a></em> from the <em><a title="Writing Good Requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">Big Ten Rules of Writing Requirements</a></em>, the iPod evolved to give us a better experience.  Let&#8217;s see if we can do the same with the topic of brevity in requirements.  The size of our community here has grown ten-fold, and the people who were here back then have grown just as much.  It makes sense to look at this again.</p>
<p>Writing concise requirements is not just minimizing the number of words you use.  Writing concise requirements is presenting the most important information in the easiest format for your audience to consume.</p>
<h2>Concise Requirements Identify the Problems That Need to be Solved</h2>
<p>Ultimately, requirements are the problems that we choose to solve.  A concise requirements artifact (formal document, index card, photo of a whiteboard, whatever) is one that has the highest signal-to-noise ratio possible.  You&#8217;re maximizing the amount of communication, and minimizing the cost of communicating.</p>
<p><img class="alignnone" title="signal and noise" src="http://sehlhorst.smugmug.com/photos/610324412_eSzfc-L.png" alt="" width="241" height="210" /></p>
<p>You want your requirements document to read like the lines, not the points.  If the line (the signal) is what you really want, and you communicate a big pile of points (the signal, hidden in the noise), you run the very real risk that your audience will misinterpret the signal.</p>
<p><a title="writing complete user stories" href="http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/">User stories</a> provide the best example of clarity that comes from conciseness.  The format you should use, based on Mike Cohn&#8217;s great book, <em><a title="user stories applied at amazon" href="http://www.amazon.com/dp/0321205685?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0321205685&amp;creative=373489&amp;camp=211189">User Stories Applied</a></em><a title="user stories applied at amazon" href="http://www.amazon.com/dp/0321205685?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0321205685&amp;creative=373489&amp;camp=211189">,</a> is</p>
<blockquote><p>As a [<strong>role</strong>], I want to [<strong>do something</strong>] [<strong>with some frequency</strong>] so that I can/will [<strong>achieve some goal</strong>]</p></blockquote>
<p>The user story is not <em>always</em> the right communication format &#8211; it depends on what problems you&#8217;re solving, and who is on your team.  <a title="use cases vs user stories" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">Sometimes, use cases work better than user stories</a>.  Conciseness is important for use cases too.  Start with a <a title="use case naming tips" href="http://tynerblain.com/blog/2007/01/22/how-to-write-good-use-case-names/">good use case name</a>.</p>
<h2>Concise Requirements Explain Why Those Problems Are Worth Solving</h2>
<p>Last week&#8217;s article on <em><a title="Writing Valuable Requirements" href="http://tynerblain.com/blog/2009/07/29/valuable-requirements/">Valuable Requirements</a></em> focused on <em>why</em> particular problems should be solved.  Your focus should be on value, and that article discussed five ways to assure that your requirements are valuable.  One of the techniques,<a title="finding the root causes of problems" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/"> the use of an Ishikawa diagram</a>, provides a method for identifying the root causes of problems.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;"><img style="padding: 0px; margin: 0px;" src="http://sehlhorst.smugmug.com/photos/302635390_W2GiV-O.jpg" alt="excessive car operating costs" width="450" height="269" /></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;">[<a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="large excessive car costs example cause and effect diagram" href="http://sehlhorst.smugmug.com/photos/302635439_BqV4v-L.jpg">larger image</a>]</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;">Imagine that you have a collection of user stories, representing problems to be solved for your users.  You need a way to demonstrate why <em>this</em> user story should be implemented and why <em>that</em> one shouldn&#8217;t.  You can often use the Ishikawa diagram in the same way.  A particular <strong>goal is achieved</strong> when a user is able to <strong>do something</strong>.  Perhaps several somethings are required.  The point is that you can use the Ishikawa to drive home the point &#8211; if <em>this set of user stories</em> are all implemented, then <em>this goal will be achieved</em>.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;">There are two reasons this is important &#8211; first, you&#8217;re providing context for your team.  They understand <em>why</em> they are doing something.  Second, you can make changes easily, because you can see the impact of those changes.  By understanding the cause-and-effect relationships between problems and their values (user stories and their goals), you can see the impact of changing one or the other.</p>
<h2>Concise Requirements Define When Those Problems <em>Are</em> Solved</h2>
<p>Clarity is the goal of conciseness.  It isn&#8217;t enough to say &#8220;work on this.&#8221;  It&#8217;s important to know <em>why</em> you&#8217;re working on it, but that still isn&#8217;t enough.  You have to know when you&#8217;re <em>done</em>.  When you&#8217;re defining problems to be solved (and therefore solutions), you must also define the <em>measures</em> by which the solution will be judged.</p>
<p>A measurement of success for &#8220;Cost of Operation is Too High&#8221; might be &#8220;reduce costs of operation by 10%.&#8221;  This gives you a testable criteria for knowing when that problem has been <em>sufficiently</em> solved.  Sticking with the Ishikawa, you can also map out the strategy for achieving that lofty goal.  You can say that the goal is to reduce fuel expenses by 20%, reduce cost of maintenance by 5%, and reduce payments by 15%.  This process continues &#8211; a 20% reduction in fuel spend requires that you operate with your tires within 5% of nominal pressure, and that you reduce the aerodynamic drag coefficient by 7% (or whatever).</p>
<p>This gives you clarity in your objectives.</p>
<p>User stories, when combined with user acceptance criteria, provide that last connection of testability that lets your team know when they are done.</p>
<p><img class="alignnone" title="acceptance criteria for user stories" src="http://sehlhorst.smugmug.com/photos/584149015_prgqx-L.png" alt="" width="450" height="305" /></p>
<p>There aren&#8217;t many things more frustrating to a development team than having them solve the wrong problems.  One of those things might be having their solution be rejected because it isn&#8217;t <em>enough</em>.  Writing acceptance criteria clearly and concisely lets the team know exactly when they can move on to the next problem.</p>
<p>Providing a crisp understanding of acceptance criteria also facilitates iterative development.  One challenge teams always face is <a title="how to use timeboxes for agile development" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">making improvements that fit within the timebox</a> of a given iteration.  Imagine a user story with 4 acceptance criteria, where the story is too big to complete in one sprint.  When talking with your development team, you may find that the story is too big because satisfying all of the acceptance criteria is too big.  This is where many teams miss an opportunity &#8211; by defining <em>all</em> of the acceptance criteria that are believed to be needed <em>eventually</em> and requiring that they all be implemented <em>now</em>.  One of those criteria is going to be more important than the others.  Implement the story such that is satisfies the most important criteria (timeboxing) now, and rewrite or enhance it to meet the additional criteria later.</p>
<h2>Conclusion</h2>
<p>Software Product Success depends not only on identifying the &#8220;right stuff&#8221; to build, but on making sure the team builds it and builds it right.</p>
<p>Concise requirements improve your ability to communicate with your team, thereby improving their ability to build the right stuff right.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Concise+Requirements+http%3A%2F%2Fbit.ly%2F2803EW+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2009/08/03/concise-requirements/&amp;t=Concise+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/08/03/concise-requirements/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Writing Complete User Stories</title>
		<link>http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/</link>
		<comments>http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 05:18:23 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[agile traceability]]></category>
		<category><![CDATA[agile tracing]]></category>
		<category><![CDATA[requirements traceability]]></category>
		<category><![CDATA[traceability]]></category>
		<category><![CDATA[tracing goals]]></category>
		<category><![CDATA[tracing user stories]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=987</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F07%2F06%2Fwriting-complete-user-stories%2F", "style": "big", "title": "Writing Complete User Stories" }); User stories can make requirements management a lot easier.  They shift some of the communication from up-front documentation to ongoing dialog.  That&#8217;s the main reason they work so well for agile teams.  And agile teams focus on &#8220;what&#8217;s next?&#8221; instead of an ever-changing &#8220;what&#8217;s [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2009%252F07%252F06%252Fwriting-complete-user-stories%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Complete%20User%20Stories%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F07%2F06%2Fwriting-complete-user-stories%2F", "style": "big", "title": "Writing Complete User Stories" });</script></div>
<p><img class="alignnone" title="a bunch of unorganized stories" src="http://sehlhorst.smugmug.com/photos/584129084_rYfmw-L.jpg" alt="" width="250" height="130" /></p>
<p>User stories can make requirements management a lot easier.  They shift some of the communication from<em> up-front documentation</em> to<em> ongoing dialog</em>.  That&#8217;s the main reason they work so well for agile teams.  And agile teams focus on &#8220;what&#8217;s next?&#8221; instead of an ever-changing &#8220;what&#8217;s everything?&#8221;   The problem is, when those conversations are working well, it is easy to forget to make sure that what you&#8217;ve done is actually enough.  Add a small dose of traceability, and you can easily validate the completeness of your user stories.</p>
<h2><span id="more-987"></span>Three Big User Story Problems</h2>
<p>Over the last few years, Alistair Cockburn surveyed a range of teams and identified that they all were facing a similar set of problems.  <a title="use cases solve agile problems" href="http://tynerblain.com/blog/2008/02/18/cockburn-loves-agile-use-cases/">Alistair proposed using use cases to solve those problems</a>.  The following list of problems is Alistair&#8217;s:</p>
<ol>
<li>Designers lack the context of the goal that the user is trying to achieve.</li>
<li>The team does not get a early indication of the scope of the project.</li>
<li>Alternate user-behaviors are not identified in advance of the commitment to deliver.</li>
</ol>
<p>We agreed then (and still do) that well developed use cases can be used to address these issues.  Since then, however, we&#8217;ve done more analysis of how and <a title="user stories versus use cases" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">when to create use cases and when to create user stories</a>.  The primary drivers of the use case versus user story decision still apply, and should still sometimes point you to creating user stories.</p>
<p>Without the context of goals, and without a notion of completeness, your team just has a haphazhard stack of stories.  Not only will this reduce their motivation, but it will introduce frustration both for the implementation team and the stakeholders &#8211; no one will <em>really</em> know when the job is done.  Validating the completness of user stories will allow you to know (and regularly revisit) when you should be done.</p>
<p>When you are creating user stories, you need to be able to address the issues Cockburn identified.  You can do that with traceability, and a <em>very</em> small amount of additional documentation.</p>
<h2>User Story Metadata</h2>
<p>The cool thing about a well-written user story is that it already has metadata within it that makes tracing very easy.  A well-written user story, using a format based on the work of Mike Cohn (in <em><a title="user stories applied at amazon" href="http://www.amazon.com/dp/0321205685?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0321205685&amp;creative=373489&amp;camp=211189">User Stories Applied</a></em>), would read:</p>
<p>As a [role], I want to [do something] [with some frequency] so that I can/will [achieve some goal].</p>
<p>If you were to build a UML Class Diagram to show the relationships that are implicit in a user story, you would get something that looks like the following:</p>
<p><img class="alignnone" title="user story class diagram" src="http://sehlhorst.smugmug.com/photos/584129144_PErXN-L.png" alt="" width="450" height="313" />[<a title="larger user story class diagram" href="http://sehlhorst.smugmug.com/photos/584129127_E8Fy3-O.png">larger version</a>]</p>
<ul>
<li>The [role] that starts a user story is the <a title="how to create personas" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">persona </a>(lower right corner of the diagram).  For products with simple market strategies, identification of personas alone is sufficient.  Larger companies and larger products are often trying to address the needs of users in multiple markets or market segments.  Each persona you develop is in a single market segment.  You may organize your segments regionally or by vertical industry or any other strategy that helps you position your product.  You can manage your personas not only as members of market segments, but with <a title="hierarchy of roles and personas" href="http://tynerblain.com/blog/2007/12/20/global-actor-hierarchies-and-personas/">a hierarchy of roles</a>.</li>
<li>The [do something] you identify is the meat of the user story (top center of the diagram) &#8211; what the persona is going to do.</li>
<li>The [with some frequency] element tells your team how often a particular user story will happen.  This can be represented as an attribute of the user story.</li>
<li>The [achieve some goal] component of the user story provides the context (center of diagram) for why a user will be performing an action.  The user will be performing the action either to achieve a user goal or a corporate goal.  If it is a corporate goal, it will have an internal stakeholder.  Ultimately, there should be an internal stakeholder who is not only the beneficiary of that goal, but also the person who &#8220;owns&#8221; the market segment in which the persona is defined.  Sometimes, <a title="goal conflict" href="http://tynerblain.com/blog/2007/10/18/stakeholder-goals-2/">there will be conflicts in goals</a>, commonly between user and corporate goals.  These can also result in conflicting goals between internal stakeholders.</li>
</ul>
<p>This is what makes things pretty exciting &#8211; all of that information is already there, and in your user story.  All you have to do now is leverage it.</p>
<h2>Goals and User Stories</h2>
<p>The following diagram shows how a use case exists to enable the achievement of a goal.</p>
<p><img class="alignnone" title="structured requirements" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" alt="" width="567" height="450" /></p>
<p>A user story can exist in the same way, just replacing the use case.  If you want to do <a title="ux and requirements" href="http://tynerblain.com/blog/2006/03/23/interaction-design-and-structured-requirements/">a deeper dive into how interaction design and structured requirements</a> work together, you can use the following model instead:</p>
<p><img class="alignnone" title="interaction design and structured requirements" src="http://sehlhorst.smugmug.com/photos/61228367-O.png" alt="" width="461" height="525" /></p>
<p>Note that the diagram above introduces a couple additional concepts.  The first additional concept is the <em>practical goal</em> &#8211; what the persona is attempting to do <em>because</em> it is the manifestation of a corporate goal.  &#8221;Take an order quickly&#8221; is the practical goal that manifests the corporate goal of &#8220;Reduce time required to take orders.&#8221;  The second concept is that of a <em>scenario</em>.  A scenario is an amalgam of user stories (or use cases) that collectively allow the persona to achieve the practical goal.  We already represent this without introducing the <em>scenario</em> concept by acknowledging that a single goal is mapped to multiple user stories.</p>
<p>The common element in both approaches is a strong tie between goals and user stories.  Focusing on this aspect, you can visualize the relationship as follows:</p>
<p><img class="alignnone" title="user stories and goals" src="http://sehlhorst.smugmug.com/photos/584149015_prgqx-L.png" alt="" width="450" height="305" /> [<a title="goals are achieved through user stories" href="http://sehlhorst.smugmug.com/photos/584148954_P4px6-O.png">larger version</a>]</p>
<p>Note that the acceptance criteria for each user story are called out (so that you can confirm that a user story is &#8220;done&#8221; and &#8220;done well&#8221;).  Each goal is achieved by enabling one or more user stories, such that the acceptance criteria are met.  This is the crux of it, so I&#8217;ll write it again, but in bold for the busy people who scan this article.</p>
<p><strong>Each goal is achieved by enabling one or more user stories, such that the acceptance criteria are met.</strong></p>
<p>Note also that multiple goals can be supported by the same user story.</p>
<h2>Validating Completeness</h2>
<p>The important question that many developers (agile or otherwise) can not answer about their project is &#8220;If we do [everything we've been asked to do] will we meet our goals?&#8221;  This is either a failure in communication of context, or a failure to <a title="writing complete requirements" href="http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/">validate completeness of the requirements</a>.  You have to flip things around and ask &#8220;If only <em>these</em> user stories are implemented, will the goal(s) be achieved?&#8221;  This is the same process used to <a title="validate completeness with use cases" href="http://tynerblain.com/blog/2006/07/06/requirement-completeness-validation-with-use-cases/">validate completeness of use cases</a> &#8211; just applied to user stories [Ed: that completeness-validation article was written 3 years ago today.  That's 28 years ago in internet time].</p>
<h2>Incremental Overhead</h2>
<p>Each user story already identifies the goal(s) it is supporting.  The incremental overhead is to recognize that this is &#8220;a backwards view&#8221; of goal satisfaction and create a simple table that shows the &#8220;forward view.&#8221;</p>
<p>You are creating traceability from each goal to each of its supporting user stories &#8211; but you&#8217;re doing it with a simple table (or list, or tree, or whatever).  You don&#8217;t have to manage your requirements in some big messy repository.  If you&#8217;re using index cards, consider getting some brightly colored sticky-dots, number them for each goal, and stick them on the index cards to show the relationship.</p>
<p>Then ask the question, for each goal, &#8220;Will this goal be achieved if all of the traced user stories (and no other stories) are completed, such that the acceptance criteria are met?&#8221;</p>
<p>An added benefit of this simple document is that it markedly improves your engagement with internal stakeholders.  You&#8217;ve created another opportunity for them to influence the scope of delivery.  These stakeholders can identify user stories that <em>don&#8217;t</em> map to any goals (you can drop those stories), and by identifying incomplete support, you can collaborate to make sure the missing user stories are identified.</p>
<p>The task of updating stakeholders about progress and <a title="managing stakeholder expectations" href="http://tynerblain.com/blog/2008/12/30/stakeholders-in-a-barrel/">managing stakeholder expectations</a> just got much easier &#8211; because you can report progress in the context of completed user stories (and therefore manifested goals).</p>
<h2>Reviewing Cockburn&#8217;s Issues</h2>
<p>Does this approach address Cockburn&#8217;s issues (listed at the start of this article)?</p>
<ol>
<li><strong>Lacking the context of goals</strong>.  This approach explicitly emphasizes that context.</li>
<li><strong>No early indication of scope</strong>.  The combination of completeness analysis and acceptance criteria provides concrete insight about scope.  Note that scope can still change, but this approach is just as effective as documenting requirements with use cases.</li>
<li><strong>Alternate behaviors not identified early</strong>.  Completeness analysis will highlight when the &#8220;happy path&#8221; (a.k.a. the normal course in a use case) is not sufficient to achieve the goal.  This is really just a variation of the second issue (not understanding scope), but along a <em>variation</em> dimension instead of a <em>coverage</em> dimension.</li>
</ol>
<h2>Conclusion</h2>
<p>There is value in being able to <a title="user story vs use case" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">document requirements with either user stories or use cases</a> as circumstances dictate.  <a title="cockburn on agile use cases" href="http://tynerblain.com/blog/2008/02/18/cockburn-loves-agile-use-cases/">Cockburn identified issues</a> that teams face when dealing with decoupled user stories.  His approach of leveraging use cases to solve the issues is perfectly valid.  The approach outlined above, tracing user stories, also addresses the issues.  As a product manager or business analyst, you need to be able to address the very real issues with either documentation approach.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Writing+Complete+User+Stories+http%3A%2F%2Fbit.ly%2Fez0Rt+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/&amp;t=Writing+Complete+User+Stories" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Agile Non-Functional Requirements</title>
		<link>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/</link>
		<comments>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 15:25:03 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[agile non-functional requirements]]></category>
		<category><![CDATA[backlog]]></category>
		<category><![CDATA[non-functional requirements]]></category>
		<category><![CDATA[sprint]]></category>
		<category><![CDATA[user story]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=822</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F02%2F10%2Fagile-non-functional-reqs%2F", "style": "big", "title": "Agile Non-Functional Requirements" }); Just because your requirement is not a user story does not mean you have to throw it out when planning your next sprint.  See one way (that is working) for managing non-functional requirements with an agile team. Product Backlog Stories Every article* I can remember [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2009%252F02%252F10%252Fagile-non-functional-reqs%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Agile%20Non-Functional%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F02%2F10%2Fagile-non-functional-reqs%2F", "style": "big", "title": "Agile Non-Functional Requirements" });</script></div>
<p><img class="alignnone" title="scrum" src="http://sehlhorst.smugmug.com/photos/470928385_DweZA-L.jpg" alt="" width="197" height="250" /></p>
<p>Just because your requirement is not a user story does not mean you have to throw it out when planning your next sprint.  See one way (that is working) for managing non-functional requirements with an agile team.</p>
<h2><span id="more-822"></span>Product Backlog Stories</h2>
<p>Every article* I can remember reading that explains how to manage a product backlog talks about user stories.  Those articles are necessary, but not sufficient .  You&#8217;ll create better products by developing them from the outside-in, with a user-centric point of view.</p>
<blockquote><p>*One loophole &#8211; scheduling refactoring (or the payback of technical debt).  A lot of articles talk about the need to do this, and refactoring is pretty much the opposite of a user story, since by definition, refactoring improves the software without introducing new capabilities.  The best idea I&#8217;ve come across for incorporating refactoring as part of a sprint is to write a user story, with <em>the system</em> as the user, and the lead architect / developer as the primary stakeholder.  This actually works really well, but it works by treating the work <em>as a </em>user story.</p></blockquote>
<h2>Atomicity</h2>
<p>What is really important, when scheduling sprints (or releases, if you are not doing scrum) is that you are scheduling solutions to atomic, <a title="writing measureable requirements" href="http://tynerblain.com/blog/2006/06/13/writing-verifiable-requirements/">measureable</a>, <a title="writing valuable requirements" href="http://tynerblain.com/blog/2006/05/30/writing-valuable-requirements/">valuable</a> <a title="defining problems with Ishikawa diagrams" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">problems</a>.  <a title="writing atomic requirements" href="http://tynerblain.com/blog/2006/06/14/writing-atomic-requirements/">Atomicity </a>is the reason for breaking epics (really big stories) up into smaller stories.  It is also important that you communicate them unambiguously.  That might mean writing user stories or <a title="when to write use cases instead of user stories in an agile project" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">writing use cases instead of user stories</a>, when things are complicated.</p>
<p>The problem is, not every atomic requirement can be represented with a user story.  Some things that <a title="kano analysis and must-have requirements" href="http://tynerblain.com/blog/2006/02/27/prioritizing-software-requirements-kano-take-two/"><em>must be</em></a>, are not stories.</p>
<h2>Non-Functional Requirements</h2>
<p><img class="alignnone" title="twitter fail whale" src="http://sehlhorst.smugmug.com/photos/470952470_cAPgM-L.png" alt="" width="400" height="300" /></p>
<p>Non-functional requirements always seem to be under-emphasized when writing requirements.  The Twitter <em>fail whale</em> has become famous, because twitter could not scale to meet the demands of a rapidly growing user base.  Maybe the Twitter team planned for scalability, but demand simply outstripped it.  Or maybe they failed to plan for it.  Either way, they failed to meet the non-functional requirements of supporting the growth that they did have.  (Un)Luckily, this type of problem self-corrects.  Scaling failures drive away users, reducing the need to scale, until balance is achieved.</p>
<p>Product managers and business analysts tend to neglect non-functional requirements.  Unfortunately, this is especially true when managing with a focus on users and their goals.  Not because goals don&#8217;t drive non-functional requirements &#8211; they do.  I believe this has happened because historically, non-functional requirements were treated as an after-thought.  In reality, they are explicitly driven by goals.  I proposed an <a title="non-functional requirements" href="http://tynerblain.com/blog/2006/05/23/non-functional-requirements-era/"><em>equal rights amendment</em> to the structured requirements domain model</a> almost three years ago.  In short, it explicitly calls out the relationship between goals and non-functional requirements.</p>
<p><img class="alignnone" title="non-functional requirements domain model" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" alt="" width="567" height="450" /></p>
<h2>Agile Non-Functional Requirements</h2>
<p>Getting non-functional requirements into your sprint planning is actually not that hard.  You only have to make two tiny adjustments to get from the waterfall world to the agile world.</p>
<p>The first adjusment is that you have to treat non-functional requirements incrementally.  Non-functional requirements often affect <em>all</em> of the other requirements &#8211; so they seem massive and unweildy.  You have to decompose them.  Consider the platform-compatibility requirements for a web application.  You may have to support IE6,7,8; Safari on Windows, Safari on OS X, and Firefox on Windows XP and Vista.  That could be incredibly daunting.  So break it down.  Your first group of users (key persona) are primarily Firefox/XP users.  So the first platform you support is that one.  The next big platform for your persona group is Safari on OS X.  Add support for that next without breaking the previous support for FF/XP.  With each release, you add a platform (or two, or none).  You are conspicuoulsy addressing the needs of your target users.  The key is that once support is added for a platform, all future development is required to &#8220;not break it.&#8221;</p>
<p>Each non-functional requirement is cumulative.  This is the second adjustment.  All development, once a non-functional requirement is in place, must continue to honor it.  You wouldn&#8217;t break a previously released capability (functional requirement), so don&#8217;t break a non-functional requirement.  You have to determine, in each sprint, if additional functionality is more important than additional platform support.  And add in the platforms as they become the most important &#8220;next things to do.&#8221;  In waterfall projects, I&#8217;ve seen many teams break and re-break platform support throughout the development process, with the knowledge that it only has to work &#8220;at the end.&#8221;  Include platform-specific support in your <a title="continuous integration explained" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">continuous integration</a> tests.</p>
<p>You have a launch event coming up in six weeks.  You have an established user base.  You&#8217;re also developing a key new set of capabilities for your product that you believe will be a big hit and drive significant growth for your product.  You have a small group of people in a private beta, providing you with feedback about the new development.  If you believe the launch will cause your customer base to double very quickly (maybe over a month), how do you plan for that?  This is a serious scalability non-functional requirement.</p>
<p>Break the non-functional requirement up into cumulative requirements.  Assuming your plan is to add 10,000 users &#8220;at once&#8221; &#8211; have your implementation team brainstorm what that could/would mean for the system.  [Also, make sure you coordinate with your community manager and marketing folks, both to validate the anticipated growth, and to device any contingency strategies <em>in advance</em>.]  After talking with your development team, perhaps you learn that &#8220;at once&#8221; is a nuanced proposition.  <em>Literally</em> at once is very bad.  Spread out over a few days, not so bad.  OK &#8211; you can deal with this too.</p>
<p>Imagine you already have the following non-functional requirements in place:</p>
<ul>
<li>The system must be available 24/7, with no more than one hour of down time per day, and no more than one outage per day.</li>
<li>The system must respond in under 2 seconds for &gt;95% of uses [ in key user story].</li>
<li>The system must respond in under 20 seconds for 100% of uses [in same key user story].</li>
</ul>
<p>Based on what we&#8217;ve said above, these non-functional requirements must not be broken.  They essentially define the acceptance criteria for our scalability requirements.</p>
<p>Consider the following as the non-functional requirements that must be deployed by the time of launch (six weeks, or three releases from now):</p>
<ul>
<li>The system must support 10,000 additional users added in the month following SXSW.</li>
<li>The system must support 500 new users signing up and initiating [troublesome user story] within the same hour.</li>
</ul>
<p>Your dev team does not <em>really</em> know exactly what needs to be done &#8211; they just know that the current solution won&#8217;t scale &#8211; it barely meets the existing non-functional requirements.  They propose a couple redesigns that may get the job done.  But they point out the need to actually test that the designs work.  Schedule the following for the first release:</p>
<ul>
<li>The system must support 100 additional private beta users.</li>
<li>The additional users will all have [troublesome user story] initiated within the same hour.</li>
</ul>
<p>The second one is really a pragmatic solution &#8211; artificially creating a spike in demand, to test out the scalability of the new code.  From that data, we can determine what we need to do to hit 10,000 additional users, and to support 500 concurrent [troublesome user story] instances.  By managing expectations of the new users (that you&#8217;re queuing them up to test scalability), you can get the data you need.  And you have a couple more iterations to improve if needed.</p>
<p>As a benefit, you get to completely avoid the fail whale.  The other half of this is making sure you can constrain the rate of new-user sign-ups.  Work with your community manager and marketer to make sure you position this effectively.  You are creating scarcity, which may increase demand.  A crashed server won&#8217;t.  If your team can&#8217;t support 10,000 in time for the launch, plan on 2,500.</p>
<h2>Conclusion</h2>
<p>You can plan and schedule more than just user stories.  And your product will be better for it.  Give those non-functional requirements a chance.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Agile+Non-Functional+Requirements+http%3A%2F%2Fbit.ly%2F9DOwHH+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/&amp;t=Agile+Non-Functional+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/02/10/agile-non-functional-reqs/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>User Stories and Use Cases</title>
		<link>http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/</link>
		<comments>http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 04:24:15 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[domain context]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[use cases]]></category>
		<category><![CDATA[user stories]]></category>
		<category><![CDATA[user story]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=809</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F02%2F02%2Fuser-stories-and-use-cases%2F", "style": "big", "title": "User Stories and Use Cases" }); User Stories are one of the key agile artifacts for helping implementation teams deliver the most important capabilities first.  They differ from use cases in some important ways, but share more commonalities than you might think. User Stories Applied Mike Cohn wrote User [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2009%252F02%252F02%252Fuser-stories-and-use-cases%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22User%20Stories%20and%20Use%20Cases%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F02%2F02%2Fuser-stories-and-use-cases%2F", "style": "big", "title": "User Stories and Use Cases" });</script></div>
<p><img class="alignnone" title="story cards" src="http://sehlhorst.smugmug.com/photos/466692212_tCpUr-L.jpg" alt="" width="207" height="250" /></p>
<p>User Stories are one of the key agile artifacts for helping implementation teams deliver the most important capabilities first.  They differ from use cases in some important ways, but share more commonalities than you might think.</p>
<h2><span id="more-809"></span>User Stories Applied</h2>
<p>Mike Cohn wrote <a title="user stories applied at amazon" href="http://www.amazon.com/exec/obidos/ASIN/0321205685/tbrb-20"><em>User Stories Applied: For Agile Software Development</em></a>.  It is <em>the</em> book for understanding how to write, estimate, and use user stories.  If you&#8217;re thinking about trying out &#8220;agile&#8221; for the first time &#8211; and you haven&#8217;t read his book, you need to.  He provides great detail and anecdotes about how to write, manage, and utilize user stories.</p>
<h2>What are user stories?</h2>
<p>A user story is a user-centric description of the goals that one or more people will achieve by using your product.  User stories are applicable whenever there is a person, interacting with an interface to a product, to achieve a goal.  They aren&#8217;t just for software &#8211; even though the tone of this article may imply it (since I live in a software mindset most of the time).</p>
<p>A user story is written in the format</p>
<ul>
<li>As a [<strong>person in a role</strong>] I want to [<strong>perform some activity</strong>] so that [<strong>some goal is achieved</strong>].</li>
</ul>
<p>That&#8217;s it.  No more.  Perfectly <a title="how to write atomic requirements" href="http://tynerblain.com/blog/2006/06/14/writing-atomic-requirements/">atomic</a>, very <a title="writing concise requirements" href="http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/">concise </a>and <a title="writing unambiguous requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">unambiguous</a>.  Where did this elegant idea come from?</p>
<p>User-centered design (UCD) is <a title="user centered design" href="http://tynerblain.com/blog/2007/02/22/user-centered-design-bridge/">an approach to product design</a> that can almost be considered a philosophy.  In college, I used to say that industrial designers designed things from the outside in, and engineers designed things from the inside out.  The ideal products are the ones that marry form (outside) and function (inside) in an elegant solution that blurs the lines of distinction.  The first designers of engineered products were the engineers, and the first designers of software were the programmers &#8211; they were the only ones who knew what <em>could be</em> accomplished.  Anyone who has used an application with a user interface designed by a database expert can remember what that was like.  Eventually, someone successfully adopted the mindset of designing a product based on what someone could use it <em>to do</em> instead of looking at what it could do and figuring out <em>how to use it</em>.  That under-emphasizes the importance of UCD, but you get the idea.</p>
<p>Out of UCD come different things that really drive how we create products today.  Kessler and Sweitzer focus on understanding these user goals in <a title="focus on goals first" href="http://tynerblain.com/blog/2007/09/27/outside-in/"><em>Outside-In Software Development</em></a>.  <a title="understanding stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">Stakeholder goals</a> drive (arguably, <em>are</em>) requirements.  But it is difficult to develop actionable implementation plans directly from goals.  You need something to bridge that gap.</p>
<p>A user story, in an agile process, bridges that gap.  In Wiegers&#8217; world of <a title="structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements</a>, that gap is spanned with use cases.</p>
<p><img class="alignnone" title="structured requirements model" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" alt="" width="567" height="450" /></p>
<p>Conceptually, a user story crosses the same chasm as a use case.  A user story defines what people need to accomplish (e.g. faster call processing), in order to achieve the goals of the company (e.g. lower call-center costs), given a solution approach (write software versus outsource to lower-cost call center employees).</p>
<p>Now we find ourselves in a confusing situation &#8211; there are user stories, <a title="use case scenarios" href="http://tynerblain.com/blog/2007/04/12/use-case-vs-test-case/">use case scenarios</a>, and at least three different kinds of use cases &#8211; formal and informal use cases, and use case briefs.  How are they different, and how are they the same?</p>
<h2>Usage Descriptors</h2>
<p>Use cases, use case scenarios, and user stories all document descriptions of how a product will be used.  They vary, along a continuum, in terms of the amount of overhead required to create each.</p>
<p><img class="alignnone" title="overhead of creating use cases" src="http://sehlhorst.smugmug.com/photos/466745248_2KGgn-L.png" alt="" width="450" height="267" /></p>
<ul>
<li><a title="how to read a formal use case" href="http://tynerblain.com/blog/2006/06/26/foundation-series-how-to-read-a-formal-use-case/">Formal use cases</a> require the most effort.  They have a lot of pomp and circumstance going on, but they describe all the permutations of how some person does some activity (or its variations).</li>
<li><a title="informal use cases" href="http://tynerblain.com/blog/2005/12/21/use-case-series-informal-use-case/">Informal use cases</a> are pretty much the same &#8211; just less formal.  The challenge is to provide <em>the right</em> level of detail, without the guide-rails of the formal use case to remind you.</li>
<li><a title="use case brief examples" href="http://tynerblain.com/blog/2007/04/24/apr-use-case-briefs/">Use case briefs</a> have almost no overhead, but have the same &#8220;how much is enough&#8221; challenges of informal use cases, only more so.  Think of it as a single-paragraph description of a formal use case.</li>
<li>User stories have the least overhead, and provide the least context.</li>
</ul>
<p>Use case scenarios are a slightly different breed.  Like a user story, a <a title="use case scenarios" href="http://tynerblain.com/blog/2007/04/12/use-case-vs-test-case/">use case scenario describes one path</a> through a multi-path use case.  But you can&#8217;t (or at least I&#8217;ve never seen anyone) create a use case scenario without first creating the formal use cases.  This artifact basically combines the weakness of a formal use case (high overhead) with that of a user story (limited context).  It can be very handy for developing test cases if your testing team is not well versed in writing test cases.  We&#8217;ll leave use case scenarios out of the rest of the discussion.</p>
<p>The cost of high overhead in documentation comes with a benefit &#8211; increased detail.</p>
<p><img class="alignnone" title="increasing detail in use case formats" src="http://sehlhorst.smugmug.com/photos/466745337_mifdy-L.png" alt="" width="450" height="448" /></p>
<p>Because a user story captures a single path through a use case, while having less overhead, it also captures less detail.  This is ok, because an agile process stresses communication over comprehensive documentation.   You start to run into inefficiencies when the amount of conversation (especially when repeated) is burdensome.  The amount of conversation required is a function of the amount of domain expertise, or context, that the implementation team already has.</p>
<h2>Should I write User Stories or Use Cases?</h2>
<p>It depends on your audience.  The formal and informal use cases, in addition to having more overhead, also provide more context, and allow you to describe more complex usage patterns of your product.  Some uses are so complicated that you have to use a use case to describe them.  Others are so simple that anything other than a story is wasted effort.  The interpretation of <em>complicated</em> and <em>simple</em>, though, is not purely an assessment of what the users want to do &#8211; it varies with the level of domain expertise of your implementation team.</p>
<p><img class="alignnone" title="context required by use case and user story" src="http://sehlhorst.smugmug.com/photos/466745287_bPB2C-L.png" alt="" width="450" height="448" /></p>
<p>Some teams simply aren&#8217;t equipped to consume user stories or use case briefs.  You have to <a title="writing what your readers need" href="http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/">write your requirements for the readers</a>, so you need to know when people are struggling to implement solutions based upon stories or briefs, and give them more structure and formality.  You have to adapt to the realities of your current situation, and the experience of your team.</p>
<p>You could replace the words &#8220;Reader Domain Expertise&#8221; with &#8220;Writer Trust of the Team&#8221; if you wanted, and the graph would look about the same.  This is another concept that is critical to a team working effectively &#8211; trust equates to delegation.</p>
<p>If you can trust your team to come up with a solution that matches the story, delegate that &#8220;next level of detail&#8221; to them.  If you can&#8217;t trust them, then don&#8217;t.  But you should.  One of the benefits of agile is that your team will quickly give you a solution, and then you can give them feedback.  If they don&#8217;t create a solution that meets your interpretation of your user&#8217;s needs, then give them feedback, and they will change it.  The agile process actually relies on this dynamic to allow less-verbose artifacts to still be effective.  Someone on the team will sketch out what the solution will look like, and get your feedback, before implementing.  The more this collaboration happens, the more effective a light-weight document will be.</p>
<h2>Conclusion</h2>
<p>Don&#8217;t just rely on platitudes about stories and use cases.  Think about the nature of the different artifacts.  Think about their strengths and weaknesses.  Consider how you interact with your team.  Should you trust your team?  <strong>Do</strong> you trust your team?  Determine what they need, and give it to them.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+User+Stories+and+Use+Cases+http%3A%2F%2Fbit.ly%2FbHxzTG+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/&amp;t=User+Stories+and+Use+Cases" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/feed/</wfw:commentRss>
		<slash:comments>64</slash:comments>
		</item>
	</channel>
</rss>

