<?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; Agile</title>
	<atom:link href="http://tynerblain.com/blog/category/software-development/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Sun, 26 Feb 2012 15:00:36 +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>Specializing Generalist</title>
		<link>http://tynerblain.com/blog/2012/02/01/specializing-generalist/</link>
		<comments>http://tynerblain.com/blog/2012/02/01/specializing-generalist/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 15:07:14 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[People management]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[specializing generalist]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1654</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2012%2F02%2F01%2Fspecializing-generalist%2F", "shorturl": "http://bit.ly/A0e1Y4", "style": "big", "title": "Specializing Generalist" }); The ideal agile team is made up of specializing generalists &#8211; but what does that really mean?  The goal isn&#8217;t to prevent functional silos of expertise, it is to allow people to cover for each other. Great Conversation Elena Yatzeck (@eyatzeck) posted a comment [...]]]></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%252F2012%252F02%252F01%252Fspecializing-generalist%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FA0e1Y4%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Specializing%20Generalist%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2012%2F02%2F01%2Fspecializing-generalist%2F", "shorturl": "http://bit.ly/A0e1Y4", "style": "big", "title": "Specializing Generalist" });</script></div>
<p><img class="alignnone" title="Kordell Stewart Jersey" src="http://sehlhorst.smugmug.com/Other/blog/i-59XJhTR/0/O/Kordell-Stewart-Jersey-small.jpg" alt="" width="226" height="250" /></p>
<p>The ideal agile team is made up of specializing generalists &#8211; but what does that really mean?  The goal isn&#8217;t to prevent functional silos of expertise, it is to allow people to cover for each other.</p>
<h2><span id="more-1654"></span>Great Conversation</h2>
<p>Elena Yatzeck (<a title="Elena Yatzeck on Twitter" href="https://twitter.com/#!/eyatzeck">@eyatzeck</a>) posted a comment on an earlier article about <a title="Agile Maturity Models" href="http://tynerblain.com/blog/2009/06/30/agile-maturity-model/">agile maturity models</a>.</p>
<blockquote><p>In terms of refinement, I’m thinking a lot these days about “staffing the engineering team correctly.” I’m not sure I agree in practice that you can or should try to staff all teams with “specializing generalists,” or at least not as taken to an extreme. (If you’ll forgive the self-promotion, I talked more about this here: <a title="no blender" href="http://pagilista.blogspot.com/2012/01/no-blender-zone-cross-functional-doesnt.html">http://pagilista.blogspot.com/2012/01/no-blender-zone-cross-functional-doesnt.html</a>.)</p></blockquote>
<p>I&#8217;ll not only &#8220;forgive&#8221; the promotion, I&#8217;ll re-promote it.  Good stuff.</p>
<p>When re-reading the maturity-model article, this snippet popped out at me:</p>
<blockquote><p>People over process is the right emphasis.  If you can’t find people that are “good enough” you might as well go home.  Doesn’t matter how agile you are if you don’t have the horsepower.  You also need people who are excited to “do agile” – they like to communicate, they enjoy the project and team dynamics of an agile process.  You’re also better off with <a title="Specializing Generalists" href="http://tynerblain.com/blog/2008/02/14/specializing-generalists/">specializing generalists</a> – ideally, every member of the team can do any work that is needed.  This is an efficiency play – you risk introducing bottlenecks when you have a specialist who is the “only one” who can do particular types of work – because you will not have a consistent mix of types of work from release to release.<br />
<cite><a title="Agile Maturity Model" href="http://tynerblain.com/blog/2009/06/30/agile-maturity-model/">Agile Maturity Model</a></cite></p></blockquote>
<p>Thirty months later, my experiences have increased my conviction that this is true &#8211; and have realized that the way I wrote t<strong>he quote above fails to provide a key clarification</strong>.</p>
<p>Following that link to an (even earlier) article on <a title="Specializing Generalists" href="http://tynerblain.com/blog/2008/02/14/specializing-generalists/">specializing generalists</a>, brings the following (emphasis added):</p>
<blockquote><p>The idea of specializing generalists is easiest to grasp by first saying what it is not. It is not staffing a team with a database expert, a user interface coder, a SOA (service oriented architecture) guru and an architect. With four specialists, each development task has an obvious owner. Database changes and refactoring go to the database expert. Reworking the UI goes into the queue for the AJAX hotshot. The problem is that this approach is only efficient when each team member is equally loaded with work. Since an agile team is continuously reprioritizing their work based on repeated feedback cycles as part of each release, this doesn’t work. The team will never face a situation where the (for example) four most important things to do are one item for each specialist. You can very easily have a release where all of the most important tasks are focused on the user interface. So all of the non-interface-experts are either working on lower-priority tasks, or even worse – they are idle. And you delay the most important work until the specialist can get to it.</p>
<p>By staffing a team <strong>with </strong><strong>people who have an area of expertise, but can do anything, you can maximize the value of each delivery cycle</strong>. In our example, where all of the tasks for a release are UI tasks, they can be interchangeably assigned to any of the developers. The UI expert may suggest an implementation approach, do code reviews, or provide guidance to all the other developers. But every developer (including the database guy) can sling code effectively to get the job done. Specializing generalists.</p>
<p>This is very effective for making the “development engine” a black-box. <strong>Feed it the highest priority stuff, and it all gets done</strong>. We can take that approach to the next level. Designers can implement, project managers can design test plans, and yes, product managers can specify design. Twitch. Back up a sentence and read it again.</p>
<p>Specifying design is not the job of the product manager. True. Very true. Emphatically true. But specifying design can be what a specializing generalist does, even when that person is also responsible for defining market needs.<br />
<cite><a title="Specializing Generalists 2008" href="http://tynerblain.com/blog/2008/02/14/specializing-generalists/">Specializing Generalists 2008</a></cite></p></blockquote>
<p>Elena&#8217;s article identifies a common misconception &#8211; that &#8220;specializing generalist&#8221; is a fancy way of saying &#8220;a bunch of people who can all do everything:</p>
<blockquote><p>It&#8217;s a seductively simple fallacy of division to interpret the concept of &#8220;cross functional&#8221; team to mean a &#8220;collection of cross-functional individuals.&#8221;  New agilists are quick to apologize that &#8220;we still have functional silos here&#8221; as though it would be much better if everyone could do all the same things.  Grab some equally skilled poly-functional people, have them all take turns doing all of the jobs as needed, and you&#8217;ll all laugh your way to on-time, high-quality, and valuable working software.</p>
<p>Not so fast!</p>
<p>The power of an effective agile team, like the power of any other effective team, doesn&#8217;t come from its homogeneity, but from its ability to harness its diversity.<br />
<cite><a title="No Blender Zone: Cross Functional Doesn't Mean Homogenous" href="http://pagilista.blogspot.com/2012/01/no-blender-zone-cross-functional-doesnt.html">No Blender Zone: Cross Functional Doesn&#8217;t Mean Homogenous</a></cite></p></blockquote>
<p>Elena goes on to say (emphasis mine)</p>
<blockquote><p>Team members shouldn&#8217;t attempt to Harrison Bergeron themselves into a mish-mash of mediocre (but working!) software.  Someone needs to facilitate the stakeholders into some sensible semblance of a business case.  Someone needs to build functional test suites that mercilessly beat on the code to prevent it from breaking in production.  Neither of these are exactly the same skills it takes to gradually evolve the design of a complex system in modules of 100 lines of code or less.  <strong>If people want to try new things, that&#8217;s great, but it needs to be with the realization that other jobs on the team are actual professions with skills and the need for experience in order to excel</strong>.</p></blockquote>
<p>I completely agree.</p>
<h2>Specializing Generalist</h2>
<p><img class="alignnone" title="Silos" src="http://sehlhorst.smugmug.com/Other/blog/i-s2GxBfX/0/O/silos.jpg" alt="" width="187" height="250" /></p>
<p>Specializing Generalist.</p>
<ul>
<li><strong>Not a <em>specialist</em>.</strong></li>
<li><strong>Not a <em>generalist</em>.</strong></li>
</ul>
<p>You need best of breed<em> </em>team members who specialize in areas of experise &#8211; &#8220;actual professions with skills,&#8221; as Elena puts it.  Without people who excel in the needed areas, you end up with a mediocre product.  How many times have you gone to the store and asked for the &#8220;middle of the pack&#8221; product?</p>
<p>That&#8217;s not even <em>table stakes</em> anymore.  Just the ability to create &#8220;something&#8221; isn&#8217;t interesting in the market, and isn&#8217;t interesting to the members of the team.  How many times have you heard someone brag &#8220;I love my job, I&#8217;m a cog in the machine?&#8221;  You have to have people who specialize in all of the needed areas (interface design, market insight, coding, quality, etc) in order to create a viable product.</p>
<p><strong>If you staff your team with (only) generalists you will fail.</strong></p>
<p>Pure generalists cannot create a product that is &#8220;good enough&#8221; &#8211; because they aren&#8217;t good enough at the creating the parts, from which the product is the sum.  You have to have people who specialize in creating great &#8220;parts&#8221; of the solution.  That&#8217;s what you need to have a shot at creating a great product.  But it isn&#8217;t <em>really</em> enough.  The problem is in how you define &#8220;great.&#8221;  <strong>Great means that customers buy it, users love it, and your competition is knocked back on their heels by it.</strong> Everyone agrees on this, but most people miss one thing.</p>
<p>Your market is changing &#8211; you also have to be fast.  You can&#8217;t solve the right problems if you aren&#8217;t fast, because the problems that are &#8220;right&#8221; are constantly changing &#8211; <a title="Market Driven Competitive Advantage" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">your market is a moving target</a>.</p>
<p>Specialists, as individuals, are capable of creating great &#8220;parts&#8221; in their silos, and those parts all add up to a &#8220;great&#8221; product, so what&#8217;s the problem?  The problem is that collectively, by the time the specialists are done, they are no longer solving the right problem.</p>
<p><strong>If you staff your team with (pure) specialists you will fail.</strong></p>
<p>The <em>most important</em> tasks for the team, in any given sprint, will not balance into a perfectly allocated workload, where each &#8220;part&#8221; is worked on by each specialist, where no one is idle, and no one is a bottleneck.  It just doesn&#8217;t happen.  I haven&#8217;t seen it in 15 years in the software world, or in my prior decade as a mechanical engineer.</p>
<p>When one specialist is waiting for something important, she isn&#8217;t idle, she&#8217;s just working on something that is by definition <em>not as important</em>.  OK, you&#8217;re minimizing the damage &#8211; but you&#8217;re still taking damage.  When another specialist is the bottleneck, you lose.  Nothing magical to do here.</p>
<p><strong>If you staff your team with specializing generalists you may succeed.</strong></p>
<p>The work that piles up in any one specialized silo is of varying degrees of complexity.  The &#8220;UI specialist&#8221; may be backed up with a bunch of CSS tweaks, some straightforward AJAX calls to write, and a gnarly refactoring of the model-view-controller model to adapt to changing understanding of market needs.  No one can solve the MVC problem without specialized skills &#8211; but with guidance from the UI expert, one of  the other team members can handle the AJAX calls and CSS updates.  Extend this same model across other aspects of the product.  Your database expert may be needed to optimize query performance or resolve locking problems, but other members of the team could make straightforward schema changes.</p>
<p>It is the collective ability of the team to optimize what they <em>collectively</em> work on that accelerates the team&#8217;s delivery of the most important capabilities.</p>
<p>You have to have people who specialize, in order to optimize individual performance.  But your team needs to be built with specializing generalists in order to optimize for team performance.</p>
<h2>T-Shaped People</h2>
<p>From an HR perspective, I was taught about &#8220;T-Shaped People&#8221; &#8211; people who have breadth and depth of skills.</p>
<ul>
<li>Specialists are &#8220;I-Shaped People&#8221; &#8211; people who have depth of expertise, without breadth</li>
<li>Generalists are &#8220;Minus-Shaped People&#8221; &#8211; people who have a breadth of skills, but no depth of expertise.</li>
<li>Specializing Generalists are &#8220;T-Shaped People&#8221; &#8211; people who have depth of expertise in one area, combined with a breadth of skills across many areas.</li>
</ul>
<p>These are the people you&#8217;re going for.</p>
<p>Thanks Elena for re-invigorating the discussion!</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+Specializing+Generalist+http%3A%2F%2Fbit.ly%2FA0e1Y4+" 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/2012/02/01/specializing-generalist/&amp;t=Specializing+Generalist" 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/2012/02/01/specializing-generalist/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<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>101</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>Good Stuff on Agile and UXD</title>
		<link>http://tynerblain.com/blog/2010/11/10/agile-and-ux/</link>
		<comments>http://tynerblain.com/blog/2010/11/10/agile-and-ux/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 02:56:59 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[uxd]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1396</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F11%2F10%2Fagile-and-ux%2F", "shorturl": "http://bit.ly/cKIAAo", "style": "big", "title": "Good Stuff on Agile and UXD" }); Best practices for user experience design and agile.  I don&#8217;t have the brainpower at the moment, or the experience and eloquence in general, to say it better than these guys.  So this week, I&#8217;m phoning it in, and deferring 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%252F2010%252F11%252F10%252Fagile-and-ux%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FcKIAAo%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Good%20Stuff%20on%20Agile%20and%20UXD%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F11%2F10%2Fagile-and-ux%2F", "shorturl": "http://bit.ly/cKIAAo", "style": "big", "title": "Good Stuff on Agile and UXD" });</script></div>
<p><img class="alignnone" title="phoning it in" src="http://sehlhorst.smugmug.com/Other/blog/cell-phone-small/103204127_ibX7b-O.jpg" alt="" width="250" height="227" /></p>
<p>Best practices for user experience design and agile.  I don&#8217;t have the brainpower at the moment, or the experience and eloquence in general, to say it better than these guys.  So this week, I&#8217;m <em>phoning it in</em>, and deferring to these folks to say it far better than I can.</p>
<h2><span id="more-1396"></span>UXD and Agile</h2>
<p><a title="best practices for UXD" href="http://agileproductdesign.com/blog/emerging_best_agile_ux_practice.html">Twelve emerging best practices for adding UX work to Agile development</a>, by Jeff Patton in 2008.  Incredibly comprehensive article here &#8211; both summarizing in breadth, and covering in depth.  If you&#8217;re interested in how user experience design (UXD) should work in an agile environment, this is the article you need to read.  If you&#8217;re <em>really</em> interested in UXD and agile &#8211; this is where you need to start!</p>
<p><a href="http://www.slideshare.net/mortenjust/an-introduction-to-ux-in-scrum-1289533">Scrum and UX &#8211; a presentation</a> by Morten Just from 2009.  Morten tells a great story about how many of the different disciplines within the &#8220;catchall&#8221; of UXD can fit in the world of projects being run in the Scrum framework.</p>
<p>My soundbite addition:</p>
<p>I feel like UXD is such a broad term that you can&#8217;t simply answer &#8220;how does UXD work in Scrum?&#8221; (a question I was asked today).  Some elements (outputs traditionally labeled as UXD) represent requirements (what should people be doing, what should some of the acceptance criteria be), and others represent design (how should things work / look / feel / exist, given a solution approach).</p>
<p>Every team will be organized differently, and parts of UXD that are &#8220;requirements&#8221; should be driven &#8211; in Scrum &#8211; by the product owner and UXD professional working together, expressing the need to enable the right stories with &#8220;good (big picture) design.&#8221;  The parts of UXD that are &#8220;design&#8221; should be handled inside the team, and the product owner (and doubly-so the stakeholders) should rely on their trust of the Scrum team to include &#8220;good UXD&#8221; as part of their design of solutions that enable stories.</p>
<p>As I mentioned in the pre-amble, Jeff and Morten do a much better job of articulating this point of view, so this article is 99% &#8220;go read their stuff&#8221; and 1% &#8220;my mental model that some of it should happen as part of expressing what needs to be done, and some of it should happen as expressing how it should be done.&#8221;</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+Good+Stuff+on+Agile+and+UXD+http%3A%2F%2Fbit.ly%2FcKIAAo+" 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/10/agile-and-ux/&amp;t=Good+Stuff+on+Agile+and+UXD" 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/10/agile-and-ux/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>A Prototype is Worth a Thousand Lines of Code</title>
		<link>http://tynerblain.com/blog/2010/10/25/a-prototype-is-worth-a-kloc/</link>
		<comments>http://tynerblain.com/blog/2010/10/25/a-prototype-is-worth-a-kloc/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 15:09:35 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile interaction]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[process prototyping]]></category>
		<category><![CDATA[prototypes]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[uml as prototype]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1385</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F10%2F25%2Fa-prototype-is-worth-a-kloc%2F", "shorturl": "http://bit.ly/aMAQo4", "style": "big", "title": "A Prototype is Worth a Thousand Lines of Code" }); A picture is worth a thousand words.  A prototype is worth a thousand lines of code.  Two key elements of product management &#8211; and of agile development are elicitation and feedback.  Low fidelity artifacts can significantly improve [...]]]></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%252F10%252F25%252Fa-prototype-is-worth-a-kloc%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FaMAQo4%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22A%20Prototype%20is%20Worth%20a%20Thousand%20Lines%20of%20Code%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F10%2F25%2Fa-prototype-is-worth-a-kloc%2F", "shorturl": "http://bit.ly/aMAQo4", "style": "big", "title": "A Prototype is Worth a Thousand Lines of Code" });</script></div>
<p><img class="alignnone" title="quick sketch" src="http://sehlhorst.smugmug.com/Other/blog/dillution-by-channels-2-tiny/1062982837_3eE4V-O.jpg" alt="" width="250" height="152" /></p>
<p>A picture is worth a thousand words.  A prototype is worth a thousand lines of code.  Two key elements of product management &#8211; and of agile development are elicitation and feedback.  Low fidelity artifacts can <em>significantly</em> improve both.  Polished, codified prototypes can create problems that <em>prevent</em> you from getting the benefits of communication.</p>
<p><span id="more-1385"></span></p>
<h2>Prototyping Anti-Pattern</h2>
<p>David Bernstein has three good quick-read articles about prototyping in the agile zone.  The first one depicts the primary anti-pattern of prototyping &#8211; <strong>mis-set expectations</strong>.</p>
<p> </p>
<blockquote><p>As I was walking him through the different screens I could see he was starting to get uneasy. As I talked I could see him becoming paler and tenser, as if he saw a ghost. After a while I asked him if he was ok. He finally said, “You mean to tell me that I just wrote you a check for over $100,000 for less than a week of work?”</p>
<p><cite><a title="prototyping leads to mis-set expectations" href="http://agile.dzone.com/news/prototyping-caveat">Prototyping Caveat</a></cite></p>
</blockquote>
<p>The second article is quick reminder of one of the goals of a prototype.</p>
<blockquote><p>The purpose of a prototype is to elicit feedback from others or verify a design approach will work. When doing this we generally only concern ourselves with the “happy path” through our code.</p>
<p><cite><a title="A Prototype is Not a Product" href="http://agile.dzone.com/news/prototype-not-product">A Prototype is Not a Product</a></cite></p>
</blockquote>
<p>David&#8217;s third article explores a little more about the mis-setting of expectations, and provides a good parallel from the film industry.</p>
<blockquote><p>Prototypes are rough sketches without the robustness of a final product and it is often confusing to users when we show them a half-baked version of their project for feedback, even though they know it is not yet finished.</p>
<p><cite><a title="Agile Prototyping on a Napkin" href="http://agile.dzone.com/news/agile-prototyping-napkin">Agile Prototyping on a Napkin</a></cite></p>
</blockquote>
<p>David&#8217;s advice is (good and) primarily about using low-fidelity prototypes to avoid disrupting the elicitation and feedback process.  Folks in the user experience community have known this for a long time, and adapted their processes accordingly.  Back in 2006, I wrote about <em><a title="Low fidelity prototyping" href="http://tynerblain.com/blog/2006/12/08/prototype-fidelity/">prototype fidelity</a></em> as part of exploring ways to use this insight in <a title="Requirements Gathering - 10 Techniques" href="http://tynerblain.com/blog/2006/11/21/ten-requirements-gathering-techniques/">requirements gathering</a>.  Prototyping, in particular, is a great way to <a title="eliciting implicit requirements" href="http://tynerblain.com/blog/2006/11/17/gathering-implicit-requirements/">elicit <em>implicit</em> requirements</a> &#8211; those unspoken (&#8220;you should have asked!&#8221;) requirements that your customer or stakeholder <em>assumed</em> you knew, or didn&#8217;t think to tell you.</p>
<h2>Multiple Levels of Interaction</h2>
<p>David focused on the initial &#8220;will this approach work?&#8221; elements of getting feedback on a design &#8211; and by inference, some low-fidelity user acceptance testing that the proposed approach will meet your customer&#8217;s requirements.  <a title="Follow Jan on Twitter" href="http://twitter.com/#!/JanMiksovsky">Jan Miksovsky</a> wrote an excellent article (also in 2006) that provides excellent guidance on <a title="Using Crude Sketches" href="http://miksovsky.blogs.com/flowstate/2006/10/using_crude_ske.html">how much fidelity to build into your prototype</a>, <em>depending on where you are in the design process</em>.  This is important &#8211; the type of feedback you need at different stages of your design process varies.  Jan proposes that the first prototypes be rough sketches, just as David points out.  Jan goes on to show how and when to add additional fidelity to your prototypes (read Jan&#8217;s article to see his great visual examples).  Like I said, the user experience community has known about this for a long time.</p>
<h2>Prototypes Are For Two-Way Communication</h2>
<p>The key element, and the reason for creating prototypes, is to get two-way communication.  A prototype is not just a status update about your design.</p>
<p><strong>A prototype is the start of a conversation.</strong></p>
<p><img class="alignnone" title="collaboration" src="http://sehlhorst.smugmug.com/Other/blog/collaboration/1063052453_72GGi-O.jpg" alt="photo of people collaborating" width="250" height="166" /> [thanks <a title="image credit" href="http://www.flickr.com/photos/uninen/2671178552/sizes/o/in/photostream/">uninen</a> for the image]</p>
<p>Prototyping is not only useful for design conversations, it is critical to understanding your requirements.  Yes, a prototype will you get feedback about the design-execution of your proposed solution.  More importantly, a prototype can help you make sure you&#8217;re solving the right market problems.</p>
<h2>Prototypes Are More Than Interface Mock-Ups</h2>
<p>The first thing we think about, and everything you&#8217;ve read so far in this article, is about getting feedback on the user interface of the product.  <a title="elicitation techniques" href="http://tynerblain.com/blog/2007/09/13/elicitation-techniques-2/">Prototypes are also useful for gathering business rules*</a>, understanding system complexity, and defining, clarifying, and validating requirements.</p>
<p style="padding-left: 30px;">*In that article, I show prototypes as &#8220;not being useful&#8221; for gathering business rules.  At that time, I was thinking in terms of interface mock-ups only, not other prototypes.</p>
<p>Use interface mock-ups when you need feedback about user interaction.  Use other artifacts when you need feedback about other aspects of your product.  You can use prototypes as an <a title="top ten active listening tricks" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">active-listening technique</a> when gathering market data too.  There are <a title="back of the napkin and communication" href="http://tynerblain.com/blog/2009/05/06/pictures-power-whitepapers/">lots of ways to draw stuff to help with communication</a>.</p>
<p>I&#8217;ve regularly used flow charts to prototype processes.  Within those flow-charts, which are initially prototypes of how the product will behave, are decision diamonds.  Those decision diamonds <em>prototype</em> the enforcement of business rules within the to-be-created product.  In the spirit of DRY (don&#8217;t repeat yourself), a quick polishing of your process diagram can serve as a persistent artifact of the requirements.  Just like a user interface mock-up.</p>
<p>In more complicated scenarios, I&#8217;ve also used <a title="UML statecharts" href="http://tynerblain.com/blog/2007/03/21/use-case-vs-statechart/">UML statecharts</a> and data flow diagrams to prototype behavior.</p>
<p>In the section on <a title="up-front planning and release cadence" href="http://tynerblain.com/blog/2010/10/20/cadence-versus-risk/">up-front planning in last week&#8217;s article on risk management and release cadence</a>, I talked about the <em>mental leap</em> that people need to make to envision a product that doesn&#8217;t yet exist.  Prototypes are like big springboards that help people leap that chasm of imagination.</p>
<p><img class="alignnone" title="leaping dude" src="http://sehlhorst.smugmug.com/Other/blog/leap/1063089185_8d7Hv-O.jpg" alt="" width="250" height="156" /></p>
<p><strong>Important Safety Tip</strong></p>
<p>Don&#8217;t use the wrong prototype (mock-up, flow chart, etc) for the wrong conversation or with the wrong stakeholder.  Showing when and where business rules are being enforced (in the process being designed) is great for getting feedback about your interpretation and potential embodiment of those rules.  It will be a disaster if you try and have this conversation with someone who is not the owner of those policies &#8211; like a representative user.  Sometimes, policies are &#8220;owned&#8221; by non-technical people who struggle to read diagrams.  You may have to walk them through how the diagram works.  They&#8217;re smart &#8211; they&#8217;ll get it.</p>
<p>Just remember &#8211; use the right prototype to emphasize the right ideas, and elicit the right feedback.</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+A+Prototype+is+Worth+a+Thousand+Lines+of+Code+http%3A%2F%2Fbit.ly%2FaMAQo4+" 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/10/25/a-prototype-is-worth-a-kloc/&amp;t=A+Prototype+is+Worth+a+Thousand+Lines+of+Code" 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/10/25/a-prototype-is-worth-a-kloc/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Use Cases for Iterative Development</title>
		<link>http://tynerblain.com/blog/2010/10/05/use-cases-and-iteration/</link>
		<comments>http://tynerblain.com/blog/2010/10/05/use-cases-and-iteration/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 12:53:42 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[agile use cases]]></category>
		<category><![CDATA[incremental development]]></category>
		<category><![CDATA[iterative development]]></category>
		<category><![CDATA[satisficing]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1357</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F10%2F05%2Fuse-cases-and-iteration%2F", "shorturl": "http://bit.ly/aoG6ea", "style": "big", "title": "Use Cases for Iterative Development" }); Almost everything I&#8217;ve read about use cases focuses on describing what needs to be added to your product.  Agile development says &#8220;get it working first, make it better second.&#8221;  That means changing the way the software enables a user to do [...]]]></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%252F10%252F05%252Fuse-cases-and-iteration%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FaoG6ea%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Use%20Cases%20for%20Iterative%20Development%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F10%2F05%2Fuse-cases-and-iteration%2F", "shorturl": "http://bit.ly/aoG6ea", "style": "big", "title": "Use Cases for Iterative Development" });</script></div>
<p><img class="alignnone" title="I35 and 45 Toll Interchange in Round Rock" src="http://sehlhorst.smugmug.com/Other/blog/Texas45small/1033564686_kg8bG-O.jpg" alt="" width="250" height="145" /></p>
<p>Almost everything I&#8217;ve read about use cases focuses on describing <em>what needs to be added</em> to your product.  Agile development says &#8220;get it working first, make it better second.&#8221;  That means changing the way the software enables a user to do something <em>they can already do</em>.  How do you manage requirements for incremental improvement?</p>
<h2><span id="more-1357"></span>Iterative Development and Incremental Improvement</h2>
<p>Iterative development is the process by which you release software in iterations &#8211; small, incrementally better versions of your software.  People usually think about this solely in terms of <em>enable the most valuable capabilities first, then the next most valuable capability next</em>.</p>
<p>That&#8217;s fine, when your product is new.  Eventually (or quickly!) you will reach the point when the <em>next most valuable improvement</em> is not to add a new capability, but rather, <strong>to make an existing capability more valuable</strong>.</p>
<h2>Everything is an Upgrade</h2>
<p>In a couple earlier articles about <a title="how to organize requirements when migrating to new software" href="http://tynerblain.com/blog/2006/03/15/organizing-a-software-migration-project/">organizing migration projects</a> and <a title="requirements for migration projects" href="http://tynerblain.com/blog/2006/03/09/software-requirements-for-migration-projects/">requirements for migration projects</a>, I wrote about how <em>migration</em> is a bit of a misnomer.  Everything is a migration.</p>
<p><img class="alignnone" title="migration project continuum" src="http://sehlhorst.smugmug.com/photos/59244846-M.png" alt="" width="501" height="196" /></p>
<p>My argument in those earlier articles is that the problems you&#8217;re solving with your &#8220;new&#8221; solution are not new.  Your customers are currently solving them in different ways.  The relevant question for migration projects is around how much your users are changing <em>the way they solve</em> their problems.</p>
<p>[As a slight segue, failing to appreciate this distinction can lead you to a project that is based on a <em><a title="Write good problem statements" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">faulty problem statement</a></em>.]</p>
<p>When you are delivering incremental improvements to your product, through iterative development, you are upgrading your software.  You are <em>migrating</em> your users from their old solution to their new solution.  It just so happens that you are replacing yourself, as you migrate them from the old version to the new one.</p>
<p>A viable strategy, that appeals to me personally, is to continuously innovate, <a title="market driven competitive advantage" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">disrupting your market</a>, before someone else does.  With this approach, you are intentionally reinventing your solution, making it difficult for someone else to out-innovate you.  This is a great way to approach <a title="strategic product raodmap" href="http://tynerblain.com/blog/2009/10/05/strategy-and-product-roadmaps/">developing your roadmap strategically</a>.</p>
<p><a title="The Pace of Market Changes" href="http://tynerblain.com/blog/2008/11/27/keeping-up-with-change/"><strong>Your market will change</strong></a><strong>.  Rapidly.</strong> Do you want to react to your competitors, or keep them on their heels while you stay on the balls of your feet?</p>
<p>The reverberations of the &#8220;new&#8221; Twitter still haven&#8217;t settled, and many of Twitter&#8217;s competitors are on their heels &#8211; some of them only now realizing that Twitter has always been a competitor and not just &#8220;a platform.&#8221;  The new Twitter doesn&#8217;t really change anything about how people use Twitter, except make it (markedly) better.</p>
<h2>Avoiding Featuritis</h2>
<p>When is it more valuable to improve what your software already enables, versus enabling users to accomplish more with your software?  Kathy Sierra introduced us to the concept of <em><a title="Featuritis" href="http://tynerblain.com/blog/2006/04/14/goldilocks-and-the-three-products/">featuritis</a></em>, the idea that <em>too much</em> is <em>too much</em>.</p>
<p>In an article on <a title="viral product management" href="http://tynerblain.com/blog/2009/03/02/viral-product-management/">viral product management</a>, I proposed that by making your software better, you can tap into an altruistic mechanism by which people will promote your product.  As an example, I proposed <a title="Usability Sells Software" href="http://tynerblain.com/blog/2007/01/10/usability-sells-software/">improving the usability of your software</a> as a means to cross this viral tipping point.</p>
<p><img class="alignnone" title="viral tipping point" src="http://photos.smugmug.com/photos/483853927_6nA22-L.png" alt="" width="486" height="241" /></p>
<p>One of the key ideas is that <em>making it better for users</em> makes your product better for your company.</p>
<h2>Managing &#8220;Improvement&#8221; Requirements</h2>
<p>Now that we all agree that there is value in making your software better [comment below if you disagree] the question becomes &#8220;<em>How</em>?!&#8221;</p>
<p>Use Cases can be used as the keystone to your requirements arch.  Sometimes, <a title="User Stories and Use Cases - Which One To Use?" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">user stories are better than use cases</a>, but <a title="Use Cases are Agile" href="http://tynerblain.com/blog/2008/02/18/cockburn-loves-agile-use-cases/">use cases are perfectly agile</a>.  When you&#8217;re starting a project, you want to apply an outside-in approach to defining the scope of that project &#8211; or more particularly, to <a title="How to Start Use Cases" href="http://tynerblain.com/blog/2007/03/28/how-to-start-use-cases/">define the scope of problems you are solving</a> in your roadmap. This article will talk in the language of use cases, but identical concepts and approaches apply when using user stories as well.</p>
<p>When you have prioritized a use case as &#8220;the next most valuable capability to introduce&#8221; you add it to the backlog for your sprint.  The implementation team then provides feedback that use case is &#8220;too big&#8221; and you have to slice it up.  It is important that you <a title="splitting use cases" href="http://tynerblain.com/blog/2010/09/08/sprint-backlog-splitting-user-stories/">don&#8217;t split the use case  in such a way that you only solve half the problem</a>.</p>
<p>You also shouldn&#8217;t deliver a &#8220;bad&#8221; product.  In fact, the ideal way to introduce a new capability is to <a title="Satisficing your Users" href="http://tynerblain.com/blog/2008/11/12/satisficing-sprints/">satisfice</a>, and not introduce the &#8220;perfect&#8221; solution in your first iteration.  Make your first solution &#8220;good enough.&#8221;  Part of the art is defining &#8220;good enough,&#8221; but rest assured, it is not the same as &#8220;the best you can possibly do.&#8221;</p>
<p><strong>Summarizing some key elements from above demonstrates the eventual reality you will face:</strong></p>
<ol>
<li>Every problem* your users face is already being solved, you are just providing a better solution.</li>
<li>There is diminishing, and eventually negative return on adding more capabilities to your product.</li>
<li>Your first release of a given capability will only be &#8220;good enough.&#8221;  That leaves room for improvement.</li>
</ol>
<p>*<em>Yes, you can pedantically define &#8220;the problem&#8221; as &#8220;the existing solution is not good enough&#8221; &#8211; but you still end up in the same place, so why bother</em>?</p>
<p>Eventually, the value of improving something you&#8217;ve already released will be greater than the value of releasing something new.</p>
<p><strong>What do you do?  You implement the same use case </strong><em><strong>again</strong></em><strong>.</strong></p>
<p>If your product is Software as a Service (SaaS), you absolutely should be thinking about things this way.  Becoming better is <a title="economics of SaaS" href="http://tynerblain.com/blog/2008/08/13/foundation-series-saas-economics/">a continuous improvement objective that is implicit in the economics of SaaS products</a>.</p>
<h2>Revisiting Use Cases</h2>
<p>Not to be confused with <em><a title="re-use of use cases in decomposition of epic use cases" href="http://tynerblain.com/blog/2006/11/27/subordinate-use-cases/">re-use of use cases</a>,</em> revisiting a use case is specifically revisiting &#8211; <strong>with the goal of improving</strong> &#8211; the implementation that is already in place within your product.  This is a special case of a <em>migration</em> project &#8211; you&#8217;re migrating your users from <em>your</em> old solution to your new and improved solution.</p>
<p><img title="migration project continuum" src="http://sehlhorst.smugmug.com/photos/59244846-M.png" alt="" width="501" height="196" /></p>
<p>You may be migrating to an identical process, perhaps with faster performance than your previous release was capable of.  Or you may be improving the procedure (improving usability, interaction design, visual design, etc) without affecting the process. Generally, a &#8220;make it better&#8221; use case improvement effort will have no more than a minor <em>process</em> impact.  Your users are still doing the same thing, they are just enjoying it more, or doing it more effectively.</p>
<p>When slicing use cases to make them fit within a single sprint, you may <a title="Avoid elastic users" href="http://tynerblain.com/blog/2007/07/23/elastic-users/">design them for a single user persona </a>in the first release, knowing that you won&#8217;t meet the expectations of a different user persona until the next release.  In this case, your non-functional requirements, constraints, or acceptance criteria will be different.  Your use case may also be different (in the details) while appearing to be the same.  This also common scenario can be addressed with the same approach.</p>
<p>Find that old use case (from several iterations ago) and put it back in the backlog.  Remember, agile is about conversation, not artifacts.  If you need to add an explanation to the use case, because your team fixates on the fact that it is &#8220;already working,&#8221; add a qualifier that it needs to be &#8220;better.&#8221;  Then have a conversation, and explain how it needs to be better.</p>
<h2>Is Design Part of Implementation?</h2>
<p>Some teams organize such that designers (both architects <em>designing code</em> and designers <em>designing interfaces</em> are being addressed here) are part of the implementation team.  Other companies treat designers as stakeholders &#8211; providing guidance and input to the product managers and product owners.</p>
<p>When a &#8220;new design&#8221; is being requested from <em>outside</em> the team, include that design guidance as part of the input to the implementation team &#8211; through artifact and / or clarification.</p>
<p>When a &#8220;new design&#8221; is being requested <em>of the team</em> (the designer is part of the team), express the new acceptance criteria to the team.  Note that these need to be <a title="writing measurable requirements" href="http://tynerblain.com/blog/2010/08/30/verifiable-requirements/">measurable requirements</a> if they are to be considered <a title="Writing good requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">good requirements</a>.</p>
<h2>Summary</h2>
<p>There will come a time when the most valuable thing you can do is improve the user experience for a capability your product already embodies.  When that time comes, use the same use case again, updated with the new constraints, non-functional requirements, and acceptance criteria.</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+Use+Cases+for+Iterative+Development+http%3A%2F%2Fbit.ly%2FaoG6ea+" 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/10/05/use-cases-and-iteration/&amp;t=Use+Cases+for+Iterative+Development" 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/10/05/use-cases-and-iteration/feed/</wfw:commentRss>
		<slash:comments>17</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>The One Idea of Your Product</title>
		<link>http://tynerblain.com/blog/2010/04/14/one-idea-product-management/</link>
		<comments>http://tynerblain.com/blog/2010/04/14/one-idea-product-management/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 14:32:09 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Kano Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[agile product management]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[minimum market acceptance]]></category>
		<category><![CDATA[product idea]]></category>
		<category><![CDATA[product manager]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1210</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F04%2F14%2Fone-idea-product-management%2F", "shorturl": "http://bit.ly/aLKAJK", "style": "big", "title": "The One Idea of Your Product" }); &#8220;For what one idea do you want your product to stand in the mind of your customer?&#8221;  I heard Roger Cauvin ask that question at the most recent ProductCamp Austin [correction - he said it here - thanks Roger], 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%252F04%252F14%252Fone-idea-product-management%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FaLKAJK%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22The%20One%20Idea%20of%20Your%20Product%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F04%2F14%2Fone-idea-product-management%2F", "shorturl": "http://bit.ly/aLKAJK", "style": "big", "title": "The One Idea of Your Product" });</script></div>
<p><img class="alignnone" title="blue light bulb" src="http://sehlhorst.smugmug.com/Other/blog/blue-light-bulb/836410544_9wRHz-O.jpg" alt="a blue light bulb, a visual metaphor for having a single idea" width="250" height="187" /></p>
<p>&#8220;For what <em>one idea</em> do you want your product to stand in the mind of your customer?&#8221;  I heard <a title="Roger Cauvin's blog" href="http://blog.cauvin.org/">Roger Cauvin</a> ask that question at the most recent <a title="pcaustin 2010" href="http://tynerblain.com/blog/2010/03/25/paustin-spring-2010/">ProductCamp Austin</a> [correction - he said it <a title="Writing Consistent Requirements" href="http://tynerblain.com/blog/2010/04/06/consistent-requirements/">here</a> - thanks Roger], and the quote has been jumping to the front of my mind almost daily ever since.  Maybe by writing about it I can exorcise the demon and get back to <em>using</em> the idea instead of being haunted by it.</p>
<p><span id="more-1210"></span></p>
<h2>The One Idea</h2>
<p>You&#8217;ve just been given a new assignment &#8211; your company needs a new software <em>thingamajig </em>so that you can play in the <em>whatchamacallit</em> space, and you&#8217;re going to drive product management for it.  You&#8217;ve also been asked to deliver the first version in six weeks.  Of course you&#8217;ll be able to do follow-on releases, after all, you are agile.  That&#8217;s how &#8220;agile&#8221; works, isn&#8217;t it?</p>
<p>Cool.  Exciting.  Challenging.</p>
<p>You sit down with the folks who will be building the product, and find out that they have already spoken with several stakeholders.  Excellent. You circle back with the stakeholders, and start to gather data about your market and audience.</p>
<p>Your schedule is aggressive, so you think about what is realistic to get done in <a title="How to use timeboxes for scheduling software delivery" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">a very small timebox</a>.  With the current schedule, you can&#8217;t afford to get <a title="Avoiding Analysis Paralysis" href="http://tynerblain.com/blog/2007/08/30/analysis-paralysis/">caught in analysis paralysis</a>, and you can&#8217;t realistically do in depth market analysis, persona development, hyper-accurate requirements prioritization, etc.  You do, however, have time to do the most important thing &#8211; define the <em>one idea that will define your product</em>.</p>
<p><strong>If you cannot come up with this idea, you need to push back on your management team, and delay the launch of your product until you have that one idea.</strong></p>
<h2>Don&#8217;t Abuse Agile</h2>
<p>Agile is designed to help you rapidly create iteratively <em>better</em> products, with iterative development and <a title="Market Driven Competitive Advantage" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">continuous infusion of market feedback</a> and data.  Agile <strong><em>is not</em></strong> a process by which you start typing without any idea of what you intend, releasing it and <em>then</em> getting feedback in an iterative process.  If that&#8217;s how you&#8217;re approaching agile, your process is broken.</p>
<p><img class="alignnone" title="innovation" src="http://www.smugmug.com/photos/359586997_xXG83-L.gif" alt="" width="416" height="378" />[image from <a title="Market Driven Competitive Advantage" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">Market Driven Competitive Advantage</a>]</p>
<p>Unless you&#8217;re very lucky, your first iteration will be a waste of time and money.  Wouldn&#8217;t you rather <a title="successful products are intentional" href="http://tynerblain.com/blog/2008/05/19/successful-products/">be intentional</a> than lucky? Make sure you have that <em>one idea</em> before you start developing.</p>
<h2>Strategic Alignment</h2>
<p>You need to come up with a <em>one idea</em> that is aligned with and supports your corporate strategy.  At a minimum, you have to make sure that you have an idea that is aligned with <a title="managing stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">your stakeholder&#8217;s goals</a>, based on the assumption that those goals are aligned with corporate strategy.</p>
<h2>Wow</h2>
<p>Your <em>one idea</em> really needs to make your users say &#8220;Wow!&#8221;</p>
<p><img class="alignnone" title="fishhook" src="http://sehlhorst.smugmug.com/Other/blog/hook/836460644_8eTUg-O.jpg" alt="fishhook" width="166" height="250" /></p>
<p>I was explaining the importance of this to a colleague (who is not a product manager), and his response was &#8220;Oh, you mean <em><strong>the hook</strong></em>.&#8221;</p>
<p>I was reminded that you not only have to provide a <em>wow</em> experience for your users, but you have to present a <em>hook</em> that will capture the imagination of your buyers.  Remember that <a title="buyer personas and user personas" href="http://tynerblain.com/blog/2008/07/22/buyers-and-users/">buyer personas make decisions based on their <em>perceptions </em>of user problems</a> [<a title="Selling to Your Buyer" href="http://www.stickyminds.com/processimprovement.asp?Function=edetail&amp;ObjectType=ART&amp;ObjectId=15906&amp;tth=DYN&amp;tt=siteemail&amp;iDyn=13">more on convincing buyers</a>].</p>
<h2>Satisfice</h2>
<p>Remember that you don&#8217;t want to try and do everything perfectly in the first release &#8211; <a title="Satisficing" href="http://tynerblain.com/blog/2008/11/12/satisficing-sprints/">you want to satisfice</a>.  You may only be able to target a <em>single </em>persona with a solution to a <em>single </em>problem.  You just need to make sure you are solving the <em>right</em> problem &#8211; which is where Kano analysis is very handy for identifying the <em><a title="minimum market acceptance" href="http://tynerblain.com/blog/2010/03/31/minimum-market-acceptance/">Minimum Market Acceptance</a></em> criteria.</p>
<p><img class="alignnone" title="kano analysis focus on personas" src="http://sehlhorst.smugmug.com/Other/blog/kano-personas/824597829_9M8zS-S.png" alt="" width="400" height="296" /> [From <a title="Minimum Market Acceptance" href="http://tynerblain.com/blog/2010/03/31/minimum-market-acceptance/">Minimum Market Acceptance</a>]</p>
<h2>Conclusion: A Balancing Act</h2>
<p>Defining the <em>one idea</em> for your product is a balancing act.</p>
<ul>
<li>You have to align the <em>one idea</em> with your corporate strategy and stakeholder goals</li>
<li>You have to solve a <em>valuable</em> problem for your users, presented in a way that captivates your buyers</li>
<li>You have to create a product that is <em>compelling</em> right away &#8211; good <em>enough</em> in execution to enter your market</li>
<li>And you have to get the first release out in six weeks!</li>
</ul>
<p>Good luck!  Or better yet &#8211; Good Intent!</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+The+One+Idea+of+Your+Product+http%3A%2F%2Fbit.ly%2FaLKAJK+" 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/04/14/one-idea-product-management/&amp;t=The+One+Idea+of+Your+Product" 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/04/14/one-idea-product-management/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>Most Engaging Articles of 2009</title>
		<link>http://tynerblain.com/blog/2010/01/05/most-engaging-articles-of-2009/</link>
		<comments>http://tynerblain.com/blog/2010/01/05/most-engaging-articles-of-2009/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 07:00:18 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Administrivia]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[top ten list]]></category>
		<category><![CDATA[tyner blain]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1161</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F01%2F05%2Fmost-engaging-articles-of-2009%2F", "style": "big", "title": "Most Engaging Articles of 2009" }); Engagement &#8211; that&#8217;s what this whole product management blogging thing is about.  Check out what Tyner Blain readers found to be the most engaging articles in 2009. Deep Dives If you&#8217;re new to Tyner Blain, you may be surprised by the length of [...]]]></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%252F01%252F05%252Fmost-engaging-articles-of-2009%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Most%20Engaging%20Articles%20of%202009%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F01%2F05%2Fmost-engaging-articles-of-2009%2F", "style": "big", "title": "Most Engaging Articles of 2009" });</script></div>
<p><img class="alignnone" title="engagement" src="http://sehlhorst.smugmug.com/Other/blog/engagement-ring/757754045_4RPCx-O.jpg" alt="" width="250" height="190" /></p>
<p>Engagement &#8211; that&#8217;s what this whole product management blogging thing is about.  Check out what Tyner Blain readers found to be the most engaging articles in 2009.</p>
<h2><span id="more-1161"></span>Deep Dives</h2>
<p><img class="alignnone" title="diving deep" src="http://sehlhorst.smugmug.com/Other/blog/diving/757757107_gNAMt-O.jpg" alt="" width="250" height="187" /></p>
<p>If you&#8217;re new to Tyner Blain, you may be surprised by the length of the articles here.  I joke that they are long because I don&#8217;t have time to edit.  <a title="Stewart on Twitter" href="http://twitter.com/stewartrogers">Stewart Rogers</a> jokes that they are long because I&#8217;m incapable of writing a short article.  If you&#8217;ve been here a while, you know what you&#8217;re in for.  If you&#8217;ve been here a <em>long</em> while, then you&#8217;re glad (like me) that I don&#8217;t write one per day any more.</p>
<p>Product Management is simultaneously a broad and deep discipline, requiring us to have a breadth of perspective combined with a depth of insight.  We then have to apply that in a market context, effectively navigating the political waters of our organizations.  Most of the articles here either try to skim the breadth of a range of related topics, or plumb the depths of a single topic.  Doing that in under a thousand words is pretty hard.  Most of the articles here also link to other articles, to try and provide even more depth and context, and encourage additional critical thinking.</p>
<p>One measure of the<em> quality</em> of the articles here is how often they stimulate readers to read further, or dive deeper into the topics.  While web analytics won&#8217;t allow us to measure how thought-provoking an article is, we can look to see how many people dive into the linked articles, versus how many people move on to something else.  We can measure the <em>bounce rate</em> of an article to see how often people leave a page without following any of the &#8220;tell me more&#8221; links.</p>
<p>Looking at ~170,000 page views at Tyner Blain in 2009, narrowed down to only those articles with at least 100 page views, here is the top-ten list of most engaging (or &#8220;least abandoned&#8221; if you&#8217;re a &#8220;cup is half empty&#8221; person) articles:</p>
<ol>
<li><a title="Introduction to a series of articles on use cases" href="http://tynerblain.com/blog/2005/12/18/use-case-series-introduction/">Use Case Series: Introduction</a>: A collection of articles on the &#8220;traditional&#8221; forms of use cases &#8211; informal, formal, UML.</li>
<li><a title="agile development of use cases" href="http://tynerblain.com/blog/2007/04/02/agile-development-of-use-cases/">Agile Development of Use Cases</a>: A dive into the dynamics and cadence of an agile process for developing use cases.</li>
<li><a title="Managing Market Data" href="http://tynerblain.com/blog/2008/08/19/managing-market-data/">How Do </a><em><a title="Managing Market Data" href="http://tynerblain.com/blog/2008/08/19/managing-market-data/">You</a></em><a title="Managing Market Data" href="http://tynerblain.com/blog/2008/08/19/managing-market-data/"> Manage Market Data?</a>: A collection of articles exploring different market-immersion techniques in depth.</li>
<li><a title="Scheduling Requirements Changes" href="http://tynerblain.com/blog/2006/04/11/scheduling-requirements-changes-part-2/">Scheduling Requirements Changes &#8211; Part 2</a>: A focus on practical techniques for managing change with an agile development process.</li>
<li><a title="BPMN Mea Culpa" href="http://tynerblain.com/blog/2006/08/22/yesterdays-bpmn-post-was-a-big-fat-lie/">Yesterday&#8217;s BPMN Post Was A Big Fat Lie</a>: A mea culpa and clarification of interest to folks following the <a title="Introduction to BPMN" href="http://tynerblain.com/blog/2006/07/18/foundation-series-business-process-modeling/">BPMN</a> Series.</li>
<li><a title="why ask why?" href="http://tynerblain.com/blog/2005/12/13/everything-i-needed-to-know-i-forgot-in-kindergarden/">Everything I Needed To Know I Forgot in Kindergarten</a>: Why asking <em>why?</em> is important.</li>
<li><a title="Plan Your Sprint by ROI" href="http://tynerblain.com/blog/2008/10/16/planning-sprints-by-roi/">Plan Your Next Sprint by ROI &#8211; Part 1</a>: Prioritizing by <em>Bang for the Buck</em>, not just <em>Bang</em>.</li>
<li><a title="10 Agile Mistakes" href="http://tynerblain.com/blog/2007/01/03/going-agile-ten-common-mistakes/">Ten Common Mistakes of Going Agile</a>: A collection of articles about common pitfalls encountered when adopting agile practices.</li>
<li><a title="Never Completing a Project" href="http://tynerblain.com/blog/2007/08/06/perpetually-almost-finished-projects/">Perpetually </a><em><a title="Never Completing a Project" href="http://tynerblain.com/blog/2007/08/06/perpetually-almost-finished-projects/">Almost</a></em><a title="Never Completing a Project" href="http://tynerblain.com/blog/2007/08/06/perpetually-almost-finished-projects/"> Finished Projects</a>: Organizing a project with discrete deliverables and rolling-wave planning to avoid the &#8220;90% done, 90% remaining&#8221; problem.</li>
<li><a title="Timeboxes are better than the Iron Triangle" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">How To Use Timeboxes for Scheduling Software Delivery</a>: One of my personal favorites.  A rational approach to making trade-offs when your &#8220;perfect&#8221; plan has to change.</li>
</ol>
<p>OK Stewart, that&#8217;s only 519 words.</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+Most+Engaging+Articles+of+2009+http%3A%2F%2Fbit.ly%2F4QJ30i+" 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/01/05/most-engaging-articles-of-2009/&amp;t=Most+Engaging+Articles+of+2009" 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/01/05/most-engaging-articles-of-2009/feed/</wfw:commentRss>
		<slash:comments>6</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>24</slash:comments>
		</item>
		<item>
		<title>Agile Prioritization: Which Widget?</title>
		<link>http://tynerblain.com/blog/2009/10/19/agile-prioritization/</link>
		<comments>http://tynerblain.com/blog/2009/10/19/agile-prioritization/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 03:54:46 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[product management and user experience]]></category>
		<category><![CDATA[ux and product management]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1093</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F10%2F19%2Fagile-prioritization%2F", "style": "big", "title": "Agile Prioritization: Which Widget?" }); Your company is building out a toolkit to support third-party developers.  You&#8217;ll need a bunch of different types of widgets &#8211; combo-boxes, text entry fields, domain-specific controls, etc.  You&#8217;ve got a long list of desired controls from your customers.  You&#8217;re agile.  What do you [...]]]></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%252F10%252F19%252Fagile-prioritization%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Agile%20Prioritization%3A%20Which%20Widget%3F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F10%2F19%2Fagile-prioritization%2F", "style": "big", "title": "Agile Prioritization: Which Widget?" });</script></div>
<p><img class="alignnone" title="agile combobox" src="http://sehlhorst.smugmug.com/photos/686509239_2Y8GV-O.png" alt="" width="205" height="194" /></p>
<p>Your company is building out a toolkit to support third-party developers.  You&#8217;ll need a bunch of different types of widgets &#8211; combo-boxes, text entry fields, domain-specific controls, etc.  You&#8217;ve got a long list of desired controls from your customers.  You&#8217;re agile.  What do you build first?</p>
<h2><span id="more-1093"></span>Agile In A Soundbite</h2>
<p>Being <a title="agile explained" href="http://tynerblain.com/blog/2007/03/16/explaining-agile-development/">agile is about delivering incremental value</a>, quickly, getting feedback, and then delivering more incremental value.  Repeat until &#8220;done.&#8221;  <em>Good</em> agile adds a qualifier &#8211; do the <em>most valuable</em> thing quickly, get feedback, do the <em>most valuable</em> thing (that has not already been done) quickly. <em>Better</em> <a title="value optimization and prioritization" href="http://tynerblain.com/blog/2007/07/31/prioritization-and-value-maximization/">agile optimizes the rate at which you deliver value</a> by taking into account both benefit and cost.  <em>Great</em> agile overlays a focus on getting better at doing all of these things while you do them &#8211; becoming a learning organization.</p>
<h2>Boiling the Ocean</h2>
<p><img class="alignnone" title="boiling the ocean" src="http://sehlhorst.smugmug.com/photos/686571065_y35xb-O.jpg" alt="" width="250" height="166" /></p>
<p>A product manager I was coaching was faced with a challenge commonly referred to as <em>boiling the ocean</em>. His team was tasked with solving a market problem, and they were constrained to doing it with a service-oriented architecture that exposed a set of widgets (user interface controls) that customers could easily integrate into their products.  This approach was designed to provide competitive differentiation by reducing the time and cost to deploy solutions that allowed customers to integrate his product into their existing platforms.</p>
<p>In initial conversations with customers, technologists, and architects, this product manager quickly amassed a list of desired widgets (controls) and scenarios (stories) in which they could be used.  The product manager&#8217;s team had recently switched to an agile development methodology.  The internal stakeholders, not yet accustomed to agile development, wanted &#8220;all of the widgets,&#8221; now.</p>
<p>This product manager was able to convince them that the team would deliver the widgets incrementally, following agile principles.</p>
<p>His question was &#8211; <em>How do I sequence the widgets in the backlog</em>?</p>
<h2>Defining Widget Priority</h2>
<p>The product manager had a list of widgets, combo-boxes, data-grids, text fields, radio buttons, etc., and for each widget, he had a real-world scenario showing how the widget could be used.  Most of the scenarios involved customers using multiple widgets.  He wondered if he should do some sort of analysis that detailed the frequency of use of each widget.  &#8221;This widget is used in 7 scenarios, so it should be done first; this widget is used in 5 scenarios&#8230;&#8221;</p>
<p>There was a strong temptation to add several &#8220;Create a widget&#8221; tasks to his backlog.  It would be easy for his development team to estimate the effort required to deliver each widget.  His team wanted to deliver incrementally, and &#8220;one widget at a time&#8221; felt like logical, discrete chunks of work to them.  They could easily sink their teeth into estimating, building, and testing each widget.</p>
<p>A quick reminder of a main tenet of agile, delivering incremental value, illuminated the flaw in this approach.  This approach would have been an <em>inside-out</em> prioritization, when <a title="outside-in software development" href="http://tynerblain.com/blog/2007/09/27/outside-in/">value delivery requires an outside-in perspective.</a> (See the &#8216;recommended reading&#8217; suggestions on this page to check out Kessler and Sweitzer&#8217;s great book.)</p>
<p>If the team used this approach, after the first widget was complete, they would be able to deliver exactly 1 task, and 0 stories.  Development teams don&#8217;t deliver tasks, however.  The team&#8217;s customers would not be able to get incremental value from having a single widget.  The team would have delivered seven incomplete stories &#8211; so they would have delivered no stories at all!</p>
<p>We reworked his approach as follows:</p>
<ol>
<li><strong>Assess a value for each story</strong>, making sure that<a title="writing complete user stories" href="http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/"> each story would enable his customers to accomplish something valuable</a>.</li>
<li>Engage their user interface /<a title="definition of user experience" href="http://tynerblain.com/blog/2006/03/03/foundation-series-user-experience-disciplines/"> user experience</a> designer to <em><strong>design</strong></em><strong> a solution for the most valuable story</strong>.  This design was constrained to use widgets in the user interface.  The suggested way to communicate this design was with a storyboard and low-fidelity wireframes.</li>
<li><strong>Identify the widgets needed</strong> to be built to deliver that story, <em>using the designer&#8217;s design</em>.</li>
<li><strong>Deliver the story</strong> to the development team, including the storyboard, wireframes, and list of widgets to be used as acceptance criteria.</li>
<li>Get the development team to <strong>size (estimate) the effort to complete each story</strong>.</li>
<li>Where stories were too big (epics), <strong>collaborate </strong>to identify good ways to <a title="agile story decomposition" href="http://tynerblain.com/blog/2007/06/27/benefits-of-agile-stories/">break up the stories</a> into manageable chunks.</li>
<li><strong>Repeat steps 2 through 6</strong> until the amount of identified effort was likely to fill the release (keep the dev team busy delivering value).</li>
<li>As the team delivers each story, get feedback from the market, revisit the prioritization, and revise the &#8220;next&#8221; story.</li>
</ol>
<p>What we discovered was that a scenario like the following (modified for this article) played out:</p>
<ul>
<li>The first story required two widgets.  As no widgets existed, both had to be built.</li>
<li>The second story required three widgets, but two of them had been built to support the first story &#8211; only one <em>incremental</em> widget had to be created.</li>
<li>The third story used one of the widgets from the first story, but required additional behaviors.  The original widget was modified to provide <em>incremental</em> capabilities (and value).</li>
</ul>
<h2>A Note On Team Structure</h2>
<p>Astute readers will notice that there was a <em>design step</em> &#8220;inside the requirements process&#8221; &#8211; before the stories were delivered to the development team.  Technically, that is true, for the way this particular company was organized.  The user experience designer was not a member of the scrum team, but rather, an external consultant who supported multiple teams.  The product manager engaged the designer prior to engaging the development teams.</p>
<p>This just as easily could have happened as follows:</p>
<ol>
<li>Product manager identifies, values, and prioritizes stories to be added to the backlog.</li>
<li>Development team, as part of sizing the stories, engages their user experience designer to select the appropriate widgets, and those <em>design decisions</em> inform the estimation process.</li>
<li>Everything else is the same.</li>
</ol>
<p>This <em>procedural variation</em> does not have design &#8220;inside the requirements process.&#8221;  The same people do the same things, in the same sequence in this scenario.  The only difference is that the interface / interaction designer is a member of the development team.  That would be ideal, but that was not how the company was organized.</p>
<p>In this particular example, <a title="product managers and UX designers" href="http://tynerblain.com/blog/2007/03/05/product-management-and-ux/">having the product manager collaborate with the UX designer</a> made the most sense.  It introduced less complexity for the product manager to accept responsibility for this activity than it would have for the development team (who was still new to using an agile delivery cadence) to do it.</p>
<h2>Conclusion</h2>
<p>The key ideas at play here:</p>
<ul>
<li>Focus on <em>realizable</em> <strong>value to the customer</strong> (outside-in development), not <em>tractable</em> tasks (inside-out development).</li>
<li><strong>Collaboration with a UX</strong> professional is key to driving &#8220;interface requirements.&#8221;</li>
<li><strong>Deliver frequently and valuably</strong>, get feedback (learn), and incorporate that knowledge into whatever is next.</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+Agile+Prioritization%3A+Which+Widget%3F+http%3A%2F%2Fbit.ly%2F401Wu2+" 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/10/19/agile-prioritization/&amp;t=Agile+Prioritization%3A+Which+Widget%3F" 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/10/19/agile-prioritization/feed/</wfw:commentRss>
		<slash:comments>16</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>Agile Maturity Model &#8211; What&#8217;s Next?</title>
		<link>http://tynerblain.com/blog/2009/06/30/agile-maturity-model/</link>
		<comments>http://tynerblain.com/blog/2009/06/30/agile-maturity-model/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 23:29:49 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[agile maturity model]]></category>
		<category><![CDATA[business agility]]></category>
		<category><![CDATA[CMMI]]></category>
		<category><![CDATA[maturity model]]></category>
		<category><![CDATA[rmm]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=979</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F06%2F30%2Fagile-maturity-model%2F", "style": "big", "title": "Agile Maturity Model - What's Next?" }); The maturity model approach to describing organizations and processes comes and goes out of fashion.  It is a repeating framework de jour.  In the game of agile jargon whack-a-mole, the agile maturity model is poking its head up again. Agile Maturity Model Ellen [...]]]></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%252F06%252F30%252Fagile-maturity-model%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Agile%20Maturity%20Model%20-%20What%27s%20Next%3F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F06%2F30%2Fagile-maturity-model%2F", "style": "big", "title": "Agile Maturity Model - What's Next?" });</script></div>
<p><img class="alignnone" title="scout hamilton sehlhorst as a puppy" src="http://sehlhorst.smugmug.com/photos/578544627_BfDyP-L.jpg" alt="" width="187" height="250" /></p>
<p>The <em>maturity model</em> approach to describing organizations and processes comes and goes out of fashion.  It is a repeating framework de jour.  In the game of agile jargon whack-a-mole, the <em>agile maturity model</em> is poking its head up again.<br />
<span id="more-979"></span></p>
<h2>Agile Maturity Model</h2>
<p><a title="EBG Consulting" href="http://www.ebgconsulting.com/">Ellen Gottesdeiner</a>, author of <em><a title="requirements by collaboration at amazon" href="http://www.amazon.com/dp/0201786060?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0201786060&amp;creative=373489&amp;camp=211189">Requirements by Collaboration</a></em>, tweeted (<a title="Follow Ellen on Twitter" href="http://twitter.com/ellengott">@ellengott</a>) a few hours ago with a link to an article proposing a set of <a title="maturity models" href="http://salhir.wordpress.com/2009/06/26/maturity-models-leanness-agility-competitiveness-and-collaboration/">maturity models</a>.  She graciously passed on the opportunity to comment about the &#8220;agile maturity model&#8221; when pointing out her like of the collaboration maturity model.  The article proposed the following as an agile maturity model:</p>
<blockquote><p><strong>Agile Maturity Model (AMM)</strong></p>
<p>0 – <em>Dormant</em></p>
<p>1 – <em>Speed</em>: Focusing on being expeditious.</p>
<p>2 – <em>Reactive</em>: Focusing on acting relative to change from the perspective of the moment rather than a longer timeframe.</p>
<p>3 – <em>Responsive</em>: Focusing on acting relative to change from the perspective of the moment balanced with a longer timeframe.</p></blockquote>
<p>I didn&#8217;t find it to be a particularly useful model.  Although descriptive, it won&#8217;t help your organization improve.</p>
<h2>What Does Maturity Mean?</h2>
<p>I wrote a series of articles a couple years ago that <a title="CMM and RMM" href="http://tynerblain.com/blog/2007/01/25/cmmi-and-rmm-intro/">explored the CMMI and RMM</a> &#8211; the capability maturity model and the requirements maturity model.  These are two different models that use <em>maturity</em> as a concept for articulating different levels, or grades (or enlightenment, or rigor), with respect to organizational behaviors.  At the time, there was both momentum and confusion around the notion of a <em>requirements</em> maturity model.  CMMI is a description of an organization&#8217;s rigor in &#8220;saying what it does, and doing what it says.&#8221;  RMM is an assessment of the level of critical thinking incorporated into the ways an organization is using requirements to develop products.</p>
<p>The problem is that people were incorrectly assuming that an organization &#8220;at level 4 CMMI&#8221; would approach requirements management at a comparably enlightened level.  The problem is that they are putting entirely unrelated concepts into similarly named classifications.  An organization could be at CMMI 1 and RMM 4 or RMM 2 and CMMI 3.  That series of articles explored what it would mean to be in any of the combinations of &#8220;maturity&#8221; for those two models.  Check out all the articles in the series if you want to put it all in perspective:</p>
<ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 20px; padding: 0px;">
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;"><a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="Introduction to CMMI Levels" href="http://tynerblain.com/blog/2006/03/10/foundation-series-cmmi-levels-explained/">Foundation Series: CMMI Levels Explained</a></li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;"><a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="What CMMI Level to Use" href="http://tynerblain.com/blog/2006/03/12/what-cmmi-level-should-we-use/">What CMMI Level Should We Use?</a></li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;"><a style="color: #a30000; text-decoration: none; padding: 0px; margin: 0px;" title="Introduction to Mapping the RMM to the CMMI" href="http://tynerblain.com/blog/2007/01/25/cmmi-and-rmm-intro/">CMMI Levels and RMM Introduction</a></li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;"><a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="Mapping RMM Level 1 to CMMI" href="http://tynerblain.com/blog/2007/01/26/cmmi-and-rmm-level-1/">CMMI Levels and RMM Level 1 – Written Requirements</a></li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;"><a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="CMMI Levels and RMM Level 2 - Organized Requirements" href="http://tynerblain.com/blog/2007/01/29/cmmi-and-rmm-level-2/">CMMI Levels and RMM Level 2 – Organized Requirements</a></li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;"><a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="CMMI Levels and RMM Level 3 - Structured Requirements" href="http://tynerblain.com/blog/2007/01/30/cmmi-and-rmm-level-3/">CMMI Levels and RMM Level 3 – Structured Requirements</a></li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;"><a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="CMMI Levels and RMM Level 4 - Traced Requirements" href="http://tynerblain.com/blog/2007/01/31/cmmi-and-rmm-level-4/">CMMI Levels and RMM Level 4 – Traced Requirements</a></li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;"><a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="CMMI Levels and RMM Level 5 - Integrated Requirements" href="http://tynerblain.com/blog/2007/02/01/cmmi-and-rmm-level-5/">CMMI Levels and RMM Level 5 – Integrated Requirements</a></li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;">Don’t forget to take our <a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="Quick Poll on CMMI and RMM Levels" href="http://tynerblain.com/blog/2007/02/02/cmmi-and-rmm-survey/">One Minute Survey on CMMI and RMM</a>.</li>
</ul>
<h2>Making a Maturity Model Useful</h2>
<p>Why bother with a maturity model?  Not so you can &#8220;keep score&#8221; relative to others &#8211; rather, so that you can improve your own organization.  For a maturity model to be useful, you have to be able to do two things.</p>
<ol>
<li>You must be able to determine where your organization is in the model.</li>
<li>You must be able to identify actions you can take to &#8220;improve&#8221; your organization relative to the model.</li>
</ol>
<p>If you can&#8217;t measure maturity, and the model does not provide guidance about how to improve, it&#8217;s useless.  One challenge with maturity models is that they risk becoming contextually narrow in their application.  The more concrete a measurement or suggestion becomes, the less extensible it is likely to be.  Ideally, your model would be broadly applicable to many organizations.</p>
<p>With <a title="agile manifesto and cockburn's values" href="http://tynerblain.com/blog/2006/05/10/agile-values-alistair-cockburn-on-the-agile-manifesto/">an agile manifesto</a> that emphasizes people over process, it is ironic to consider applying a metric that measures your agile process.  So &#8211; goal #1 is immediately undermined.  Goal #2 &#8211; improving your organization, is, however, very valuable.</p>
<h2>Improving An Agile Process</h2>
<p>I&#8217;ve worked in several agile environments, both as a practicioner and as someone helping to transform organizations to become agile (or better at agile).  I&#8217;ve worked in enterprise software, helping large teams adopt agile processes; with a SaaS consumer product team, and in large IT departments with collections of teams adopting agile processes at varying paces.  I&#8217;ve played on both sides of the fence (delivery/QA &amp; product management/ownership).</p>
<p>Going from zero to sixty on agile is a big task.  You can&#8217;t solve all of the organizational, practical, and interpersonal challenges at the same time.  Or at least you would be more effective tackling and resolving each issue in sequence.  In fact, you should solve the most important / largest problem first &#8211; then move on to the next, and so on.  You can call it <em>agile agile adoption</em>, or you can call it eating the elephant.</p>
<p>One powerful use of a maturity model is highlighting the next-biggest hurdle you have to overcome.  Unfortunately, most communication about maturity models is &#8220;look which hurdle we just overcame&#8221; &#8211; but the focus should be on &#8220;what&#8217;s next?&#8221;</p>
<p>When helping organizations be effective with agile processes, there are some clear &#8220;you have to overcome this first&#8221; challenges, that if unresolved, make other challenges irrelevant.</p>
<p>If you&#8217;re a software developer, I&#8217;m sure you&#8217;ve experienced the following scenario:</p>
<ul>
<li>A bug is reported.</li>
<li>You fix the bug, and write some tests to prevent it from reoccuring.</li>
<li>While testing, you discover another bug that was <em>hidden by</em> the first bug.</li>
</ul>
<p>Fixing that second bug doesn&#8217;t do any good until you&#8217;ve fixed the first one.</p>
<p>If you&#8217;re a product manager or business analyst, think about it in terms of capability enhancements.  Is a <em>faster</em> search important if the current search algorithm is not returning the right results?  Get good results first, then make it faster.</p>
<p>You have to solve the biggest/closest/roadblockiest issue first.  Then move on to the next issue.  That&#8217;s how you should use a maturity model &#8211; as guidance about &#8220;what&#8217;s next?&#8221;</p>
<p>When assessing / improving your organization&#8217;s ability to be agile, you need to be addressing whatever is next.</p>
<h2>What&#8217;s Next?</h2>
<p>Let&#8217;s discard the &#8220;maturity model&#8221; notion and focus on &#8220;what&#8217;s next?&#8221; instead.  And that of course starts with &#8220;what&#8217;s first?&#8221;  Here&#8217;s how I&#8217;ve presented an agile <em>hierarchy of needs</em> to in the past:</p>
<ol>
<li><strong>Staffing the engineering team correctly</strong>.  People over process is the right emphasis.  If you can&#8217;t find people that are &#8220;good enough&#8221; you might as well go home.  Doesn&#8217;t matter how agile you are if you don&#8217;t have the horsepower.  You also need people who are excited to &#8220;do agile&#8221; &#8211; they like to communicate, they enjoy the project and team dynamics of an agile process.  You&#8217;re also better off with <a title="specializing generalists and agile politics" href="http://tynerblain.com/blog/2008/02/14/specializing-generalists/">specializing generalists</a> &#8211; ideally, every member of the team can do any work that is needed.  This is an efficiency play &#8211; you risk introducing bottlenecks when you have a specialist who is the &#8220;only one&#8221; who can do particular types of work &#8211; because you will <em>not</em> have a consistent mix of types of work from release to release.</li>
<li><strong>Assuring Quality is in your team&#8217;s DNA</strong>.  Arguably, this is part of <em>what&#8217;s first</em>, but there are a lot of teams that get cood at cranking out code, before they get good at cranking out <em>good</em> code.  <a title="continuous integration" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">Continuous integration</a> is the approach you <em>must</em> have.  Test-driven development, spec-driven development, and other testing-integration approaches are extremely important, but are really reflective of <a title="agile methodologies" href="http://tynerblain.com/blog/2007/03/09/agile-software-development-methods/">different </a><em><a title="agile methodologies" href="http://tynerblain.com/blog/2007/03/09/agile-software-development-methods/">flavors</a></em><a title="agile methodologies" href="http://tynerblain.com/blog/2007/03/09/agile-software-development-methods/"> of agile and quality,</a> not different degrees.</li>
<li><strong>Reducing overhead in the release process</strong>.  There&#8217;s a cost associated with releasing a product.  Once you get good at releasing, and are releasing good product, your next focus is on finding the right release cadence.  There are three factors that essentially dictate your release frequency.  The size of atomic deliverables (<a title="user stories" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">user stories</a> and <a title="use cases for agile" href="http://tynerblain.com/blog/2008/02/18/cockburn-loves-agile-use-cases/">use cases</a>, non-functional requirements, etc) your team is creating, the overhead (time and cost) of releasing, and your customer&#8217;s capacity to consume the releases.  My anecdotal experience is that teams are usually constrained initially by the cost of releasing &#8211; dedicated hours to creating a build, code freezes, etc.  Automating the build process (to reduce both costs and errors introduced while building) is first.  Integrating <a title="essential practices of CI" href="http://tynerblain.com/blog/2006/05/09/ten-essential-practices-of-continuous-integration/">automated build and automated test processes</a> together is next.</li>
<li><strong>Feeding the beast</strong>.  Once you have an engineering / delivery team that is operating efficiently, you run into the problem of making sure they have enough important work to do.  There&#8217;s pressure on product owners and  product managers to schedule something because it is easy to define, not because it is important.  It is also important that the team <a title="providing context as an agile product manager" href="http://tynerblain.com/blog/2008/10/01/agile-product-management-providing-context/">understand the context and importance of what they are doing</a>.  So you have to focus on making sure your product management team has enough capacity to keep the engineering team busy on delivering really valuable stuff.  The &#8220;right&#8221; solution to this depends on how the problem manifests in your organization. <a title="criticality of product management" href="http://tynerblain.com/blog/2006/05/19/product-managers-are-critical-to-success/"> Is your product manager spread too thin</a> across multiple products?  Too junior?  Too bogged down in sales support or trade show attendance or or or?</li>
<li><strong>Managing stakeholder expectations</strong>.  A big challenge in changing an organization to become agile is in <a title="stakeholder expectation management in agile" href="http://tynerblain.com/blog/2008/12/30/stakeholders-in-a-barrel/">resetting and managing the expectations of stakeholders</a>.  Execs are used to having an annual budget exercise where they dedicate X dollars in the pursuit of Y objectives.  We&#8217;ll set aside the reality that they&#8217;ll only achieve 1/3 of the objectives, at 2X the cost, much later than originally forecasted.  We aren&#8217;t looking at<a title="standish report data" href="http://tynerblain.com/blog/category/requirements/rm-software/"> the failings of waterfall</a>, we&#8217;re looking at the risks of agile.  There&#8217;s a ton of stuff here, from doing damage control to reverse perceptions that &#8220;people who want to do agile just don&#8217;t want to be accountable&#8221; or addressing the &#8220;we can&#8217;t tell you what X dollars gets you&#8221; message.  Again &#8211; the particular solution is a function of how the problem manifests in your organization.  Once your team is delivering valuable stuff efficiently, you have to make sure your management team is happy and engaged and knows what to expect.</li>
<li><strong>Continuously learning from your markets</strong>.  This is really what differentiates an agile <em>organization</em> from an organization with an agile development team.  Agile processes do enable you to develop code more efficiently.  If you aren&#8217;t taking advantage of the faster development, feedback loops, and ability to change that agile enables, you&#8217;re leaving money on the table.  And one of your competitors will pick it up.  There&#8217;s a whole community of MBAs that talk about <em>business agility</em> without once thinking about software development.  They&#8217;re talking about <a title="market driven competitive advantage" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">an organization&#8217;s capacity for rapid response to changing market conditions</a>.  It&#8217;s what separates the winners from everybody else.  And agile <em>development</em> makes business agility possible.  As long as your team is able to identify and <a title="market requirement valuation" href="http://tynerblain.com/blog/2006/11/02/market-requirement-valuation-example/">value</a> industry trends, competitive threats, and market opportunities.  When you&#8217;re good at this, you have an agile organization.  And <em>you </em>win.</li>
</ol>
<h2>Conclusion</h2>
<p>Any agile &#8220;maturity model&#8221;, irony aside, needs to be structured to help organizations progress through the stages of enlightened operations &#8211; continuously providing insights into &#8220;what&#8217;s next?&#8221; for those teams to grow.</p>
<p>I know there are many readers here with years of agile experience &#8211; how would you improve the list above, to better provide a framework for &#8220;what&#8217;s next?&#8221;  When that framework is solid, we can do some wordsmithing and repackage it as a maturity model.  Until then, just focus on &#8220;what&#8217;s next&#8221; &#8211; that&#8217;s all a maturity model should be used for anyway.</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+Maturity+Model+%E2%80%93+What%E2%80%99s+Next%3F+http%3A%2F%2Fbit.ly%2F17die2+" 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/06/30/agile-maturity-model/&amp;t=Agile+Maturity+Model+%E2%80%93+What%E2%80%99s+Next%3F" 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/06/30/agile-maturity-model/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Failure To Launch (Your Product)</title>
		<link>http://tynerblain.com/blog/2009/02/19/failure-to-launch/</link>
		<comments>http://tynerblain.com/blog/2009/02/19/failure-to-launch/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 22:21:37 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></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[Testing]]></category>
		<category><![CDATA[ishikawa]]></category>
		<category><![CDATA[launch]]></category>
		<category><![CDATA[product launch]]></category>
		<category><![CDATA[root cause analysis]]></category>
		<category><![CDATA[start-up]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=835</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F02%2F19%2Ffailure-to-launch%2F", "style": "big", "title": "Failure To Launch (Your Product)" }); Jump forward in time to the day of your next big product launch (first release, new features, new market segment, etc).  And your site/application crashes due to the &#8220;unexpected&#8221; demand.  All you can do now is look for a bucket of water 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%252F02%252F19%252Ffailure-to-launch%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Failure%20To%20Launch%20%28Your%20Product%29%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2009%2F02%2F19%2Ffailure-to-launch%2F", "style": "big", "title": "Failure To Launch (Your Product)" });</script></div>
<p><img class="alignnone" title="rocket launch failure" src="http://sehlhorst.smugmug.com/photos/476802889_vAUQs-L.jpg" alt="" width="250" height="186" /></p>
<p>Jump forward in time to the day of your next big product launch (first release, new features, new market segment, etc).  And your site/application crashes due to the &#8220;unexpected&#8221; demand.  All you can do now is look for a bucket of water to put out the fire.  What could you have done to prevent this disaster?  Jump back to today and start doing it!</p>
<h2><span id="more-835"></span>Backwards Planning</h2>
<p>Depending on how you look at things, this is a backwards planning exercise, or a variation of the  <em><a title="remember the future - innovation games book excerpt" href="http://800ceoread.com/excerpts/archives/006538.html">remember the future</a></em><a title="remember the future - innovation games book excerpt" href="http://800ceoread.com/excerpts/archives/006538.html"> innovation game</a>, or risk management, or proactive product management.  You can avoid a disaster by imagining what might happen, then hypothetically figuring out why it (would have) happened.  That leads to planning how you could prevent it.  And now you&#8217;ve left the dream world of a <a title="gedanken experiments" href="http://en.wikipedia.org/wiki/Thought_experiment">Gedanken experiment</a> and returned to the real world of product management.</p>
<h2>Problem Triage</h2>
<p>The way to approach this is straightforward.  Imagine some failure scenarios and the importance of preventing them:</p>
<p> </p>
<ol>
<li>Imagine a failure scenario.</li>
<li>&#8220;Predict&#8221; the likelihood of the failure.</li>
<li>&#8220;Estimate the impact of the failure.</li>
<li>Repeat for each scenario</li>
</ol>
<p>You can prioritize your failure scenarios by multiplying the likelihood of each with the impact of each, and sorting them from largest to smallest.  Then determine which ones you&#8217;re willing to address, and which ones you&#8217;re willing to risk.  You may not be able to predict the likelihood of some failures (at least until you do a root cause analysis).  Take each of these and put them directly above the scenario with the next highest impact.  The rationalle is that these are so bad, that you really want to find out how likely they are to happen.  Once you predict likelihood (see below) you can reprioritize.</p>
<h2>Root Cause Analysis</h2>
<p>For the failure scenarios you choose to address, the next step is to do a root cause analysis that identifies why it might have happened.  The best tool for capturing this analysis is an <a title="ishikawa diagrams" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">Ishikawa diagram</a>.  Consider that one problem you might face is your website crashing.</p>
<p><img class="alignnone" title="base problems ishikawa" src="http://sehlhorst.smugmug.com/photos/476855598_rsvGg-O.png" alt="" width="450" height="275" />[<a title="larger ishikawa diagram" href="http://sehlhorst.smugmug.com/photos/476855601_kAYeo-L.png">click for larger version</a>]</p>
<p>Essentially, you can crash your site by having too many users, too many concurrent users, or too many concurrent sign-ups.  Developing a cause-and-effect diagram (another name for an Ishikawa diagram) is usually an iterative and exploratory process.  You probably won&#8217;t create the simple version above first.  You may ask your implementation team &#8220;What can cause the website to crash?&#8221;  For each of their answers, you identify when that situation can happen.  Or you start top down.  Most likely, a mix of the two.  Your completed root cause analysis may look like the following:</p>
<p><img class="alignnone" title="complete failure analysis" src="http://sehlhorst.smugmug.com/photos/476855607_Vwh58-O.png" alt="" width="450" height="230" />[<a title="larger root cause analysis diagram" href="http://sehlhorst.smugmug.com/photos/476855612_J5jvk-L.png">click for larger version</a>]</p>
<p>At this point, your team can probably predict many (maybe all) of the root causes of a website crash.  The predictions may be conditional &#8211; &#8220;we can handle 10 concurrent users, but 20 probably kill us, and 100 definitely would.&#8221;  Developers are notoriously good at answering questions with conditional statements that reveal the nuances of their thinking.</p>
<p>Remember that you&#8217;re looking back from the future.  At product launch, what are you hoping for / reasonably expecting?  For this example, assume it is 10,000 total users, with 100 concurrent users (normally) and 500 concurrent signups.  You determine these numbers by working with your PR, marketing, or mar-com people (or wearing those hats, when it is all you).  Your plan is to do a big launch with a demo and a promo code for signup.  You know your audience will have internet connections, and will have twitter running at the time of your presentation.  You expect/dream of an immediate burst of signups, followed by tweets and word of mouth, and eventually blog articles causing additional growth over the next couple of weeks.</p>
<p>Use this data to feed back into the developer&#8217;s conditional responses.  If you&#8217;re like me, you will have found &#8220;absolute certainty of failure&#8221; from something.  And you may have even identified the thresholds for each element.  For example, database loading can handle 75 concurrent users, but with the current implementation, you only have enough database connections available to support 25 concurrent users.</p>
<p>Jumping back to the present, you now have some very discrete, and very important things to do before your launch.  If you need to, revisit the prioritized list of failure scenarios.  By looking at the next level of detail, have you found that the order of importance (to fix) has changed?  What about the &#8220;must fix&#8221; versus &#8220;willing to risk&#8221; line?  Has it moved?</p>
<p>Fold the &#8220;must fix&#8221; items into your backlog, and prioritize them relative to the other capabilities on your roadmap.  As a side note &#8211; make sure you&#8217;ve built in some testing to make sure you actually prevent the problems.  This might even be a great opportunity to implement &#8220;performance regression tests&#8221; &#8211; it is not enough to prevent bugs, you have to prevent slowdowns.</p>
<h2>Rethinking the Problem</h2>
<p>Without going into details on <em>how</em> the team will solve each problem, make sure that together you keep the Ishikawa diagrams in mind, and see how any proposed solutions might &#8220;reappear&#8221; on the diagram.  For example, rewriting your database connections to use asynchronous processes and a set of pooled connections may prevent a crash, but it may really hurt performance.  You may not have time to find an elegant solution.  So stop and rethink the problem.</p>
<p>At this point, you&#8217;ve said</p>
<ol>
<li>Given a marketing plan / launch strategy, we would crash the website.</li>
<li>We can make changes between now and the launch that will double the number of concurrent users we can support (or whatever), but that is not enough to support the launch strategy.</li>
<li>Solution: Change the launch strategy.</li>
</ol>
<p>Maybe you can&#8217;t support a wide-open promo-code based signup.  You should modify your launch so that it can only create as much demand as your product (including pending improvements) can support.  Maybe you limit it to the first 1,000 new users (probably more code to write to enforce the limit).  Maybe you launch with per-user invitations, where you can control the speed of propagation of invites (start with 100, when those have been sent, make another 100 available, etc).</p>
<h2>Entire Team Problem</h2>
<p>This is a problem that is solved collaboratively, by the entire team.  It is not just a &#8220;go write the code&#8221; problem.  What your product can support at a launch should drive how you choose to launch, just as how you choose to launch should drive what you want your product to support.  </p>
<p>You may have to delay a key capability in order to scale.  Does your marketing team know this?  Slightly less bad than crashing would be announcing a feature that is disabled.  Still need to announce the feature?  Pre-announce it: &#8220;Coming in a month&#8230;&#8221;</p>
<p>This stuff is important for every company and product, but it is especially critical for start-ups.  As a start-up, you have limited opportunities to grow, and a limited safety-net to catch you when you fail to capitalize on those opportunities.  So make sure everyone (not just the development team) is aligned to make the best use of each opportunity.</p>
<h2>Conclusion</h2>
<p>You have an opportunity to prevent problems.  All you have to do is imagine that they have happened in the future, figure out why they would have happened, then do what it takes (in software, or organizationally) to prevent 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+Failure+To+Launch+%28Your+Product%29+http%3A%2F%2Fbit.ly%2FetPdZv+" 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/19/failure-to-launch/&amp;t=Failure+To+Launch+%28Your+Product%29" 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/19/failure-to-launch/feed/</wfw:commentRss>
		<slash:comments>20</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>66</slash:comments>
		</item>
		<item>
		<title>Stakeholders in a Barrel</title>
		<link>http://tynerblain.com/blog/2008/12/30/stakeholders-in-a-barrel/</link>
		<comments>http://tynerblain.com/blog/2008/12/30/stakeholders-in-a-barrel/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 05:52:57 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[effective communication]]></category>
		<category><![CDATA[stakeholder expectations]]></category>
		<category><![CDATA[stakeholder goals]]></category>
		<category><![CDATA[stakeholders]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=788</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F12%2F30%2Fstakeholders-in-a-barrel%2F", "style": "big", "title": "Stakeholders in a Barrel" }); There&#8217;s really only one way to travel down a waterfall &#8211; in a barrel.  A lot of people died this way, but some survived.  Software projects have been predominantly waterfall projects since the start of software projects.  And stakeholders rode down those projects, basically [...]]]></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%252F2008%252F12%252F30%252Fstakeholders-in-a-barrel%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Stakeholders%20in%20a%20Barrel%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F12%2F30%2Fstakeholders-in-a-barrel%2F", "style": "big", "title": "Stakeholders in a Barrel" });</script></div>
<p><img class="alignnone" title="falling barrel" src="http://photos.smugmug.com/photos/445792956_mGKCY-L.gif" alt="" width="250" height="224" /></p>
<p>There&#8217;s really only one way to travel down a waterfall &#8211; in a barrel.  A lot of people died this way, but some survived.  Software projects have been predominantly waterfall projects since the start of software projects.  And stakeholders rode down those projects, basically in a barrel.  The people riding Niagara Falls 100 years ago didn&#8217;t know if they would survive until they got to the end.  Stakeholders in waterfall projects don&#8217;t know if they will succeed until the end.</p>
<p>An agile project is dependent upon tight interaction (and feedback) with stakeholders.</p>
<p>If you&#8217;re running an agile project, and your stakeholders are old-school barrel-riders, how do you make it work?</p>
<h2><span id="more-788"></span>Expectations, Documentation, and Communication</h2>
<p>The success of any project is dependent on setting and managing stakeholder expectations.  In <a title="managing stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/"><em>Managing Stakeholder Goals</em></a>, we talked about assuring that those goals are addressed by our requirements.  And in a later article, we proposed a way to <a title="balancing stakeholder goals" href="http://tynerblain.com/blog/2007/10/18/stakeholder-goals-2/">balance the goals of different stakeholder groups</a> when those goals are in opposition.  Those are good tools for making sure we are initially aligned with what we are hearing from stakeholders.</p>
<p>We need to also apply <a title="top ten active listening techniques" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">active listening techniques</a> to assure that what we thought we heard is what the stakeholders thought they said.  One way to do that is to write use cases (or user stories) so that we can <a title="communicating intent with stakeholders" href="http://tynerblain.com/blog/2006/07/14/communicating-intent-with-stakeholders/">communicate the intent of the product</a> back to the stakeholders.  This still primarily helps with kicking off a project, in the desired direction, with the correct goals.</p>
<p>There are many ways to document this <em>initial</em> intent of the project and stakeholder goals.  It is analogous to a stakeholder selecting a sturdy barrel and picking a good spot on the river bank to push off.  We&#8217;re well positioned to eventually succeed, assuming nothing changes.  After a harrowing fall, we find out how well we did.</p>
<p>A well-run waterfall project will provide status updates to the stakeholders along the way.  Imagine your stakeholder wearing one of those in-helmet headsets that NFL quarter backs use.  We publish <a title="effective status reports" href="http://tynerblain.com/blog/2008/09/03/effective-status-reports/">effective status reports</a> to let the stakeholder know what&#8217;s going on.  Like the falling barrel, however, a waterfall project has inertia.  The project, barring significant outside influence, will keep going in the direction it started.  Projects have change control boards to manage that change, but emotionally, I find that a formal change-approval process tends to inhibit change, rather than encourage it.  That barrel will keep falling.</p>
<p>Some project teams will try and do very heavyweight documentation to maximize the likelihood that the project will end up where it should.  The problem is, this heavyweight documentation only improves the chances that the project will end up <em>where we used to think it should go</em>.  It does not help us change the trajectory of the project as new insights are gained.  Just as <a title="responding to market changes for profit" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">responding to those changes provides a competitive advantage</a>, ignoring those changes exposes a competitive weakness.  Someone will come along and exploit your weakness if you don&#8217;t <a title="how fast is your market changing?" href="http://tynerblain.com/blog/2008/11/27/keeping-up-with-change/">respond to change</a>.</p>
<p>From these dynamics, we can conclude that &#8220;big up-front requirements&#8221;, while better than &#8220;no requirements,&#8221; are actually a waste of energy and time, relative to an ongoing adaptation to change.  That adaptation to change, however, should also be documented.  It needs to be documented for two reasons &#8211; to <em>manage</em> expectations of stakeholders, and to keep the implementation team focused on creating the most valuable capabilities in your product.  As you get smarter about what is valuable, you need to apply that knowledge and change the path of the project.</p>
<p>This is where communication becomes critical with stakeholders too.  Especially the old-school barrel-riders.  They are used to being in the barrel, maybe with an occasional &#8220;looking good &#8211; you&#8217;re still falling straight down&#8221; message along the way.  They are not used to hearing &#8220;we&#8217;ve decided that gliding over the rocks is more valuable than falling &#8211; please extend your wings now&#8221; messages.  The shocked &#8220;what wings?!&#8221; response is what they immediately think.</p>
<h2>Agile Expectations</h2>
<p>An agile project will avoid the big up-front requirements, and gather <em>just enough</em> requirements for right now.  What your stakeholder might hear is &#8220;agile is magic &#8211; we don&#8217;t need detailed requirements.&#8221;  The real message is &#8220;agile is better &#8211; we don&#8217;t need details about the requirements <em>yet</em>.  But we will need them <em>later</em>.&#8221;</p>
<p>A given team needs the same amount of specificity in requirements to achieve the same result, regardless of project approach.  One team I worked with would not set the tab-order in a form to go from top to bottom if you didn&#8217;t specify that.  It simply didn&#8217;t occur to them.  Another team was very effective with &#8220;gather the following data in a form&#8230;&#8221; &#8211; and they would layout the form, manage tab order, add reasonable field validation, assure proper markup and support for screen readers (for visually impaired users), and implement a <em>candidate</em> error-message/feedback design for users.  The first team would never succeed without details, the second team would view those details as wasted effort by me to write them, and by them to read them.</p>
<p>I think most of the initial creators, proponents, and early adopters of agile processes are members of the second camp.  They designed agile to not <em>require</em> detailed documents, but to allow it when needed &#8211; because they acknowledged that some people need the details.  They were reacting to heavyweight processes that were designed to work for &#8220;any team&#8221; at the cost of slowing down the best teams.  Kent Beck told me once that when people tell him about the importance of testing, his response is &#8220;so, lack of testing burned you before?&#8221;  When people stressed the importance of gathering requirements, his response was &#8220;you&#8217;ve been burned by a disconnect with stakeholders.&#8221;</p>
<p><strong>Enough</strong> is the operative word here.  You have to document enough.  You have to communicate enough.  You have to set expectations with your stakeholders that things will change.  And as those things change, you have to stay joined at the hip with your stakeholders to validate those changes.</p>
<p>While your team is responding to changes (based on feedback from stakeholders and the market and competition and implementation discoveries) with new plans, you have to feed that information back to the stakeholders.  It is a two-way communication.  And it needs to be a continual communication.</p>
<p>I joined a six month project once in the last month of the project.  Here&#8217;s a sanitized sequence of events describing what happened.</p>
<ol>
<li>Initial vision for the project was defined and requirements defined and tied to goals and value.</li>
<li>The estimates came back and said &#8220;no way it will happen before the business-imposed deadline.&#8221;</li>
<li>The team said &#8220;let&#8217;s be agile&#8221; and chose a component of the vision to do first.  That component could be completed by the deadline, and stakeholder expectations were set &#8211; (a) do this visible thing first, &#8220;meet&#8221; the deadline, and then (b) regroup, re-prioritize, and then do the next thing next.</li>
<li>The team started developing the solution, and worked for 5 months.  After 5 months, someone concluded &#8220;we won&#8217;t finish by the deadline.&#8221;  A couple weeks later, the estimate was that the team still had between 1/3 and 1/2 of the work remaining to complete the first component of the vision.</li>
<li>In presumably unrelated events, all but 2 of the internal stakeholders left the company.  Literally.</li>
<li>When the CIO and president of the company engaged the project team, they weren&#8217;t thinking &#8220;we have an over-run on the first component of our vision&#8221; &#8211; they were thinking &#8220;not only is it not done, but what you&#8217;re trying to do is not the right thing.&#8221;</li>
<li>Project was stopped one week after the original deadline for the first component (which was not completed).</li>
</ol>
<p>It may be that this was unavoidable, but one thing was clear &#8211; the &#8220;build the first thing first&#8221; expectation was not communicated effectively.  It didn&#8217;t help that the team did not track velocity, so it wasn&#8217;t until the end of the project when the &#8220;you&#8217;re going to hit the rocks&#8221; message was first heard by the stakeholder in the barrel.  Way too late to affect change.  For this and other reasons, I contend that the project was not agile.  It was a Chevrolet with a Ferrari sticker on it.</p>
<p>We can ignore the labeling of the process and focus on the lack of <em>ongoing</em> expectation management as the ultimate doom of the project.</p>
<h2>Evolving Expectations</h2>
<p>Patrick Masi had a couple great comments on our <a title="simple agile model" href="http://tynerblain.com/blog/2008/12/03/simple-agile-model-example/"><em>Simple Agile Model</em></a> article.  Patrick pointed out a problem with simple documentation artifacts like this.  The early &#8220;here&#8217;s all we need right now&#8221; artifacts were insufficient to capture the full extent of what the stakeholders needed.  I&#8217;m not sure exactly where things broke down, but Patrick implied that the ongoing clarification with stakeholders was not happening.</p>
<p>This is a completely different manifestation, I suspect, of the exact same problem described above.  Thinking about Patrick&#8217;s comments is what got me heading down the whole &#8220;barrel rider&#8221; path in the first place.</p>
<p>I don&#8217;t believe I&#8217;ve worked with any stakeholders who would say &#8220;yes, ignore what we learned this year &#8211; it is more important to build last year&#8217;s product.&#8221;  I&#8217;ve definitely worked with stakeholders who did not have time to commit to the support of an agile project.  The ironic thing about agile projects is that they may do more requirements work through the course of the project than non-agile projects.  An agile project will respond to change.  That means some work is re-done.  It also means that some valueless work is avoided.  You can&#8217;t categorically say which influence is larger.</p>
<p>One possible source of the pain Patrick&#8217;s team felt is mis-set expectations of what is being delivered when.  Imagine developing a checkout-process for an eCommerce website.  The complete checkout process is too large for a single sprint, so you break it down into valuable atomic deliverables for each sprint:</p>
<ol>
<li>Registered customers can buy any products, using previously saved billing / shipping info.</li>
<li>Individual product and &#8220;per order&#8221; discounting works and customers can use gift cards to pay for all or part of the order.</li>
<li>Anonymous customers can place orders (without accounts) and registered customers can modify billing and shipping information.</li>
<li>Orders can be placed as gifts (with gift receipts and wrapping services), and online call-center reps can interact with customers real-time to help with the process.</li>
</ol>
<p>This is a nuanced message &#8211; basic checkout in sprint 1, with increasing capabilities in each sprint, until &#8220;complete checkout&#8221; is done in sprint 4.  That is a reasonable plan, but requires a more detailed conversation with stakeholders so that they know what is coming and when.  You don&#8217;t want someone freaking out after the 3rd sprint when they can&#8217;t place gift orders.</p>
<p>Another possibility is that the elicitation process before the third sprint (re-visiting checkout <em>again</em> with the same stakeholder) did not tease out that anonymous users must provide an email address (for order confirmation email, and to secretly create a &#8220;shadow account&#8221; for that customer).  All of those details need to be gathered, and it can be harder to spread out the conversation over multiple sprints than it is to have it all up front.  This is just incomplete discovery, but with delayed (and recurring) impacts.</p>
<p>In <a title="user stories applied" href="http://www.amazon.com/exec/obidos/ASIN/0321205685/tbrb-20"><em>User Stories Applied</em></a>, Mike Cohn stresses that the brevity of user stories is intentionally designed to facilitate (and I would add &#8220;dependent upon&#8221;) 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 &#8211; it requires conversation to fill in the details.  I&#8217;ve had some success using the &#8220;Verify that&#8230;&#8221; user acceptance tests as the method of documenting those details (depth), in conjunction with the brief, easily consumable stories.</p>
<p>You can write the stories quickly to decompose and schedule across sprints (revisiting the schedule as things change), and then write the <em>verify</em> statements as UAT for each sprint as it occurs.</p>
<p>Another benefit of the UAT is that it is explicit and cuts through the walls of the barrel for a stakeholder who &#8220;doesn&#8217;t get agile&#8221; as Patrick puts it.  &#8220;Here&#8217;s our lightweight multi-sprint plan &#8211; now lets define the specific acceptance criteria you need&#8221; is a pretty effective conversation.</p>
<h2>Conclusion</h2>
<p>You have to stay closely connected to your stakeholders &#8211; not just for messaging, managing, and changing the big-picture direction of the project, but also to drill down into the details at the last practical moment.</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+Stakeholders+in+a+Barrel+http%3A%2F%2Fbit.ly%2FdWsjGe+" 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/2008/12/30/stakeholders-in-a-barrel/&amp;t=Stakeholders+in+a+Barrel" 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/2008/12/30/stakeholders-in-a-barrel/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>ProductCamp Austin Winter 2009</title>
		<link>http://tynerblain.com/blog/2008/12/11/productcamp-austin-winter-2009/</link>
		<comments>http://tynerblain.com/blog/2008/12/11/productcamp-austin-winter-2009/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 06:11:06 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[balsamiq]]></category>
		<category><![CDATA[otherinbox]]></category>
		<category><![CDATA[pcamp austin]]></category>
		<category><![CDATA[productcamp austin]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=781</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F12%2F11%2Fproductcamp-austin-winter-2009%2F", "style": "big", "title": "ProductCamp Austin Winter 2009" }); The second productcamp for Austin is just around the corner!  Are you going to be there?  You should. Announcement Paul Young has written a great announcement and explanation of what product camp is.  I really enjoyed and benefited from the one we did last [...]]]></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%252F2008%252F12%252F11%252Fproductcamp-austin-winter-2009%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22ProductCamp%20Austin%20Winter%202009%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F12%2F11%2Fproductcamp-austin-winter-2009%2F", "style": "big", "title": "ProductCamp Austin Winter 2009" });</script></div>
<p><img class="alignnone" title="productcamp austin winter 2009 logo" src="http://photos.smugmug.com/photos/434490818_xcHs9-L.gif" alt="" width="234" height="60" /></p>
<p>The second productcamp for Austin is just around the corner!  Are you going to be there?  You should.</p>
<p><span id="more-781"></span></p>
<h2>Announcement</h2>
<p>Paul Young has written a <a title="productcamp austin" href="http://www.productbeautiful.com/2008/12/10/productcamp-austin-winter-2009/">great announcement and explanation</a> of what product camp is.  I really enjoyed and benefited from the one we did last spring, and I can&#8217;t wait to attend and present at this one!  If you are or can be in the Austin area on Jan 24th, make sure you head to the <a title="map to productcamp austin" href="http://www.eventbrite.com/googlemap?eid=217426328">UT Austin College of Communications CMB building, studios 4B through 4E</a> from 8 to 5:30.  And the networking afterwords is sure to be even better than last year too.</p>
<h2>Presentation Topics</h2>
<p>A key takeaway from our first productcamp was that people most enjoyed the presentations that were more collaborative.  These sessions tended to give attendees the ability to immediately put to use some really good ideas.  I&#8217;ll wager that we&#8217;ll have a mix of presentation styles again this year, but that it will skew to the interactive and practical.  The roundtables were also very well received, and I hope we&#8217;ll have more of those too.</p>
<p>I&#8217;m really looking forward to presenting again, and would love suggestions from you about topics you think would be valuable.  I guess this is pre-collaboration :).  At the moment, I&#8217;m leaning towards a presentation around using wireframes to rapid-prototype ideas in support of an agile development team. I&#8217;m currently doing this with the developers and stakeholders at <a title="OtherInbox" href="http://blog.otherinbox.com/">OtherInbox</a>, an Austin start-up that was one of this year&#8217;s <a title="otherinbox techcrunch 50 pitch" href="http://www.techcrunch50.com/2008/conference/presenter.php?presenter=60">TechCrunch 50</a>, doing some awesome stuff to eliminate email overload.</p>
<p>So far, this is proving to be an effective way to rapidly evolve ideas and minimize the overhead of communication &#8211; and we&#8217;re doing it with a distributed team.  We&#8217;ve been using a combination of <a title="balsamiq wireframing tool" href="http://www.balsamiq.com/products/mockups">balsamiq mockups</a> and google docs.  By the time product camp rolls around, we&#8217;ll have many sprints worth of experience under our belts, and I should be able to provide a mix of how-to&#8217;s and lessons learned.</p>
<p>Add a comment below if you have another idea, or if you have any feedback on this one.</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+ProductCamp+Austin+Winter+2009+http%3A%2F%2Fbit.ly%2FgjvdOc+" 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/2008/12/11/productcamp-austin-winter-2009/&amp;t=ProductCamp+Austin+Winter+2009" 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/2008/12/11/productcamp-austin-winter-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

