<?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; Requirements Models</title>
	<atom:link href="http://tynerblain.com/blog/category/requirements/requirements-models/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Wed, 17 Mar 2010 04:31:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Measuring Great Design &#8211; Mad Libs Input Form</title>
		<link>http://tynerblain.com/blog/2010/03/01/measuring-interaction-design/</link>
		<comments>http://tynerblain.com/blog/2010/03/01/measuring-interaction-design/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 05:20:02 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[measuring ux]]></category>
		<category><![CDATA[return on investment]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1174</guid>
		<description><![CDATA[
I came across a really interesting article LukeW.com, showing how making changes to the way an input form on a website increased interaction by 25 to 40%.  The changes reflect the value of thinking outside-in, investing in user experience, and performance measurement.
Bonus: the idea is cool.

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

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1168</guid>
		<description><![CDATA[
You give your requirements to the engineering team, and they look complete.  The team builds your product, you launch it and the market soundly rejects it.  Why?  Because your requirements weren&#8217;t complete &#8211; they didn&#8217;t actually solve the problem that needed to be solved.

Complete Requirements &#8211; Revisiting
Going back almost four years, I wrote Writing Complete [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="big ten rules of requirements logo" src="http://sehlhorst.smugmug.com/photos/128628589-M.png" alt="big ten rules of writing requirements logo #5" width="250" height="250" /></p>
<p>You give your requirements to the engineering team, and they <em>look</em> complete.  The team builds your product, you launch it and the market soundly rejects it.  Why?  Because your requirements weren&#8217;t <em>complete</em> &#8211; they didn&#8217;t actually solve the problem that needed to be solved.</p>
<p><span id="more-1168"></span></p>
<h2>Complete Requirements &#8211; Revisiting</h2>
<p>Going back almost four years, I wrote <em><a title="writing complete requirements" href="http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/">Writing Complete Requirements</a></em>, as part of the <em><a title="The rules of writing requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">Big Rules of Writing Requirements</a></em> series.  That article centered on two key ideas of requirements completeness.</p>
<ul>
<li>Data, not opinion, is the most important input into determining completeness.</li>
<li>There is no <em>absolute </em>way to determine the completeness of your requirements in advance.</li>
</ul>
<p>Completeness is best measured by market acceptance, so technically you can&#8217;t know if your requirements were complete until your customers buy (or fail to buy) your product.  This doesn&#8217;t mean you should give up on this <em>rule</em> of requirements &#8211; you can still focus on, and improve, the completeness of your requirements.</p>
<h2>Objective and Heuristic Assessment</h2>
<p><img class="alignnone" title="raven" src="http://sehlhorst.smugmug.com/Other/blog/raven/795282939_wKV8c-O.jpg" alt="picture of raven with a blue eye" width="250" height="250" /></p>
<p>Given a market problem and the associated requirements (which you can argue are actually the same thing), you can review those requirements to determine if they objectively <em>appear to be</em> complete.  This assessment is based on what you objectively know about your market (needs, opportunity costs, competitive alternatives, etc).  You can also apply heuristic, or logical analysis to identify <em>gaps</em> in the language of your requirements.</p>
<p><strong>Objective assessment</strong> is the application of market knowledge (data) to determine if the nature of the problem is being addressed completely by your requirements.  A bird-feeding maven would know that the requirements for your bird feeder would be incomplete if they didn&#8217;t address the problem of squirrels stealing food from the birds.</p>
<p><strong>Heuristic analysis </strong>is the identifications of logical omissions in your requirements, without the need to apply market insights.  A logician would know that the requirements for your bird feeder were incomplete if they didn&#8217;t address the need to refill an empty feeder.</p>
<p>When you&#8217;re writing requirements, you need to do both.  Heuristic analysis of your requirements will identify where your requirements do not fully solve the problems you already know about &#8211; an eCommerce checkout process without the ability to receive payment, for example.  Objective assessment will help you identify the problems that you overlooked but need to solve &#8211; the need to allow customers to have different billing and shipping addresses when placing an order online, for example.</p>
<p><strong>Complete Requirements for Incomplete Solutions</strong></p>
<p><img class="alignnone" title="gummy worms" src="http://sehlhorst.smugmug.com/photos/415923338_gzWKd-L.jpg" alt="image of worms on the table - illustrating a metaphor" width="250" height="187" /></p>
<p>Don&#8217;t confuse having complete <em>requirements</em> (a good thing) with completely solving a problem (not always a good thing).  In agile development, the idea of <a title="satisficing with sprints" href="http://tynerblain.com/blog/2008/11/12/satisficing-sprints/">satisficing is key to scoping individual iterations</a>.  The idea, simply put, is to solve <em>enough of the problem</em>, and not delay delivery (and value) until you can build a solution to the entire problem.  Because of the law of diminishing returns, for many market problems, there is little or no incremental value in solving the entire problem.  Those resources can be better applied to solving additional problems.</p>
<p><a title="kano analysis webinar" href="http://tynerblain.com/blog/2009/09/28/kano-analysis-for-product-managers/">Kano analysis</a> provides a framework for identifying which market problems <em>must be</em> completely solved, and which ones have a <em>more is better</em> characteristic.  In practice, <em>more is better</em> problems exhibit the law of diminishing returns, and should not be &#8220;completely&#8221; solved.</p>
<p><img class="alignnone" title="kano analysis - more is better" src="http://sehlhorst.smugmug.com/Other/blog/more-is-bettersmall/795296523_Y2haG-O.png" alt="diminishing returns nature of real world features" width="450" height="336" /> [<a title="kano analysis - more is better" href="http://sehlhorst.smugmug.com/Other/blog/more-is-betterbig/795296527_3Y9YM-O.png">larger image</a>, or view the entire <a title="Kano Analysis for Product Managers" href="http://tynerblain.com/blog/2009/09/28/kano-analysis-for-product-managers/">Kano analysis presentation</a>]</p>
<h2>Conclusion</h2>
<p>Complete Requirements are requirements that</p>
<ul>
<li>Identify all of the market problems that need to be solved and their nature (absolute vs. diminishing returns).</li>
<li>Are logically complete in their coverage / articulation of those market needs.</li>
</ul>
<p>To objectively improve the completeness of your requirements, apply market data in an assessment of your requirements.  To heuristically improve the completeness of your requirements, look for logical inconsistencies and gaps in reasoning or coverage.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Complete+Requirements+http://bit.ly/cgxzsL+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/02/23/complete-requirements/&amp;t=Complete+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/02/23/complete-requirements/feed/</wfw:commentRss>
		<slash:comments>2</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[
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 the articles here.  I joke that they are long because I don&#8217;t have time [...]]]></description>
			<content:encoded><![CDATA[<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>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Most+Engaging+Articles+of+2009+http://bit.ly/6vlxog+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/01/05/most-engaging-articles-of-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Attainable Requirements</title>
		<link>http://tynerblain.com/blog/2009/11/30/attainable-requirements/</link>
		<comments>http://tynerblain.com/blog/2009/11/30/attainable-requirements/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 20:03:18 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Ishikawa Diagram]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[attainable requirements]]></category>
		<category><![CDATA[rules of requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1138</guid>
		<description><![CDATA[
Unless you live in a world filled with unicorns and rainbows, writing realistic requirements is critical.  When you set unattainable goals, the best result you can hope for is a frustrated engineering team.  Write requirements that are attainable, and your team will surprise you with what they can achieve.
Attainable Requirements &#8211; Revisiting
A little over three [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="attainable requirements logo" src="http://sehlhorst.smugmug.com/photos/128628575-M.png" alt="" width="250" height="250" /></p>
<p>Unless you live in a world filled with unicorns and rainbows, writing realistic requirements is critical.  When you set unattainable goals, the best result you can hope for is a frustrated engineering team.  Write requirements that are attainable, and your team will surprise you with what they can achieve.</p>
<h2><span id="more-1138"></span>Attainable Requirements &#8211; Revisiting</h2>
<p>A little over three years ago (ten unicorn years), I wrote <em><a title="writing attainable requirements" href="http://tynerblain.com/blog/2006/06/07/writing-attainable-requirements/">Writing Attainable Requirements</a></em>, as part of the <em><a title="The rules of writing requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">Big Rules of Writing Requirements</a></em> series.  In that article, we focused on the unique situations that every team faces &#8211; politics and people, and the shared challenge of implicit practicality.  Those factors are as important today as they were then.</p>
<p><img class="alignnone" title="no unicorns" src="http://sehlhorst.smugmug.com/Other/blog/Wappenatlechaschau/727825581_cEP5G-O.png" alt="" width="166" height="192" /></p>
<h2>Defining <em>Attainable</em></h2>
<p>Attainability, for requirements, is simply the answer to the question &#8211; <em>can this be reasonably done</em>?  Most, but not all, of the answer to that question comes from understanding if your team can build and test a solution to the problem you identify with your requirement.  Being able to create a solution requires that the problem you&#8217;re solving is tractable, and that the team creating the solution has the skills to solve it.</p>
<p>Being able articulate a problem and it&#8217;s solution is necessary, but insufficient &#8211; solving the problem requires that there be a feasible solution.</p>
<p>As the founders of the agile development movement explained in their pitch for &#8220;low overhead&#8221; process &#8211; <em>people trump process</em>.  I think it was Alistair Cockburn who added, &#8220;but politics trumps people.&#8221;</p>
<p>Finally, process is the often-overlooked element of determining attainability.  Realizing the benefits of a novel solution to an existing problem usually involves process changes &#8211; sometimes significant ones.</p>
<p>The next few sections go into more detail on each of these &#8211; <strong>tractability, feasibility, people, and process</strong>.</p>
<h2>Tractability</h2>
<p><img class="alignnone" title="large black bear" src="http://sehlhorst.smugmug.com/Other/blog/Blackbearlarge-small/727836946_MFCx8-O.jpg" alt="" width="157" height="250" /></p>
<p>Goldilocks ruled out the <em>large</em> bed because it was <em>too</em> large.  <em>Eating the elephant, drinking from the fire-hose, boiling the ocean</em> &#8211; these are all common phrases in the American vernacular, because so many people try to do <em>too much </em>(at one time).  There are many ways to decompose a large, intractable problem into smaller, addressable components.  <span style="background-color: #ffffff; ">Practicality requires that the problem you&#8217;re trying to solve is not <em>too</em> large.</span></p>
<p>If everything you do is <em>small</em>, however, you won&#8217;t ever accomplish anything <em>big</em>.  That&#8217;s where<a title="strategic thinking" href="http://www.strategicproductmanager.com/2009/11/26/strategic-thinker/"> strategic product management</a> shines.  As part of understanding your market, you identify large, valuable problems to be solved.  To solve those large problems, you have to break them up into smaller problems, and then address them individually.  You also have to make sure your team understands the big picture and the larger problem that ultimately needs to be solved.  A great way to share context while decomposing problems is with the use of <a title="Ishikawa diagrams for problem decomposition" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">Ishikawa diagrams</a>.</p>
<p><img class="alignnone" title="simple ishikawa diagram" src="http://sehlhorst.smugmug.com/photos/302635390_W2GiV-O.jpg" alt="" width="450" height="269" /></p>
<p>And zooming in&#8230;</p>
<p><img class="alignnone" title="branch of an ishikawa diagram" src="http://sehlhorst.smugmug.com/photos/302640001_zmjrk-L.jpg" alt="" width="350" height="175" /></p>
<p>Maintaining <a title="providing context to agile teams" href="http://tynerblain.com/blog/2008/10/01/agile-product-management-providing-context/">context is a particularly critical component of working with agile teams</a>, where each deliverable&#8217;s possible size is constrained further to what a team can accomplish in an iteration.</p>
<blockquote><p><a href="http://photos.smugmug.com/photos/384746454_ASdyM-L.gif"><img title="market ishikawa" src="http://photos.smugmug.com/photos/384746439_MCSvi-L.gif" alt="" /></a>[<a title="market driven ishikawa" href="http://photos.smugmug.com/photos/384746454_ASdyM-L.gif">click for larger version</a>]</p>
<p>For some problems (and some teams!) this may be enough information to provide the context to develop a product backlog.  And your agile team will move forward into managing their own execution from the product backlog stage.  For larger or more complex problems (such as this example), you will need more detailed communication before diving into user stories / use cases.</p>
<p>The same Ishikawa diagram, with more detail, looks like the following:</p>
<p><a href="http://photos.smugmug.com/photos/384746511_Un8EL-L.gif"><img title="detailed market driven ishikawa" src="http://photos.smugmug.com/photos/384746482_NFmAJ-L.gif" alt="" /></a>[<a title="detailed market driven ishikawa" href="http://photos.smugmug.com/photos/384746511_Un8EL-L.gif">click for larger version</a>]</p>
<p><cite><a title="agile product management - providing context to teams" href="http://tynerblain.com/blog/2008/10/01/agile-product-management-providing-context/">Agile Product Management: Providing Context</a></cite></p></blockquote>
<p>This reduced granularity represents the smallest go-to-market <em>atomic</em> requirement.  Further decomposition results in smaller requirements, but they become too small, because they are no longer independently valuable.  I&#8217;m not talking about &#8220;the sum of the whole is greater than the sum of the parts&#8221; stuff here &#8211; I&#8217;m talking about &#8220;if you <em>only</em> get X, without Y and Z, it has no value&#8221; stuff.</p>
<h2>Feasibility</h2>
<p>Even after decomposing market problems into addressable chunks, you still have to make sure that there are feasible solutions.  One of the brighter software developers I worked with <em>back in the day</em> used to say &#8220;We&#8217;re writing software &#8211; it&#8217;s all ones and zeros &#8211; we <em>can do </em>anything.&#8221;  He also followed that up with &#8220;&#8230;but <em>should</em> we be doing <em>that</em>?&#8221;  The team I was working with at the time probably could do just about anything.  But not everything can be done with a given budget and a specific deadline.  Some things are simply infeasible.</p>
<p>Scrum teams measure <em>velocity</em> &#8211; a reflection of how much software they deliver in a given iteration, as a function of how much work they believe is involved in delivering.  This is a great &#8220;protected&#8221; measure of efficiency.  The team is protected from requests to do work that has little or no value &#8211; by measuring throughput in terms of effort, a team can get more efficient at doing more.  A requirement is infeasible, and therefore unattainable, when it exceeds what the team can accomplish given a fixed amount of capacity.  Project managers refer to this as the <em>Iron Triangle</em> &#8211; given scope, cost, and quality, pick any two as inputs and the third will be a variable output (absorbing the impact of uncertainty that arises during the development process).  I prefer to use <a title="scheduling software delivery with timeboxes" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">timeboxes </a>rather than that rusty old triangle, to emphasize my perspective that quality is inherent in delivery, and should not be a &#8220;variable output of uncertainty.&#8221;  Because quality is what usually bears the brunt of uncertainty.</p>
<p><img class="alignnone" title="fixed capacity" src="http://sehlhorst.smugmug.com/photos/64224627-M.png" alt="" width="223" height="128" /> plus <img class="alignnone" title="quality is inherent in delivery" src="http://sehlhorst.smugmug.com/photos/64224642-M.png" alt="" width="79" height="153" /> yields <img class="alignnone" title="filling a timebox with quality and capability" src="http://sehlhorst.smugmug.com/photos/64224630-M.png" alt="" width="223" height="154" /></p>
<p><span style="background-color: #ffffff; ">When the solution to a defined problem is prohibitively expensive, it is not attainable.  The notion of <a title="include both cost and value when prioritizing" href="http://tynerblain.com/blog/2007/07/31/prioritization-and-value-maximization/">cost should also be considered in the context of value</a>.  Requirements with higher value can justify implementing solutions with higher costs.</span></p>
<p>Prohibitively expensive solutions make requirements unattainable.  Relatively expensive (relative to their value) solutions also reflect unattainable requirements.  You need to collaborate with your implementation team to understand the costs associated with any particular requirement to know if it is attainable.  This is one of the strongest arguments against <em>throw-it-over-the-wall</em> interactions between product managers and implementation teams.  Without that feedback about feasibility and cost of a solution, you can&#8217;t assure that the requirements you are proposing are attainable.</p>
<p>Regular readers of Tyner Blain will realize that this is just an alternate way of stressing the<a title="prioritization and the ROI of requirements" href="http://tynerblain.com/blog/2007/02/07/prioritization-with-roi-and-utility/"> importance of considering ROI when defining requirements</a>.</p>
<h2>Politics</h2>
<p>There are political realities that every organization faces.  It could be a <em>benevolent dictator</em> CEO, or an executive with an agenda or pet project.  It may simply be that there is value in the problems you&#8217;ve identified, but solving them is not aligned with your corporate strategy.  You may be focusing on dominating an existing market, where expansion into new markets is the company&#8217;s focus &#8211; or vice versa.  You may be focusing on top-line growth opportunities, while the company is fixated on cost-reduction in a time of economic contraction.</p>
<p>Each of these scenarios causes you to be fighting an uphill battle internally.  When that hill is too steep, you&#8217;re writing unattainable requirements.</p>
<h2>Process</h2>
<p>When deciding what to build, you also have to think about how you launch.  Launching, as <a title="dave daniels launch clinic" href="http://pragmaticmarketing.typepad.com/launchclinic/">Dave Daniels regularly points out on his Launch Clinic blog</a>, is not just putting your product up on your website for sale.  You have to think organizationally about all of the other moving parts:</p>
<ul>
<li><span style="background-color: #ffffff;">Do your customers have the ability to absorb an update to your software?</span></li>
<li><span style="background-color: #ffffff;">Can your customer service reps be trained in time to promote and support the new capabilities?</span></li>
<li><span style="background-color: #ffffff;">Will your sales team be able to communicate a message that helps them close deals based on what you&#8217;ve just built?</span></li>
</ul>
<p>Process is more than just the process of typing, compiling, and testing code.  Process includes everything needed to successfully go to market and sustain your product.  If you&#8217;re defining requirements that are too far ahead of your market they are not attainable.  If your requirements embody process changes that are too difficult or expensive for your customers or your organization to absorb, your requirements are not attainable.</p>
<h2>Conclusion</h2>
<p>Attainable requirements are requirements that</p>
<ul>
<li><span style="background-color: #ffffff; ">Have a reasonable cost to implement,</span></li>
<li><span style="background-color: #ffffff; ">Are aligned with your company&#8217;s strategy and stakeholder&#8217;s agendas, and</span></li>
<li><span style="background-color: #ffffff; ">Result in solutions that can be consumed by your company and your customers.</span></li>
</ul>
<p>Make sure you&#8217;re writing <em>attainable</em> requirements.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Attainable+Requirements+http://bit.ly/8RT4vE+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/30/attainable-requirements/&amp;t=Attainable+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/11/30/attainable-requirements/feed/</wfw:commentRss>
		<slash:comments>4</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[
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 &#8220;do the right thing&#8221; even though it is not your [...]]]></description>
			<content:encoded><![CDATA[<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>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Design-Free+Requirements+http://bit.ly/3BuFst+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/11/03/design-free-requirements/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Kano Analysis for Product Managers</title>
		<link>http://tynerblain.com/blog/2009/09/28/kano-analysis-for-product-managers/</link>
		<comments>http://tynerblain.com/blog/2009/09/28/kano-analysis-for-product-managers/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 02:32:01 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Kano Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[kano]]></category>
		<category><![CDATA[Kano analysis]]></category>
		<category><![CDATA[kano analysis webinar]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1070</guid>
		<description><![CDATA[
Kano Analysis, while initially created to understand customer satisfaction with features, can be used by product managers to better understand customer problems.  I gave a presentation last week for the Product Management View webinar series on Kano Analysis for product managers.
Kano Analysis &#8211; The Webinar
You can watch (flash) or listen to (mp3) the webinar (just [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="ballbarrow" src="http://sehlhorst.smugmug.com/photos/664407742_XakMo-O.jpg" alt="" width="203" height="152" /></p>
<p>Kano Analysis, while initially created to understand customer satisfaction with <em>features</em>, can be used by product managers to better understand customer <em>problems</em>.  I gave a presentation last week for the Product Management View webinar series on Kano Analysis for product managers.</p>
<h2><span id="more-1070"></span>Kano Analysis &#8211; The Webinar</h2>
<p>You can watch (flash) or listen to (mp3) the webinar (just under an hour) at the Product Management View webinar page for the <a title="Kano Analysis webinar" href="http://grandview.rymatech.com/pmv/webinars/2009/09/kano-analysis.php">Kano Analysis presentation</a>.  I delivered the webinar on Sep 23rd, 2009.  Thanks <a title="Val on Twitter" href="http://twitter.com/valworkman">Val Workman</a> for inviting me to join the group and share an hour with a bunch of great folks.  Also, thanks to the people who asked questions, tweeted, and commented on the presentation.  I really appreciate it.</p>
<h2>Kano Analysis &#8211; The Slides</h2>
<p>If you want to flip through the slides to get a feel for the treatment I gave to Kano Analysis before committing an hour to the webinar, you can do so right here (or view the <a title="Kano Analysis for Product Managers" href="http://www.slideshare.net/ssehlhorst/kano-analysis20090923">Kano Analysis slides on slideshare.net</a>).</p>
<div id="__ss_2085782" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Kano Analysis.20090923" href="http://www.slideshare.net/ssehlhorst/kano-analysis20090923">Kano Analysis.20090923</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=kanoanalysis-20090923-090928212334-phpapp02&amp;stripped_title=kano-analysis20090923" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=kanoanalysis-20090923-090928212334-phpapp02&amp;stripped_title=kano-analysis20090923" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/ssehlhorst">Scott Sehlhorst</a>.</div>
</div>
<p>Thanks again to everyone, and if you have any feedback, include it below or on the PMV site.  Several links to other articles about Kano Analysis are in the comments on the PMV page, if you want to do further research.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Kano+Analysis+for+Product+Managers+http://bit.ly/bLxee+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/09/28/kano-analysis-for-product-managers/&amp;t=Kano+Analysis+for+Product+Managers" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/09/28/kano-analysis-for-product-managers/feed/</wfw:commentRss>
		<slash:comments>0</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[
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 solved.

Concise Requirements &#8211; Revisiting

In the three years since we last looked at [...]]]></description>
			<content:encoded><![CDATA[<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>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Concise+Requirements+http://bit.ly/pZRj8+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/08/03/concise-requirements/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Valuable Requirements</title>
		<link>http://tynerblain.com/blog/2009/07/29/valuable-requirements/</link>
		<comments>http://tynerblain.com/blog/2009/07/29/valuable-requirements/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 04:54:34 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Ishikawa Diagram]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[valuable requirements]]></category>
		<category><![CDATA[writing valuable requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1002</guid>
		<description><![CDATA[
Writing valuable requirements is important.  It doesn&#8217;t matter how well your teams execute if they are off building the wrong products / capabilities / features.  The right products and capabilities are the ones that have relevant value.

Valuable requirements solve problems in your market.
Valuable requirements support your business strategy.
Valuable requirements solve problems for your users.
Valuable requirements [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="the first rule of writing requirements logo" src="http://sehlhorst.smugmug.com/photos/128628528-M.png" alt="" width="250" height="250" /></p>
<p>Writing <em>valuable</em> requirements is important.  It doesn&#8217;t matter how well your teams execute if they are off building the wrong products / capabilities / features.  The right products and capabilities are the ones that have <em>relevant</em> value.</p>
<ul>
<li>Valuable requirements solve problems in your market.</li>
<li>Valuable requirements support your business strategy.</li>
<li>Valuable requirements solve problems for your users.</li>
<li>Valuable requirements meet your buyers&#8217; criteria.</li>
<li>Valuable requirements don&#8217;t <em>over-solve</em> the problems.</li>
</ul>
<h2><span id="more-1002"></span>Valuable Requirements &#8211; Revisiting</h2>
<p><img class="alignnone" title="Puppy Scout" src="http://sehlhorst.smugmug.com/photos/578544627_BfDyP-L.jpg" alt="" width="187" height="250" /><img class="alignnone" title="scout as adult" src="http://sehlhorst.smugmug.com/photos/604778004_HJ8FF-L.jpg" alt="" width="170" height="250" /></p>
<p>A little over three years ago, I compiled the <em><a title="Ten Rules of Writing Requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">Big Ten Rules of Writing Good Requirements</a></em>, which ended up with an even dozen &#8220;rules.&#8221;  The first rule was <a title="writing valuable requirements" href="http://tynerblain.com/blog/2006/05/30/writing-valuable-requirements/">writing valuable requirements</a>.  Three years is a long time.  <em>Our</em> environment has changed.  Many great insights have come into our neck of the software development woods from many inspired voices.  I&#8217;ve personally learned a lot.  My focus has changed from being more focused on product specification (back then) to being more engaged in business strategy (today).  Our audience here has grown ~ 10x since the original rules were published.  My dog has tripled in size.  Perhaps my writing has even improved.</p>
<p>Given that, it makes sense to revisit the topic now.</p>
<h2>Valuable Requirements Solve Problems in your Market</h2>
<p>I struggled a little about starting with &#8220;strategy&#8221; or starting with &#8220;the market.&#8221;  Pragmatic Marketing&#8217;s Framework (<a title="pragmatic marketing grid video" href="http://www.pragmaticmarketing.com/seminars/files/pragmaticmarketingframework">recently updated</a>) starts with the market.  When I first watched the great video, where Jim Foxworthy introduces the updates to the grid, I was a little concerned about that.  Market first, strategy second.  Why not strategy first and market second?  I decided that I was happy with their presentation, since the framework is a tool for product managers.  Product managers usually have responsibility for a market, as a component of their company&#8217;s strategy &#8211; so the sequencing makes sense for a product manager audience.  Jim also puts it in perspective &#8211; their framework is focused on the company&#8217;s strategy for attacking a particular market.  I&#8217;ll stick with that here too.</p>
<p>To understand what problems are valuable for a particular market (or market segment) you have to approach it from your customer&#8217;s perspective.  What are the problems they are trying to solve?</p>
<p>Your customers might be distributors of retail products, who&#8217;s business it is to acquire, store, and redistribute small products.  They are in a business where their customers value accuracy, timeliness, and low cost of delivery.  Your customers may value solutions that allow them to more accurately redistribute products (they receive pallets full of items, and then redistribute them a case at a time).  They may value solutions that allow them to adapt to changes in orders with minimal turn-around time.  Or they may get the most value out of cost reductions.  Talk with your customers, <a title="ten supercharged active listening skills" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">listen to them talk about their problems</a>.  When I was working for an enterprise software company years ago, our CEO stressed that he wanted to be solving the problems that keep our customer CEOs up at night.  Find out what those problems are.</p>
<p>The next challenge is in breaking those problems down into something actionable.  If your customers&#8217; biggest problem is cost reduction, how do you solve it?  The first step is to understand where the costs are.  One way to visualize and decompose the problems your customers face is with an<a title="Ishikawa diagrams for decomposing problems" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/"> Ishikawa diagram (check this out to learn how to use an Ishikawa)</a>.</p>
<p>The following diagram shows a decomposition of &#8220;The cost of driving is too high&#8221; problem:</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;">Now you&#8217;ve identified a set of problems that are valuable to your customers.  The Ishikawa can help you make sure you&#8217;re <a title="good problem statements and bad problem statements" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">identifying problems, not the manifestations of problems</a>.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;">You also have to understand what solutions are already available to your customers.  If you have a competitor that already offers a very good solution to one of the identified problems, your customers will find less value in a solution from you.</p>
<h2>Valuable Requirements Support Your Business Strategy</h2>
<p>With a set of problems in hand that are worth solving, you have to figure out which ones are aligned with <em>your</em> company&#8217;s strategy.</p>
<p>In the Ishikawa above, one of the problems that car owners face is excessively high payments (on their car loan).  Another problem is that the cost of maintenance is too high.  If your company provides financing products (loans and leases), trying to solve the <em>cost of maintenance</em> problem for your customers is probably out of alignment with your strategy.  Making the financing of a vehicle more affordable (while still profitable for your company) is probably a well-aligned problem.</p>
<p>Your company will also have a strategy for engaging the market &#8211; target market share levels, target market segments to penetrate, etc.  You may be trying to become <a title="market-driven competitive advantage" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">a visionary company with your finger on the pulse of your market</a> &#8211; or you may be trying to get mass adoption of your product by solving a very common problem, but solving it better than your competitors.  Your strategy for winning in this market may be to differentiate your offerings by <a title="product differentiation" href="http://tynerblain.com/blog/2007/01/23/differentiate-your-product/">solving different problems</a> than your competitors, or <a title="blue ocean strategy" href="http://tynerblain.com/blog/2009/04/29/personas-and-blue-oceans/">defining a unique market</a>.</p>
<p>Another way to think about alignment with your business strategy is to think about the owners of your company&#8217;s strategic goals &#8211; your <a title="stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">internal stakeholders</a>.  Most projects will fail (or be killed) without internal champions who believe in the ideas.</p>
<p>When you&#8217;re aligned with a part of your company strategy,  you&#8217;re aligned with whoever is the owner of that component of the strategy, and you&#8217;re providing value to that stakeholder.  Sometimes there are many components and stakeholders.  You can adapt some <a title="stakeholder value matrix" href="http://tynerblain.com/blog/2007/10/25/stakeholder-value-matrix/">process-improvement prioritization techniques</a> that Roger Burlton teaches to get an understanding of which goals are important to whom.</p>
<h2>Valuable Requirements Solve Problems for Your Users</h2>
<p>Products are used by people.  People use those products to accomplish goals.  They may be using your product for their employers, in which case they have &#8220;practical goals&#8221; (finish quickly) that represent how their company&#8217;s goals (lowered costs) are realized.  And those people usually interact with other people.  You can quickly<a title="visualizing your product's ecosystem" href="http://tynerblain.com/blog/2007/03/13/visualize-stakeholder-analysis/"> build a visualization of who are the users</a> (and indirect users).</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;" title="stakeholder interactions" src="http://sehlhorst.smugmug.com/photos/135723894-M.jpg" alt="stakeholder interactions" /></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="larger stakeholder interaction onion diagram" href="http://sehlhorst.smugmug.com/photos/135723902-O.png">larger image</a>]</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;">You can think of this as an ecosystem of users of your product.  <a title="creating personas for goal driven development" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">Develop personas</a> and their goals to represent these users.  You can apply the same Ishikawa-based problem-decomposition technique when needed to make sure you&#8217;re uncovering the real problems (too many people abandon the sign-up process) and not the manifestations of those problems (users have to click too much).</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;">When your users are not your customers, your users have personal and practical goals that represent their individual contributions to achieving your customer&#8217;s goals.  And your users achieve those goals by doing stuff.  You can represent that stuff with <a title="writing complete user stories" href="http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/">user stories</a> or <a title="agile use cases" href="http://tynerblain.com/blog/2007/03/28/how-to-start-use-cases/">use cases</a>.  The key element is to make sure that you&#8217;ve identified the valuable activities, the ones that are required to achieve goals.</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;" title="user stories and goals" src="http://sehlhorst.smugmug.com/photos/584149015_prgqx-L.png" alt="" width="450" height="305" /> [<a style="color: #0000aa; text-decoration: none; padding: 0px; margin: 0px;" title="goals are achieved through user stories" href="http://sehlhorst.smugmug.com/photos/584148954_P4px6-O.png">larger version</a>]</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;">The above diagram is used when assessing the completeness of requirements, which is an element of assuring valuable requirements.  If a goal has value, you have to identify the set of user stories required to achieve the goal.  Those user stories therefore have value.  User stories that don&#8217;t support a goal don&#8217;t have value.</p>
<h2>Valuable Requirements Meet Your Buyer&#8217;s Criteria</h2>
<p>The people who buy your products are sometimes not the people who use your products.  Even when the same person is both buyer and user, that person&#8217;s <em>mental model</em> for buying is different from their model for using a product.  If you can&#8217;t convince someone to buy your product, it doesn&#8217;t matter how great it would have been had they bought it.</p>
<p>Here are the opening soundbites from an earlier article on<a title="buyer personas" href="http://tynerblain.com/blog/2008/07/22/buyers-and-users/"> buyer personas</a>.</p>
<ul>
<li>Buyer Persona: If you build what he thinks he wants, he&#8217;ll come.</li>
<li>User Persona: If you build what he actually needs, he&#8217;ll come back.</li>
</ul>
<p>And the closing summary points (it&#8217;s a <em>long</em> article):</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;">Buyer personas make purchases when products appear to address their internal view of what the problems are.</li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;">User personas love products when those products solve the real problems.</li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;">Don’t confuse buyers (who need to buy products to solve user problems) with users (who need to solve their own problems).</li>
<li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 20px; padding: 0px;">When buyers and users are the same people, acknowledge the buyer-goals distinctly from the user-goals.</li>
</ul>
<p>There are also several <a title="buyer and user persona discussion" href="http://tynerblain.com/blog/2008/07/22/buyers-and-users/">really great insights in the discussion thread</a> &#8211; including great comments from Shaun Connolly, Edele Revella, and David Meerman Scott!</p>
<h2>Valuable Requirements Don&#8217;t <em>Over-Solve</em> the Problems</h2>
<p><a title="kano analysis" href="http://tynerblain.com/blog/2006/02/27/prioritizing-software-requirements-kano-take-two/">More is better, right</a>?  Not always.  Sometimes, &#8220;more&#8221; is a waste.  There are really two ways to think about how much is too much.</p>
<p><strong>The ROI of Incremental Improvements</strong></p>
<p><img class="alignnone" title="roi and utility curves" src="http://sehlhorst.smugmug.com/photos/57708984-M.png" alt="" width="400" height="400" /></p>
<p>Because of the law of diminishing returns, the next &#8220;more&#8221; is always worth less than the previous &#8220;more.&#8221;  Think of it in terms of improving fuel-economy.  If you have a car that gets 10 mpg, and you drive 100 miles a day, you have to buy 10 gallons of gas a day.  If you improve the mpg by 10 mpg (to 20 mpg), you&#8217;ll save 5 gallons of gas per day.  Huge value.  If you improve the mpg by another 10 mpg (to 30 mpg), you&#8217;ll save an additional 1.3 gallons of gas per day.  Some value.  Another 10 mpg buys you 0.8 gallons per day.  Diminishing returns.</p>
<p>The cost of achieving &#8220;more&#8221; is also a factor.  The simplified diagram above shows a linear representation of cost as a black line.  The diminishing returns of value are represented as the red curve.  The optimal investment point is where the two curves are tangent (have the same slope) &#8211; marked with the blue circle.  Less investment leaves money on the table &#8211; additional investment is done at a loss.</p>
<p><strong>Good Enough is Enough</strong></p>
<p>You don&#8217;t need to super-solve the problem.  How much more would you pay for a car that got 10,000 mpg than one that got 1,000 mpg?  If you drove 100 miles a day, the difference between the two (from a value standpoint) is trivial.  Over the course of 100 days, you would save 9 gallons <em>total</em> with the car that had <em>ten times the fuel efficiency</em>.</p>
<p>Why haven&#8217;t microwave ovens been getting faster every year? Because the move from a 1-hr baked potato to a 5-minute baked potato is <em>good enough</em>.  You don&#8217;t need to get it under 4 minutes.</p>
<p>This is known as <em><a title="satisficing" href="http://tynerblain.com/blog/2008/11/12/satisficing-sprints/">satisficing</a></em><a title="satisficing" href="http://tynerblain.com/blog/2008/11/12/satisficing-sprints/"> </a>- stopping when something is good, not trying to make it &#8220;perfect.&#8221;  Additional &#8220;goodness&#8221; will not result in enough additional sales to justify the investment.</p>
<h2>Conclusion</h2>
<p>The tagline for Tyner Blain is <em>Software Product Success</em>.  On an elevator, I explain that you have to not only &#8220;build stuff right&#8221; but you have to &#8220;build the right stuff.&#8221;  And the right stuff is the valuable stuff.</p>
<p>Define valuable requirements to make sure you&#8217;re building the right stuff.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; line-height: 1.4em; padding: 0px;">
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Valuable+Requirements+http://bit.ly/opI6V+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2009/07/29/valuable-requirements/&amp;t=Valuable+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/07/29/valuable-requirements/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Writing Complete User Stories</title>
		<link>http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/</link>
		<comments>http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 05:18:23 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[agile traceability]]></category>
		<category><![CDATA[agile tracing]]></category>
		<category><![CDATA[requirements traceability]]></category>
		<category><![CDATA[traceability]]></category>
		<category><![CDATA[tracing goals]]></category>
		<category><![CDATA[tracing user stories]]></category>

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

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=714</guid>
		<description><![CDATA[
Agile development methodologies succeed because they help development teams be as effective as possible.  Development teams do not, however, work in complete isolation.  The company they work for has a strategy.  The company manages a portfolio of products, and targets a particular product at specific market problems.  Within that context, an agile team can thrive.  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Sharpening Steel" src="http://photos.smugmug.com/photos/384746390_YYUuF-L.jpg" alt="" width="250" height="188" /></p>
<p>Agile development methodologies succeed because they help development teams be as effective as possible.  Development teams do not, however, work in complete isolation.  The company they work for has a strategy.  The company manages a portfolio of products, and targets a particular product at specific market problems.  Within that context, an agile team can thrive.  What&#8217;s the best way to provide that context?</p>
<p><span id="more-714"></span></p>
<h2>Agile Development in Context</h2>
<p>Mike Cohn of Mountain Goat Software gave a presentation to the bayXP group in March 2007 on <a title="agile estimation presentation" href="http://www.mountaingoatsoftware.com/presentation/51-planning-and-tracking-on-agile-projects">agile estimation and planning</a> (video and pdf at link).  As part of setting the stage for his planning presentation, he describes the software development ecosystem as an onion.  So did I, coincidentally, in 2006.  The gist of both onions is that <a title="software development process" href="http://tynerblain.com/blog/2006/01/29/describing-the-software-development-process/">software development</a> is implementation, in the context of design, driven by requirements, formed to address market opportunities.  Mike&#8217;s onion provides specific insights into the execution approach of an agile team, so let&#8217;s frame this conversation using his terms (but a new visual).</p>
<p><img class="alignnone" title="Agile process onion" src="http://photos.smugmug.com/photos/384746404_w7Nzz-L.gif" alt="" width="450" height="450" /></p>
<ul>
<li>A company has a strategy.  [Example: "Organize the world's information..."]</li>
<li>A company has a portfolio of products that is intended to provide a mechanism by which the company can achieve its strategy.  [Example: Gmail, Chrome, Gears, Reader, Docs, etc.]</li>
<li>Each product (or service) the company creates is an intentional part of the portfolio, targeted at specific markets or market segments, with an intention to solve specific problems.  [Example: Gears allows people to consume online content when offline.]</li>
<li>A product is delivered through a series of releases. [Example: Chrome release 0.2.149.30.]</li>
<li>The work that goes into a release, when practicing incremental development, may be decomposed into multiple iterations.  [Example: Chrome iteration 0.2.149.29, not released, but built and tested]</li>
<li>In scrum, the completion of tasks within an iteration are managed daily.  [Example: Today, I will add the 'check for updates' to the 'About Chrome' popup.]</li>
</ul>
<p>Many people talk about the agile process as if it encompassed the entire perspective shown above.  It doesn&#8217;t.  When you talk about the software development lifecycle from the strategy level down, you&#8217;re really talking about business strategy.  Agile development happens in the context of a business strategy, a product portfolio designed to achieve those strategic goals, and the product in that portfolio that is being developed.</p>
<p>Saeed Khan puts it pretty well in <a title="saeed on agile" href="http://onproductmanagement.wordpress.com/2008/04/29/agiledev_and_pm/">his first article about agile / scrum</a>:</p>
<blockquote><p>Keep in mind, Agile/Scrum is a DEVELOPMENT methodology. It is a great model for developers and engineers and other R&amp;D team members to work and communicate more efficiently. There are very clear benefits to this model. It provides greater visibility into current work status, work remaining, can identify development hurdles earlier and can communicate them outward more easily.</p></blockquote>
<p>I agree with Saeed.  In the diagram above, the layers that represent &#8220;what we do&#8221; have black text and borders (Strategy, Portfolio, and Product).  The layers that represent &#8220;how we do it&#8221; have white text and borders (Release, Iteration, Daily).  In Mike Cohn&#8217;s presentation on agile planning, he specifically calls out that agile planning happens in this (inner) scope.</p>
<p>Managing a product backlog (in scrum) is the place where things blur a little.  Determining what goes into the product backlog is &#8220;what we do&#8221;, prioritizing those product backlog items is &#8220;when do we do it&#8221;, and fitting them into individual releases (<a title="scheduling with timeboxes" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">timeboxes</a> and <a title="rolling wave planning" href="http://tynerblain.com/blog/2006/07/25/incremental-project-mgmt/">rolling-wave planning</a>) is &#8220;how we do it.&#8221;  As agile teams stress, communication here is the key.</p>
<p>The true challenge that companies face is to provide agile development teams with the context needed to develop software.</p>
<h2>Providing Context to Agile Teams</h2>
<p>Product management is primarily a strategic activity, combining market insights () with company strategy to design a product portfolio, and to determine which problems a particular product should solve, for a particular market segment.  This leads to a <a title="buyer persona and user persona" href="http://tynerblain.com/blog/2008/07/22/buyers-and-users/">focus on buyer personas and user personas</a>.</p>
<p>Establishing and maintaining the connection between market insights and agile development teams will develop <a title="distinctive competence from being market driven" href="http://tynerblain.com/blog/2008/08/26/market-driven-advantage/">a distinctive competence for your company</a>.  One key is to connect <a title="stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">stakeholder goals</a> with implementation activities.  This involves translation from the language of business to the language of developers.</p>
<p>An effective bridge across that communication divide has to be visceral and very straightforward.  Many agile team members rail against anything that looks like overhead, and the manifesto even codifies this disposition &#8211; &#8220;<a title="agile manifesto" href="http://tynerblain.com/blog/2006/05/10/agile-values-alistair-cockburn-on-the-agile-manifesto/">working software over comprehensive documentation</a>.&#8221;</p>
<p>Our magic decoder ring must be simple, explicit, and light-weight.  Sounds like a job for the Ishikawa diagram.</p>
<h2>Ishikawa Diagrams for Agile Product Management</h2>
<p>The Ishikawa diagram, also known as a cause-and-effect diagram or as a fishbone diagram, can be used to <a title="ishikawas for product managers" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">describe and decompose market problems</a>.  Consider the following near-real-world example:</p>
<p>You&#8217;re developing a product for sales reps.  The key to your product&#8217;s success is user adoption, and you believe the way to get that adoption is by helping sales reps to maximize their compensation.  Sales reps are generally managed via commission-based compensation models.  You establish &#8220;Maximize Sales Compensation&#8221; as a goal for your software (for these users, in this market segment).  You then acknowledge that there are a series of &#8220;smaller&#8221; problems that have to be solved before sales reps actually can maximize their compensation.  An Ishikawa diagram of your results would look like the following (consider only the main branches):</p>
<p><a href="http://photos.smugmug.com/photos/384746454_ASdyM-L.gif"><img class="alignnone" title="market ishikawa" src="http://photos.smugmug.com/photos/384746439_MCSvi-L.gif" alt="" width="450" height="179" /></a>[<a title="market driven ishikawa" href="http://photos.smugmug.com/photos/384746454_ASdyM-L.gif">click for larger version</a>]</p>
<p>For some problems (and some teams!) this may be enough information to provide the context to develop a product backlog.  And your agile team will move forward into managing their own execution from the product backlog stage.  For larger or more complex problems (such as this example), you will need more detailed communication before diving into user stories / use cases.</p>
<p>The same Ishikawa diagram, with more detail, looks like the following:</p>
<p><a href="http://photos.smugmug.com/photos/384746511_Un8EL-L.gif"><img class="alignnone" title="detailed market driven ishikawa" src="http://photos.smugmug.com/photos/384746482_NFmAJ-L.gif" alt="" width="450" height="179" /></a>[<a title="detailed market driven ishikawa" href="http://photos.smugmug.com/photos/384746511_Un8EL-L.gif">click for larger version</a>]</p>
<p>For the largest and most complex problems, this is still not enough.  You can take each major branch of the Ishikawa diagram and create a child Ishikawa diagram.  However, from an agile standpoint (as in &#8220;staying close to your market&#8221;), you don&#8217;t want to do all of that detailed analysis up front.  Once you&#8217;ve prioritized the main branches in your main Ishikawa diagram, you will want to go to the next level of detail only for the first branch.  You want to make sure that you are delivering &#8220;working software&#8221; &#8211; not &#8220;comprehensive documentation.&#8221;  Delay your detailed analysis to the last practical moment.</p>
<p>Assuming you chose &#8220;Improve Predictability of Sales&#8221; as the first market problem to address with your product.  And within that choice, you are going to tackle &#8220;Align Solutions to Customer Problems&#8221; first.  Your child Ishikawa diagram could look like the following:</p>
<p><a href="http://photos.smugmug.com/photos/384746474_PvgoW-L.gif"><img class="alignnone" title="decomposed ishikawa" src="http://photos.smugmug.com/photos/384746465_CZCFd-L.gif" alt="" width="450" height="183" /></a>[<a title="decomposed ishikawa market problem" href="http://photos.smugmug.com/photos/384746474_PvgoW-L.gif">click for larger version</a>]</p>
<p>At this point, you would start writing user stories (or defining use cases) around recording customer problems, searching for &#8216;comparable problems&#8217;, predicting the problems a customer might face (before your first sales call), etc.  Those user stories will then get mapped to releases and iterations, and their implementation will be managed through the daily standups.</p>
<h2>Outbound Communication of Agile Delivery</h2>
<p>This problem-decomposition approach was presented top-down, specifically around providing the needed context to an agile development team to guide their design and implementation activities, giving them the opportunity to intentionally solve valuable problems, in alignment with the company&#8217;s strategy.</p>
<p>This same approach can be leveraged in outbound communication of what the team will deliver (and when).  You can easily construct a product roadmap that is actually an &#8220;agile problem roadmap.&#8221; [Ed: can I trademark that?  Probably not, since <a title="agile roadmaps" href="http://www.enthiosys.com/problems-we-solve/agile-roadmaps/">Enthiosys already does it</a>, but without the word <em>problem</em>.]  In the short term, talk about specific problems (&#8220;Align Solutions to Customer Problems&#8221;) that you are solving.  In the longer range plan, talk about the next level of problems (&#8220;Improve Predictability of Sales&#8221;).  The team is not committing to a widget or feature.  The team is committing to providing a solution to a particular problem in a given release.</p>
<p>When you commit to a particular feature, you inhibit your ability to change as you learn.  And that&#8217;s bad.  You need to be able (after each iteration) to say &#8220;This problem is still valuable, but our previous idea about how to solve it turned out to be a bad idea.&#8221;  If you communicate at the feature level, you&#8217;ve added overhead to your process &#8211; you now have to manage expectations and update your communications, EVERY time you change designs.</p>
<p>You introduce another problem &#8211; these Ishikawa diagrams are so easy to read, and you&#8217;re now managing your roadmap based on problems being solved in a given iteration/release &#8211; should you tell everyone?  Many product managers sidestep the &#8220;Do we make our roadmap public?&#8221; question because they don&#8217;t create an easy to consume roadmap.  With this approach, you do.  So you have to decide if it needs to be a secret.</p>
<h2>Zero-Overhead Planning</h2>
<p>Early in this article, I said &#8220;agile team members rail against anything that looks like overhead.&#8221;  Creating Ishikawa diagrams is zero-overhead.  Or nearly so.  99% of the work that is displayed through the Ishikawa is work that you have to do anyway, to have <a title="successful products are intentional products" href="http://tynerblain.com/blog/2008/05/19/successful-products/">an intentional approach to product creation</a>.  The only overhead that is introduced is in the creation of <a title="how to create an ishikawa diagram" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">the Ishikawa diagram</a>.  If your thoughts aren&#8217;t already organized this way, you&#8217;re in trouble.  It takes almost no time to create the diagram that reflects what you should already be thinking.</p>
<p>And that qualifies as low-overhead.  And high value.  That should win over any resistance from the team.</p>
<h2>Conclusion</h2>
<p>As a product manager, you have to synthesize market problems, and develop a product vision to solve those problems that is aligned with your strategy.  As someone who is &#8220;part of&#8221; or &#8220;working with&#8221; (whichever matches your situation) an agile development team, you need a way to provide context to your implementation team.  That context can easily be conveyed with an Ishikawa diagram, with almost no incremental effort.  Your team can easily consume the diagram, and it gives them the freedom to explore different solution designs.  It also enables you to communicate your plans with the rest of the company (and externally, if desired).</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Agile+Product+Management%3A+Providing+Context+http://bit.ly/LNLYM+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/10/01/agile-product-management-providing-context/&amp;t=Agile+Product+Management%3A+Providing+Context" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/10/01/agile-product-management-providing-context/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Defining Problems at ProductCamp Austin 1</title>
		<link>http://tynerblain.com/blog/2008/06/23/defining-problems-at-pca1/</link>
		<comments>http://tynerblain.com/blog/2008/06/23/defining-problems-at-pca1/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 02:18:00 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Austin TX]]></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[cause and effect diagram]]></category>
		<category><![CDATA[fishbone diagram]]></category>
		<category><![CDATA[ishikawa]]></category>
		<category><![CDATA[pca]]></category>
		<category><![CDATA[productcamp]]></category>
		<category><![CDATA[productcamp austin]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=687</guid>
		<description><![CDATA[
Jun 14th was the first productcamp in Austin (and the second one anywhere).  It was a great event, and here&#8217;s the presentation that I did on how to define the strategic problems that drive our products.

Defining Problems
Here&#8217;s the presentation I gave at ProductCampAustin 1, posted on slideshare.  Just click on the forward/back arrows in the [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.productbeautiful.com/productcamp/big_banner.gif" alt="productcamp austin logo" width="650" height="127" /></p>
<p>Jun 14th was the first productcamp in Austin (and the second one anywhere).  It was a great event, and here&#8217;s the presentation that I did on how to define the strategic problems that drive our products.</p>
<p><span id="more-687"></span></p>
<h2>Defining Problems</h2>
<p>Here&#8217;s the presentation I gave at <a title="pca1" href="http://barcamp.org/ProductCampAustin">ProductCampAustin 1</a>, posted on slideshare.  Just click on the forward/back arrows in the center of the bottom of the image, and it will cycle through the presentation &#8211; you don&#8217;t even have to leave Tyner Blain.</p>
<div id="__ss_479341" style="width: 425px; text-align: left;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=defining-problems-1214103303491294-8" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=defining-problems-1214103303491294-8" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div style="width: 425px; text-align: left;">
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><a href="http://www.slideshare.net/?src=embed"><img style="border:0px none;margin-bottom:-5px" src="http://static.slideshare.net/swf/logo_embd.png" alt="SlideShare" /></a> | <a title="View Defining Problems on SlideShare" href="http://www.slideshare.net/ssehlhorst/defining-problems?src=embed">View</a> | <a href="http://www.slideshare.net/upload?src=embed">Upload your own</a></div>
</div>
<h2>Following Along</h2>
<p>In keeping with the &#8220;don&#8217;t put a lot of words on your slides&#8221; tradition, the presentation is probably all but impossible to follow without some notes.  So here are some notes, organized by slide.  The presentation builds on concepts we&#8217;ve talked about here over the years, and in the notes below, I&#8217;ll link to some of those previous articles to provide more depth (instead of typing out everything I said).</p>
<ul>
<li><strong>Slide 1</strong>.  There are two key elements to achieving software product success.  Build the right stuff, and build it right.  This presentation is about building the right stuff.</li>
<li><strong>Slide 2</strong>.  Specifically, when we start a project, it is to achieve some business objective.  The challenge is to find the right level of abstraction for that objective.  &#8220;Increase shareholder value&#8221; is too nebulous, and &#8220;Replace a legacy system&#8221; is too lacking in context.  Today we will apply a very powerful, but simple technique to help define the business objectives at the right level of detail to be actionable, while providing the right context to validate that we&#8217;re doing the right thing. My goal is for everyone to leave here with a new skill that they can immediately apply.</li>
<li><strong>Slide 3</strong>.  Everyone has <a title="requirements documents from different perspectives" href="http://tynerblain.com/blog/2006/05/11/requirements-documents-one-mans-trash/">a different perspective on a software project</a>, and from those vantage points, perceives different elements of the project as the &#8220;why, what, and how&#8221; of the project.</li>
<li><strong>Slide 4</strong>.  Keeping in mind that people have different perspectives, let&#8217;s also look at a modified version of Karl Wiegers&#8217; <a title="structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured approach to requirements definition</a>.</li>
<li><strong>Slide 5</strong>.  Introducing the<a title="ishikawa fishbone cause and effect diagram" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/"> Ishikawa diagram</a>.</li>
<li><strong>Slide 6</strong>.  Set up the &#8220;deflated tires&#8221; problem from the article linked in (slide 5).</li>
<li><strong>Slide 7</strong>.  Showed the discovery process and representation of &#8220;real problems&#8221; closing out the theme from slides 5 and 6.</li>
<li><strong>Slide 8</strong>.  A real-world project I joined mid-stream for a client.  The project was a &#8220;collection of stuff&#8221; and no two people would give the same answer for &#8220;why are we doing it&#8221; and many people unashamedly admitted that they had no idea why.  No idea why!</li>
<li><strong>Slide 9</strong>.  Turns out, here&#8217;s what a view of the value for that program really looked like.  The team went from chaos to context.  Suddenly, scope discussions and prioritization decisions had a framework for validation.  There was also an organized way to begin completeness analysis.  Much easier to say &#8220;we&#8217;re getting this value&#8221; than to say &#8220;we&#8217;re doing these things &#8211; did we miss anything?&#8221;</li>
<li><strong>Slide 10</strong>.  I facilitated the folks in the room creating an Ishikawa from scratch.  We started with what we thought was the problem statement (provided by John Milburn from the back of the room) &#8211; &#8220;Traffic in Austin on Fridays is too bad.&#8221;  We ended with &#8220;John has work-life balance problems&#8221;, one of which comes from missing dinner with his wife, which can happen because of a combination of bad traffic and bad planning by John.  We also explored several solution-paths, including increasing the capacity of the roads and of the vehicles.  The ideas <em>clicked</em> for several people in the room.</li>
<li><strong>Slide 11</strong>.  Another real-world example, this one used in <a title="good product roadmap approach" href="http://tynerblain.com/blog/2008/04/28/dont-build-a-stupid-product-roadmap/">planning of a product roadmap for an 18-24 month view</a> of the problems the team was signing up to solve.</li>
<li><strong>Slide 12</strong>.  Special thanks to the sponsors that made our inaugural ProductCampAustin a success!  My prediction for the next one (fall/winter 2008): 250 attendees.  So if you&#8217;re the sponsoring type, start planning on how you can help out.</li>
</ul>
<p>Thanks again to everyone who attended, and special thanks to <a title="Seilevel home page" href="http://www.seilevel.com/index.php">Tal Boyd of Seilevel</a>, who video taped my whole presentation.  I just haven&#8217;t figured out how to split the 400+MB m4v file into something I can upload onto youtube.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Defining+Problems+at+ProductCamp+Austin+1+http://bit.ly/1XdYBu+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/06/23/defining-problems-at-pca1/&amp;t=Defining+Problems+at+ProductCamp+Austin+1" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/06/23/defining-problems-at-pca1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Use Case To Actor Mapping</title>
		<link>http://tynerblain.com/blog/2008/06/09/use-case-to-actor-mapping/</link>
		<comments>http://tynerblain.com/blog/2008/06/09/use-case-to-actor-mapping/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 02:44:05 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[actors]]></category>
		<category><![CDATA[completeness validation]]></category>
		<category><![CDATA[requirements process]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=685</guid>
		<description><![CDATA[
We know the importance of identifying the use cases that enable our business goals.  We also know the value of understanding the actors that will use our products.  This article shows how to demonstrate a simple but powerful view that maps the use cases to the actors.

Why Map Use Cases To Actors?
Most use [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://sehlhorst.smugmug.com/photos/310269248_8fGUN-L.jpg" alt="map" width="250" height="166" /></p>
<p>We know the importance of identifying the use cases that enable our business goals.  We also know the value of understanding the actors that will use our products.  This article shows how to demonstrate a simple but powerful view that maps the use cases to the actors.</p>
<p><span id="more-685"></span></p>
<h2>Why Map Use Cases To Actors?</h2>
<p>Most use case templates and requirements documents include a place to list the actors for each use case.  Very few encourage us to provide a big-picture view.  Even users of requirements-management systems are left without an easy way to show this perspective.  Can it really be valuable, if it is so often overlooked?</p>
<p>A critical element of defining and managing requirements is <a title="assuring complete requirements" href="http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/">assuring completeness of your requirements</a>.  The first step to <a title="use cases for validating completeness" href="http://tynerblain.com/blog/2006/07/06/requirement-completeness-validation-with-use-cases/">assuring completeness of your requirements</a> is to acknowledge that the requirements represent <a title="writing structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">a structure of decomposition of a problem</a>.</p>
<p><img src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" alt="structured requirements" width="567" height="450" /></p>
<p>Once you&#8217;ve identified the goals of the business (or <a title="problem definition tool" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">the problems faced by customers within your market</a>, when taking a multi-customer view), you need to recognize that those goals are achieved by enabling use cases.  Each of those use cases is then enabled through the <a title="functional requirements support use cases" href="http://tynerblain.com/blog/2006/02/10/writing-functional-requirements-to-support-use-cases/">implementation of functional requirements</a>.</p>
<p>Part of defining use cases is defining the actors (a.k.a. users) that perform those use cases.  You can (and should) <a title="creating actor hierarchies" href="http://tynerblain.com/blog/2006/12/13/actor-hierarchies/">use an actor hierarchy to describe the users</a>.  If you fail to define the actors effectively, you risk creating <a title="avoid the elastic user requirements anti-pattern" href="http://tynerblain.com/blog/2007/07/23/elastic-users/">the <em>elastic user </em>anti-pattern</a>.  This anti-pattern is what happens when you lose sight of the differences between different user groups.  You run the risk of designing a solution that fails to meet the needs of any one group of users, by homogenizing them into a lowest common denominator user.  Or worse, cutting user-experience corners, and designing &#8220;whatever is easiest&#8221; and justifying those decisions by rationalizing a schizophrenic actor who changes characteristics to suit your designs.</p>
<p>Most people defining requirements (product managers and business analysts) will do a good job of defining use cases, and identifying the actors that use them.  And most tools and books provide good guidance on how to define an actor, or how to define the actors for a single use case.  But so few can give you that big picture.</p>
<h2>Requirements Iterative Development</h2>
<p>If you have worked the entire lifecycle of a requirements process from problem to solution, you have experienced iterative requirements development.  Most requirements processes work top-down (some prototype-driven processes are more &#8220;bottom up&#8221;).  Define the goals.  Then define the use cases needed to achieve those goals.  Then define the functional requirements&#8230;</p>
<p>Hold on.</p>
<p>Don&#8217;t let that &#8220;agile requirements&#8221; vs &#8220;waterfall requirements&#8221; debate sneak in here.  That&#8217;s a matter of formality and scale.  What we&#8217;re talking about, specifically, is iterative development that happens as a result of insight, independent of (or in spite of) the process used.  This applies to any process for defining requirements.</p>
<p>You define a set of goals.  You may or may not validate that set of goals.  You think you are done.  You start defining the use cases and mapping them back to the goals.  You discover two things.  First, some goals are not mapped to any use cases, and second, some use cases are not mapped to any goals.  You resolve this.  You add and remove goals, and you add and remove use cases.  The act of defining the use cases enlightens you about the goals they are intended to support.  You are iterating on your goals.  Unfortunately, a lot of project managers don&#8217;t understand this, and build a schedule around a milestone such as &#8220;business requirements approval&#8221;.  Then when you apply your insights into a revision (iteration) of your goals, during the &#8220;use case development phase&#8221; the schedule is blown.</p>
<p>You do your change requests, reset expectations, and manage the political fallout of a schedule change.  Then after &#8220;use case approval&#8221;, you move into requirements definition.  As you document requirements, you uncover new use cases, or rewrite use cases, or otherwise benefit from the insights you have.  And those changes to use cases propagate back up into changes in requirements.  Now you&#8217;ve really messed up the schedule.  The way some people fixate on schedules, you&#8217;d think they would rather stick their fingers in their ears and keep the schedule than benefit from improvements now, when they cost 100 times less to fix.  Oops.  Guess I went on a rant, there.</p>
<p>This is also commonly called &#8220;requirements churn&#8221; and can be tracked &#8211; either in a good way or a bad one.  The bad way to track this creates an environment that discourages change (&#8220;you better keep the schedule!&#8221;).  The good way to track this creates an environment of &#8220;get it (more) right the first time.&#8221;</p>
<p>One way to get it &#8220;more right&#8221; the first time with your goal definition is to look at the big picture with your use cases.  One piece of that is mapping (or tracing) the use cases back to the goals.  Another tool is to create a mapping between your use cases and your actors.</p>
<p>Use Case To Actor Mapping</p>
<p>Create a simple grid in a spreadsheet.  Each row is a use case, and each column is an actor.  In each cell, when the actor is the primary actor for a use case, add the letter &#8220;P&#8221;.</p>
<blockquote><p><strong>Primary Actor</strong></p>
<p>The primary actor is the person who is the <em>subject</em> of the use case, performing the <em>verb</em> of the use case on the <em>object</em>.  A use case may have multiple actors but has one most important person.  The term <em>actor</em> represents the person who takes action &#8211; not someone playing a role. Other actors may be involved, either as participants, or as infrequent or secondary performers of the use case.<br />
Some examples:</p>
<ul>
<li>Primary Actor: Pilot.  Secondary Actors:Flight Crew, Sr. Maintenance Technician</li>
<li>Primary Actor: Author.</li>
<li>Primary Actor: Financial Accountant.  Secondary Actor: Financial Accounting Manager</li>
</ul>
<p><cite><a href="http://tynerblain.com/blog/2006/06/26/foundation-series-how-to-read-a-formal-use-case/">Foundation Series: How To Read A Formal Use Case</a></cite></p></blockquote>
<p>A simple grid with a handful of use cases and actors would look like the following:</p>
<p><img src="http://sehlhorst.smugmug.com/photos/310352623_tsmrR-L-0.jpg" alt="use case to actor map" width="474" height="306" /></p>
<p>The interesting analysis this allows you to do (and it is more powerful with a larger body of use cases and actors) is to review the big picture.  You would ask yourself &#8220;who does each use case?&#8221; even without this tool.  That&#8217;s just part of writing the use case.  Now you can also ask &#8220;what use cases does each actor perform?&#8221;  And you can easily see to ask questions like &#8220;If A03 does that, why can&#8217;t A02 do it?&#8221;</p>
<p>This big picture analysis, in my experience, will also accelerate the discovery of missing use cases.  You should also capture when an actor is a <em>secondary</em> actor in the use case.  You will then have a grid that looks like the following:</p>
<p><img src="http://sehlhorst.smugmug.com/photos/310352606_QKXH5-L.jpg" alt="mapping actors to use cases" width="474" height="329" /></p>
<p>When asking the comparative questions about UC03, you uncovered another use case.</p>
<p>This tool accelerates those insights, allowing you to make changes &#8220;further upstream&#8221;, or if your glass is half-empty, correct fewer mistakes later.</p>
<h2>Conclusion</h2>
<p>Use the use case to actor map to provide a big picture view of how people will interact with your product.  This view will improve your understanding of how people use the product, simplify the analysis, and encourage insights earlier in the requirements process.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Use+Case+To+Actor+Mapping+http://bit.ly/B1dTf+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/06/09/use-case-to-actor-mapping/&amp;t=Use+Case+To+Actor+Mapping" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/06/09/use-case-to-actor-mapping/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Defining Problems With Cause And Effect Diagrams</title>
		<link>http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/</link>
		<comments>http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/#comments</comments>
		<pubDate>Wed, 28 May 2008 02:09:23 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Ishikawa Diagram]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[cause and effect diagram]]></category>
		<category><![CDATA[fish bone diagram]]></category>
		<category><![CDATA[fishbone diagram]]></category>
		<category><![CDATA[ishikawa]]></category>
		<category><![CDATA[problem statement]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=683</guid>
		<description><![CDATA[
The Cause and Effect diagram is also known as a fish bone diagram, because it resembles the skeleton of a fish.  Using a cause and effect diagram can be the most effective way to define the problems that you intend to solve with your product.  Get your stakeholders engaged in your program with [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://sehlhorst.smugmug.com/photos/302602335_YEYkK-L.jpg" alt="fish head" width="250" height="187" /></p>
<p>The <em>Cause and Effect</em> diagram is also known as a fish bone diagram, because it resembles the skeleton of a fish.  Using a cause and effect diagram can be the most effective way to define the problems that you intend to solve with your product.  Get your stakeholders engaged in your program with this compelling visual!</p>
<p><span id="more-683"></span></p>
<h2>Getting To The Root Of The Problem</h2>
<p>In our recent article about <a title="problem statement tips" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">writing good problem statements</a>, we pointed out a common mistake people make with problem statements &#8211; they confuse the manifestation of a problem with a problem.</p>
<blockquote><p>Problem manifestation [<em>noun</em>] &#8211; an example of a way in which a problem is exhibited, without appreciating the true nature of the problem. Ex: The problem manifestation is that the tires on my car are under-inflated. The problem is that my car is too expensive to maintain.</p>
<p>This distinction is relevant. The cost of operating the car is too high. That is the problem. It happens to be that one reason that the cost is too high is under-inflated tires. If you focus your energy on getting properly inflated tires, it will help (by improving fuel economy a little, and by reducing the frequency of tire replacement) with costs anecdotally. But you will not have solved the problem that costs are too high. Unless you get lucky. Costs can be high because the engine is inefficient or damaged, the aerodynamics of the car are bad, or any of a number of reasons. If you solve <em>the problem</em> by addressing a single <em>manifestation</em> of the problem, without understanding the whole problem, it is only because of luck.</p>
<p><cite><a title="problem manifestations" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">Your Problem Statement is The Problem</a></cite></p></blockquote>
<p>In the comments on that article, <em>The Demon </em>points out that it is not always easy to identify the right level of abstraction for your problem.  The cause and effect diagram makes it brilliantly simple not only to get to the root of the problem, but to communicate this cause-and-effect hierarchy of problem decomposition.</p>
<h2>Cause And Effect Diagram Example</h2>
<p>The cause and effect diagram is so visceral that the easiest way to communicate how it works is to show an example.  Here&#8217;s what the cause and effect diagram would look like for the example problem above, where the cost of operating the car is too high.</p>
<p><img src="http://sehlhorst.smugmug.com/photos/302635390_W2GiV-O.jpg" alt="excessive car operating costs" width="450" height="269" /></p>
<p>[<a 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>The main problem is that the cost of operation is too high.  This is the far-right, or fish-head part of the diagram (it is sometimes called a fish bone diagram).</p>
<p>The problem can be decomposed into three separate problems: spending too much on fuel, maintenance, and payments.  Each of those problems can be further decomposed.  Note that &#8220;under-inflated tires&#8221; appears twice &#8211; once as a cause of low miles per gallon (MPG) and once as an excess maintenance cost.</p>
<p>Alternately, you could recognize that spending too much on fuel could be due to lower fuel economy <em>or</em> excessively high prices.  You could then choose to decompose the problem slightly differently:</p>
<p><img src="http://sehlhorst.smugmug.com/photos/302640001_zmjrk-L.jpg" alt="alternate decomposition" width="350" height="175" /></p>
<p>[<a title="larger alternate decomposition of problem" href="http://sehlhorst.smugmug.com/photos/302640026_Au4VF-L.jpg">larger image</a>]</p>
<p>Either approach results in crystal clarity that <em>under-inflated tires</em> is one root cause of low fuel economy, which is one cause of excessive spending on fuel, which is one cause of excessive operating costs.  This visual approach helps significantly when trying to identify the right level of abstraction for expressing the problems in your problem statement.</p>
<h2>Problem Abstraction Is A Side Benefit</h2>
<p>The really cool part is that the help you get in finding the right level of abstraction for your problem is just icing on the cake.  [Ed: No jokes about fish-bone cake.  Ick!]</p>
<p>The real benefit comes in <a title="communicating with stakeholders" href="http://tynerblain.com/blog/2006/07/14/communicating-intent-with-stakeholders/">communicating</a> and <a title="completeness validation" href="http://tynerblain.com/blog/2006/07/06/requirement-completeness-validation-with-use-cases/">validating </a>the problem decomposition with your <a title="stakeholder problems" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">stakeholders</a>.</p>
<p>Someone questioned me once on <a title="writing passionate requirements" href="http://tynerblain.com/blog/2006/06/15/writing-passionate-requirements/">the value of writing <em>passionate</em> requirements</a>.  Show one of these to your team, and you&#8217;ll get enthusiastic, passionate responses.  You&#8217;ll get kudos from the business for demonstrating that you understand their needs.  You&#8217;ll get praise from the implementation team for providing them with context.</p>
<h2>Using Visio To Create A Cause And Effect Diagram</h2>
<p>Creating a cause and effect diagram in Microsoft Visio is really easy, there&#8217;s a built in template, and it&#8217;s a good one.  Create a new drawing and select the &#8220;Cause and Effect Diagram Shapes&#8221; template (under &#8220;Business Process&#8221;):</p>
<p><img src="http://sehlhorst.smugmug.com/photos/302607395_Bhv3f-L.jpg" alt="template selection in visio" width="444" height="189" /></p>
<p>Visio will create a new drawing with a blank cause and effect diagram set up for you:</p>
<p><img src="http://sehlhorst.smugmug.com/photos/302609064_ofhkB-L.jpg" alt="blank fish bone diagram" width="450" height="268" /></p>
<p>Fill in the boxes with the large problems.  To get to the next level of detail (such as &#8220;Fuel Economy is Too low&#8221; in the last example), select the &#8220;Primary Cause&#8221; shape and drag it onto the diagram.  Attach the arrowhead to one of the branches (the fish &#8220;ribs&#8221;) and start typing.  For once, Visio&#8217;s default layout is where you want it.</p>
<p><img src="http://sehlhorst.smugmug.com/photos/302649129_DwfMD-L.jpg" alt="primary cause visio shape" width="51" height="56" /></p>
<p>To get a secondary cause shape (such as &#8220;Bad Aerodynamics&#8221; in the last example), select the &#8220;Secondary Cause&#8221; shape and drag it onto the diagram.  Attach the arrowhead to the &#8220;primary cause&#8221; arrow you just created.</p>
<p><img src="http://sehlhorst.smugmug.com/photos/302649096_8QNyS-L.jpg" alt="secondary cause shape in visio" width="57" height="60" /></p>
<h2>Conclusion</h2>
<p>You already have a <a title="problem statement importance" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">good justification for defining problems</a> at the right level of abstraction.  Now you know how to easily create a cause and effect diagram to find the right problem definition.  As a bonus, communicating with stakeholders just got a lot easier &#8211; include this in your BRD.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Defining+Problems+With+Cause+And+Effect+Diagrams+http://bit.ly/2LD3Xm+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/05/27/cause-and-effect-diagrams/&amp;t=Defining+Problems+With+Cause+And+Effect+Diagrams" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 5</title>
		<link>http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/</link>
		<comments>http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 03:16:20 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/</guid>
		<description><![CDATA[
In this article, we build on our ability to represent straight forward business relationships in UML class diagrams.  These relationships describe how two objects are related to each other.  Representing relationships in class diagrams helps us to better understand the domain and helps us to uncover hidden requirements.  Occasionally, we have to [...]]]></description>
			<content:encoded><![CDATA[<p><img title="digging" alt="digging" src="http://www.smugmug.com/photos/267929036_P8Scw-L.jpg" /></p>
<p>In this article, we build on our ability to represent straight forward business relationships in UML class diagrams.  These relationships describe how two objects are related to each other.  Representing relationships in class diagrams helps us to better understand the domain and helps us to uncover hidden requirements.  Occasionally, we have to deal with more complex relationships that involve more than two objects to properly describe.  This does not happen as frequently, but when it does, our modeling efforts are more likely to uncover overlooked requirements.  In this article we learn how to describe relationships that involve more than two objects.</p>
<p><span id="more-650"></span></p>
<h2>Catching Up On UML Class Diagrams</h2>
<p>If you navigated to this page first, it is the fifth in a series introducing UML Class Diagrams for requirements elicitation.</p>
<ol>
<li><a title="Representing business concepts with uml class diagrams" href="http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/">Uncovering Requirements With UML Class Diagrams Part 1</a>: Discusses how to represent objects and entities from a business perspective.</li>
<li><a title="simple relationships in uml class diagrams" href="http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/">Uncovering Requirements With UML Class Diagrams Part 2</a>: Discusses simple relationships between objects or entities.</li>
<li><a title="using class diagrams for aggregation and compositing" href="http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/">Uncovering Requirements With UML Class Diagrams Part 3</a>: Discusses combining objects into collections and concepts.</li>
<li><a title="inheritance in class diagrams" href="http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/">Uncovering Requirements With UML Class Diagrams Part 4</a>: Defines generalization (inheritance) and how to use it.</li>
<li>Uncovering Requirements With UML Class Diagrams Part 5: This article</li>
</ol>
<p>Jump back to the other articles and get up to speed if you need. We’ll wait for you here. As a reminder, in this series, we’re specifically focusing on using UML class diagrams for uncovering requirements &#8211; as part of analysis, not design. We’re talking about what the business needs, not how the solution will work.</p>
<h2>Understanding Details <em>About</em> The Relationship</h2>
<p>One reason you may want to deal with more than two objects is obvious only after you change your way of thinking.  So far, you&#8217;ve been thinking about objects (classes) and relationships (associations).  Sometimes, when you need to understand the details of the relationship, you should think about the relationship <em>as an</em> object.  It is both a relationship AND an object.  And you draw this with an association class.  We&#8217;ll walk through an example that illustrates the idea clearly, then we&#8217;ll look at the steps needed to create a relationship that is also an object.</p>
<p>Consider that you are gathering requirements to support software for tracking court cases &#8211; perhaps a <a title="Definition of Mashup" href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)">mashup</a> site that combines the latest public record lawsuits with entries from <a title="LinkedIn" href="http://www.linkedin.com/">LinkedIn</a> (<a title="Scott Sehlhorst Profile" href="http://www.linkedin.com/in/sehlhorst">my profile</a>) and <a title="directory of companies" href="http://www.crunchbase.com/">Crunchbase</a>.</p>
<p><img title="linkedin" alt="linkedin" src="http://www.smugmug.com/photos/267958853_EhiJs-L.jpg" /></p>
<p><img title="crunchbase" alt="crunchbase" src="http://www.smugmug.com/photos/267958858_5AfiX-L.jpg" /></p>
<p>As part of your requirements gathering, you need to understand how these court cases work &#8211; so you start with a class diagram.</p>
<p>First &#8211; identify the main players in the lawsuits:</p>
<p><img title="litigants" alt="litigants" src="http://www.smugmug.com/photos/267935482_B2BHB-L.gif" /></p>
<p>Both a plaintiff and a defendant are litigants, as they are involved in lawsuits.</p>
<p><img alt="uml class diagram of suing" title="uml class diagram of suing" src="http://www.smugmug.com/photos/267935487_mMND6-L.gif" /></p>
<p>That represents a simple relationship.  A plaintiff sues one or more defendants.  When you show this diagram to one of your stakeholders, she likes that you captured that one plaintiff can sue more than one defendants.  She also likes that you can determine &#8220;who is the plaintiff suing&#8221; as well as &#8220;who is suing a given defendant.&#8221;</p>
<p>You point out one small problem &#8211; it is not clear if the plaintiff can only sue multiple defendants one-at-a-time, or if the plaintiff can sue multiple defendants in the same lawsuit.  You get the answer (multiple defendants can be sued at the same time), and as you start to scratch your head about how to represent it, your stakeholder interrupts (they do that):</p>
<p>&#8220;We need to be able to show lawsuits with a &#8220;most recent&#8221; view, and a &#8220;largest&#8221; (in dollar amount) view on the main page of the site!&#8221;  You realize that your diagram doesn&#8217;t work, and you make a note to yourself about the multiple-defendants issue.<br />
You need a way to capture information <em>about the suit</em>.  Suddenly, instead of a verb (sues), you need a noun (suit).  You need to reason <em>about</em> the relationship.  So you update your class diagram.</p>
<p><img alt="lawsuit" title="lawsuit" src="http://www.smugmug.com/photos/267935499_Uc4oJ-L.gif" /></p>
<p>Your updated diagram now shows that a single plaintiff, <em>in the context of a single suit</em>, can sue multiple defendants.  You also capture that you need to know the trial date and the dollar amount <em>of the suit</em>.  You erase that note to yourself, because your diagram now clearly indicates that one lawsuit involves multiple defendants.  You make another note to yourself that it is not clear if a plaintiff can be involved in more than one suit with the same defendants (he can).  You&#8217;ll deal with that later.</p>
<p>What you&#8217;ve drawn is something (the suit) that is both a relationship <em>and</em> an object.  In UML class diagrams, this is called an association class.</p>
<h2>Creating An Association Class in a Visio UML Class Diagram</h2>
<p>To create an association class, you use the <em>Association Class</em> shape in the Visio UML Static Structure stencil.</p>
<p><img title="association class visio shape" alt="association class visio shape" src="http://www.smugmug.com/photos/267935473_ozEC8-L.jpg" /></p>
<p>Drag the association class onto the page.</p>
<p><img title="default visio uml association class" alt="default visio uml association class" src="http://www.smugmug.com/photos/267947206_E9Bpw-L.gif" /><br />
By now, you realize that you need to suppress the <em>end names</em> in the display.  Right click on the shape and select &#8220;Shape Display Options&#8230;&#8221;:</p>
<p><img title="shape display options menu" alt="shape display options menu" src="http://www.smugmug.com/photos/264377116_QZicY-L.jpg" /></p>
<p>And disable the display of the end names:</p>
<p><img title="shape display options dialog" alt="shape display options dialog" src="http://www.smugmug.com/photos/267935492_4Q7cg-L.jpg" /></p>
<p>Now your shape will look like this:</p>
<p><img title="updated uml association class" alt="updated uml association class" src="http://www.smugmug.com/photos/267935477_ReNwJ-L.gif" /></p>
<p>You can manipulate the shape and its placement in two different ways.  You can select and drag either line end (to connect to another shape in the diagram)</p>
<p><img title="dragging line ends" alt="dragging line ends" src="http://www.smugmug.com/photos/267948569_p4gup-L.jpg" /></p>
<p>Or you can drag the &#8220;class&#8221; portion (the box) of the shape to wherever you want to place it.  [Note: When you drag the class, it <em>looks like</em> you are disconnecting the line from the shapes and messing everything up.  It is not happening.  When you release the mouse button, the class will be where you put it, and the line will still be where it was before.]  There is a dashed-line that connects the class (the box) to the association (the line).  Visio automatically updates that for you &#8211; you never have to worry about it.  In fact, if you don&#8217;t like it where it is, you can&#8217;t do anything about it either.</p>
<p>You could use the rotate-handle (the green circle on top) to rotate the box, but please don&#8217;t.  Class diagrams, by convention, are drawn with everything aligned with the page.  To get the line on top, just drag the line ends above the shape (or drag the shape below the line ends).</p>
<p>You use the same rules for showing directions with an association class that you do with a regular association.  If the business needs to think in one direction &#8211; &#8220;Who has the plaintiff sued?&#8221; then show that arrow.  If the business wants to think in the other direction &#8211; &#8220;Who has sued a particular defendant?&#8221; then show the opposite arrow too.</p>
<h2>Even More Complex Relationships</h2>
<p>The cool shape above lets you draw a three-way relationship.  It is most handy when you need to understand something about the relationship itself &#8211; treating the relationship as a noun instead of a verb.  You can create relationships in UML class diagrams that involve more than three objects.  These are called <em>N-Ary Associations</em>.  The &#8220;N-Ary&#8221; part is geek-speak for &#8220;binary, trinary, quaternary, etc&#8221; &#8211; any number is valid.</p>
<p>Earlier, we glossed over one question &#8211; &#8220;Can a single plaintiff, related to multiple defendants in the context of a single suit, also be related to those defendants by another suit?&#8221;  You can use an n-ary association to depict this.</p>
<p>In the Visio UML Static Structure stencil, select the <em>N-Ary Link</em> shape.</p>
<p><img alt="visio uml class diagram n-ary shape" title="visio uml class diagram n-ary shape" src="http://www.smugmug.com/photos/267966421_8kVwQ-L.jpg" /></p>
<p>Drag it onto the page</p>
<p><img alt="n-ary shape default" title="n-ary shape default" src="http://www.smugmug.com/photos/267965465_da3Xh-L.jpg" /></p>
<p>It looks a bit like a decision diamond from a flow chart, but with handles.  Drag it to where you want it to be in your diagram and then start connecting the line ends to the related classes.</p>
<p><img alt="connecting uml classes with an n-ary link" title="connecting uml classes with an n-ary link" src="http://www.smugmug.com/photos/267965454_ycQBB-L.jpg" /></p>
<p>After you&#8217;ve connected the ends (or before, but after is easier), double click on the shape to bring up the properties dialog.</p>
<p><img alt="visio uml n-ary link properties dialog" title="visio uml n-ary link properties dialog" src="http://www.smugmug.com/photos/267965473_5e44a-L.jpg" /></p>
<p>You&#8217;ll see three &#8220;Link Ends&#8221; &#8211; just rename them to show the multiplicity of the connections.  You will end up with a final diagram that shows:</p>
<p><img title="final lawsuit relationship" alt="final lawsuit relationship" src="http://www.smugmug.com/photos/267965460_4yVYd-L.gif" /></p>
<p>One plaintiff can sue one or more defendants in one or more suits.  You could (and I will) argue that this is even more ambiguous than the previous diagram.</p>
<ul>
<li>Who does the suing?  Is it the plaintiff, the defendant, or the suit itself?</li>
<li>Are they even suing?  Perhaps the relationship is just &#8220;they are all in the same room at the same time.&#8221;</li>
<li>When a plaintiff sues multiple defendants, is it one defendant per suit, with multiple suits?  Can it be?  Must it be?</li>
</ul>
<p>Personally, I never use an n-ary association when modeling complex relationships.  I much prefer the association class.</p>
<h2>A Simpler But Busier Alternative UML Class Diagram</h2>
<p>You never <em>have to</em> use an association class.  You can always represent the situation with three classes and two associations as the following diagram shows:</p>
<p><img title="alternate uml class diagram associations" alt="alternate uml class diagram associations" src="http://www.smugmug.com/photos/267977294_63Mxk-L.gif" /></p>
<p>Instead of an association class, you create a single class (suit) that represents the noun, and you break up the single association (suing) into two association (attacks with, defends against).  In some ways, this is more precise than using an association class.  You can tell from the diagram above that</p>
<ul>
<li>A single plaintiff attacks with one or more lawsuits.</li>
<li>One or more defendants defend against a single lawsuit.  Therefore, there could be two suits between the same plaintiff and the same defendants at the same time.</li>
</ul>
<p>What you lose is a notion that the suit <em>establishes the context of the relationship</em> between the plaintiff and the defendant(s).  Ultimately it is a judgment call about which form to use (the association class or the normal class with two associations).  If understanding the specific multiplicity data is important, you should use the two-association diagram.  If it is not, I personally feel that the association class provides clarifying context.</p>
<h2>Next Up</h2>
<p>In the first five parts of this series we’ve covered</p>
<ul>
<li>Using classes to represent business objects and entities.</li>
<li>Using simple associations (relationships) to demonstrate how objects are dependent or how they relate to one another.</li>
<li>Using composition and aggregation to show how objects are treated when grouped together.</li>
<li>Using generalization and inheritance hierarchies to show how similar, related objects can behave differently.</li>
<li>Using association classes and n-ary associations to express more complex relationships.</li>
</ul>
<p>If you understand all of these concepts, you are ready to create UML class diagrams of the business domain and concepts.  You are ready to use these tools to uncover otherwise hidden requirements.  If you want to study some of the more arcane details around UML class diagrams, you should be ready to read Scott Ambler&#8217;s articles.</p>
<ul>
<li><a title="uml class diagrams" href="http://www.agilemodeling.com/artifacts/classDiagram.htm">UML 2 Class Diagrams</a> &#8211; an explanation, in detail, of how and what and why to draw things a particular way</li>
<li><a title="styling your class diagrams" href="http://www.agilemodeling.com/style/classDiagram.htm">UML 2 Class Diagram Guidelines</a> &#8211; advice on how to make your diagrams consumable and appealing</li>
</ul>
<p>Just keep in mind that Scott jumps right into complex topics (which you are now ready for), and also includes tips and advice that are only relevant when creating class diagrams of implementation designs.  Just filter that stuff out.  Or come up with a way to leverage those details to the modeling of business ideas, and share them here.</p>
<p>Thanks for following along this far, and if you have any questions or would like to see us cover anything else about using UML class diagrams for uncovering requirements, add a comment below.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+5+http://bit.ly/167eF2+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/03/19/requirements-class-diagrams-5/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+5" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 4</title>
		<link>http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/</link>
		<comments>http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 02:00:59 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/</guid>
		<description><![CDATA[
The hardest part of gathering requirements effectively is uncovering the requirements that people don&#8217;t immediately tell you.  You have to ask the right questions.  And one of the best ways to find the right questions to build a class diagram of the business domain.  This article continues our introduction to class diagrams.

Catching [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="dozer" title="dozer" src="http://www.smugmug.com/photos/266136527_CRPmU-L.jpg" /></p>
<p>The hardest part of gathering requirements <em>effectively</em> is uncovering the requirements that people don&#8217;t immediately tell you.  You have to ask the right questions.  And one of the best ways to find the right questions to build a class diagram of the business domain.  This article continues our introduction to class diagrams.</p>
<p><span id="more-649"></span></p>
<h2>Catching Up on UML Class Diagrams</h2>
<p>If you’ve found this article first, there are three that came before it.</p>
<ol>
<li><a title="Representing business concepts with uml class diagrams" href="http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/">Uncovering Requirements With UML Class Diagrams Part 1</a>: Discusses how to represent objects and entities from a business perspective.</li>
<li><a title="simple relationships in uml class diagrams" href="http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/">Uncovering Requirements With UML Class Diagrams Part 2</a>: Discusses simple relationships between objects or entities.</li>
<li><a title="using class diagrams for aggregation and compositing" href="http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/">Uncovering Requirements With UML Class Diagrams Part 3</a>: Discusses combining objects into collections and concepts.</li>
<li>Uncovering Requirements With UML Class Diagrams Part 4: This article.</li>
</ol>
<p>So jump back to the other articles and get up to speed. We’ll wait for you here. As a reminder, in this series, we’re specifically focusing on using UML class diagrams for uncovering requirements &#8211; as part of analysis, not design. We’re talking about what the business needs, not how the solution will work.</p>
<h2>Generalization: A Dog <em>Is A</em> Mammal</h2>
<p>We&#8217;ve looked at objects and relationships between them.  We&#8217;ve looked at the special association relationships that give us aggregation and composition.  Generalization is another form of relationship, but not one that tells us how different objects interact &#8211; one that helps us better describe objects.  We could talk about a dog, and create an object that represents a dog.  But what if we also wanted to talk about a horse?  They have some things in common, because they are both mammals.  Generalization allows us to talk about mammals too.  That&#8217;s fine, but let&#8217;s use a business example instead of a classroom example.</p>
<p>The key to this generalization relationship is to think about the phrase &#8220;is a.&#8221;  A dog <em>is a</em> mammal.  Don&#8217;t confuse this with combining objects into an aggregation.  A pack <em>has a</em> bunch of dogs in it.  A zoo <em>has a</em> bunch of mammals (and other animals) in it.  But a dog is not a specialized pack.  It is a specialized mammal.</p>
<p><strong>Remember <em>&#8220;&#8230;is a</em>&#8230;&#8221;</strong></p>
<p>This relationship carries special meaning &#8211; all things (characteristics, behaviors, etc) that are true about the general object are true about the specialized object.  But all things about the specialized object are not necessarily true about the general object.</p>
<ul>
<li>All mammals have hair, therefore all dogs have hair.</li>
<li>All mammals have live babies (they do not eggs), therefore all dogs have live babies (puppies).</li>
<li>All dogs are pack animals, but all mammals are not (elephants are, but shrews are not).</li>
</ul>
<p>Technical folks usually call this <em>inheritance</em> &#8211; the specialized object <em>inherits</em> all of the properties and behavior of the generalized object.  <em>Inherit </em>is almost as good of a word to use as <em>generalizes</em>.  Where <em>inheritance </em>really helps as a term is it allows us to think in terms of <em>parents and children</em> objects.  The mammal is a <em>parent</em> and the dog is a <em>child</em> of mammal.  The terms <em>parent</em> and <em>child </em>make it much less cumbersome to talk about generalization relationships.</p>
<h2>Understanding Insurance Policies With Generalization</h2>
<p>Consider that you&#8217;re working on a project for a life insurance company.  In your first <a title="interviewing techniques" href="http://tynerblain.com/blog/2006/01/15/how-to-interview-when-gathering-requirements/">conversation with a subject matter expert</a>, you hear five different terms for describing insurance policies.  At a convenient pause, you stop the interview, walk over to a white board, and draw <a title="drawing uml class diagram objects" href="http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/">class diagram objects</a> for each of the five items.</p>
<p><img title="insurance policies in disarray" alt="insurance policies in disarray" src="http://www.smugmug.com/photos/266357139_mBtpR-L.gif" /></p>
<p>You ask your expert how all these objects are related to each other.  She explains that all life insurance policies are either term policies (they last for a fixed term of time) or permanent policies (they last for as long as the premiums are paid).</p>
<p>You recognize this as a <em>generalization</em> relationship.</p>
<ul>
<li>Every Term Policy <em>is a</em> Life Insurance Policy</li>
<li>Every Permanent Policy <em>is a</em> Life Insurance Policy</li>
</ul>
<p>Your SME also informs you that permanent policies, as a form of investment, are always one of two special types &#8211; whole life policies and variable insurance policies.  Whole life policies have a fixed return for a fixed premium.  Variable policies invest your premium in market securities, and the amount of money available at the time of payment depends upon the performance of the policy.  More <em>generalization</em> relationships.</p>
<ul>
<li>Every Whole Life Policy <em>is a</em> Permanent Policy</li>
<li>Every  Variable Insurance Policy <em>is a</em> Permanent Policy*</li>
</ul>
<p>[*As far as I know.  If there is such a thing as a variable term life insurance policy, my apologies - just assume that your company does not sell one.]</p>
<p>You draw the generalization relationships on the white board, and you move forward in eliciting requirements.  This drawing is known as a <em>hierarchy</em>.</p>
<p><img alt="insurance policy hierarchy" title="insurance policy hierarchy" src="http://www.smugmug.com/photos/266357144_xfmde-L.gif" /></p>
<h2>Drawing Generalization Relationships in Visio</h2>
<p>You use the <em>generalization</em> shape in visio to create generalization (inheritance) relationships between classes in your class diagram.</p>
<p><img alt="generalization shape in static structure visio stencil" title="generalization shape in static structure visio stencil" src="http://www.smugmug.com/photos/266357130_4NdiY-L.jpg" /></p>
<p>As you drag it onto the page, it looks like the following:</p>
<p><img alt="dragging inheritance arrow onto visio page" title="dragging inheritance arrow onto visio page" src="http://www.smugmug.com/photos/266357135_xAxgF-L.jpg" /></p>
<p>The shape is an arrow with a closed (but not filled) arrowhead on one end.  You connect that arrowhead to the <em>parent</em> class &#8211; the more-general of the two.  The tail is connected to the <em>child</em> class &#8211; the more-specific of the two.</p>
<p><img alt="showing a single inheritance relationship in a uml class diagram" title="showing a single inheritance relationship in a uml class diagram" src="http://www.smugmug.com/photos/266357143_Qf4Lx-L.gif" /></p>
<p>Once you draw all the relationships, your Visio class diagram will look like the following:</p>
<p><img alt="Insurance policies in an inheritance relationship" title="Insurance policies in an inheritance relationship" src="http://www.smugmug.com/photos/266357144_xfmde-L.gif" /></p>
<p>Now you&#8217;re prepared to understand the other information your subject matter experts are sharing, in the context by which the business is describing their requirements.</p>
<p>This hierarchy makes sense, but it seems to be completely different from all the other class diagram stuff we&#8217;ve done.  How can you combine these different views?  It is the combination of them that really brings out the value.</p>
<h2>Relationships, Classes, and Inheritance</h2>
<p>The first thing to realize is that <a title="class diagram associations" href="http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/">association relationships</a>, <a title="composition and aggregation associations within uml class diagrams" href="http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/">composition relationships</a>, and inheritance relationships can all happily co-exist within the same UML class diagram.  In fact, much of the insight you gain into uncovering requirements only comes when you combine these different analyses within a diagram.</p>
<p>The structure we looked at above provides a good description of how a company manages the policies that they write.  What you are likely to want to document are requirements around selling those policies.  Each time a policy is sold, an <em>agreement</em> is created.  That agreement is a copy of the policy sold (at the time of selling it), with the insured person&#8217;s name filled in.  You can imagine the policy to be a form with blanks that need to be filled in.  Each time a policy is sold, someone makes a copy of the &#8220;official&#8221; policy, fills in the blanks &#8211; name of insured, policy dates, etc &#8211; and then it becomes an agreement.</p>
<p>Introducing the term <em>agreement</em> allows the business to treat the two ideas separately.  A policy defines the agreements that can be sold at any given time.  An agreement is one policy, as sold to an insured person (customer).</p>
<p><img alt="agreement small" title="agreement small" src="http://www.smugmug.com/photos/266462111_6J2c7-S.gif" /> [<a title="larger policy diagram" href="http://www.smugmug.com/photos/266462111_6J2c7-O.gif">click for larger diagram</a></p>
<p>As you can see from the diagram, we have the same hierarchy for describing insurance policies.  We've added some other objects and relationships.</p>
<p><strong>Objects</strong></p>
<ul>
<li>Agreement.  A policy written by an agent for an insured person.  The agreement is written in a specific state.</li>
<li>Agent.  An agent is someone who sells insurance policies (agreements).  The agent lives in a specific state.</li>
<li>Insured Person.  Someone who purchases an insurance policy (agreement).  The person lives in a specific state.</li>
<li>Insurance License.  An official document that allows someone to sell policies in a specific state for a period of time.</li>
<li>NASD License.  A special license from the National Association of Securities Dealers that allows someone to sell variable insurance policies.</li>
</ul>
<p><strong>Relationships</strong></p>
<ul>
<li>A life insurance policy <em>is used as a template for an</em> agreement.</li>
<li>An agreement <em>is written by an</em> agent.</li>
<li>An agreement <em>is held by </em>an insured person</li>
<li>An agent <em>holds one or more</em> insurance licenses.</li>
</ul>
<p>From the diagram, we can understand that an agent sells an agreement to an insured person.  That agreement is based on a life insurance policy.  The agent holds at least one license to sell insurance.</p>
<p>Notice the relationship between the <em>agreement </em>class and the<em> life insurance policy</em> class.  The life insurance policy is at the top of an inheritance hierarchy.  Each other type of insurance policy (term, whole life, etc) is just a specialization of life insurance policy.  The diagram depicts that the agreement can be one of any of the different types of insurance policy.  And therefore, an agent can sell any of the types, and an insured person can hold an agreement of any of the types of insurance policy.</p>
<p>When reviewing these relationships, you discover that this is an <em>overly</em> simplified representation.  You capture the additional information and update your diagram.</p>
<h2>More Complex Class Diagram</h2>
<p>As part of reviewing the diagram, you discover that <em>variable</em> insurance policies are treated very differently than other insurance policies.</p>
<ul>
<li>An agent must have a different type of license (an NASD) license to sell variable insurance.  Because of this, the business treats these agents as being special - they are called "Broker / Agents" and are subject to many different internal policies and procedures.  Some of those policies represent enforcement of legal regulations, and others are internal policies.</li>
<li>A broker / agent can sell both variable and fixed (non-variable) insurance policies.</li>
<li>A variable policy is a combination of a fixed policy and an investment.  As such, the business thinks about those customers as <em>investors</em>, and not just <em>insured people</em>.  This distinction is really only relevant to sales people and marketing - who will use different approaches to sell to people who want investments.</li>
</ul>
<p>You update your class diagram to look like the following:</p>
<p><img title="variable insurance small" alt="variable insurance small" src="http://www.smugmug.com/photos/266480800_DJPsu-S.gif" /> [<a title="larger complex diagram" href="http://www.smugmug.com/photos/266480800_DJPsu-O.gif">click for larger diagram</a>]</p>
<p>This diagram is much more complicated.</p>
<ul>
<li>We enhanced the hierarchy for insurance licenses to reflect that broker/agents need a different type of license (NASD license) to sell insurance.</li>
<li>An <em>insured person</em> holds a fixed agreement, where an <em>investor</em> holds a variable agreement.</li>
<li>An agent can only write a fixed agreement, where a broker/agent can write any type of agreement (fixed or variable).</li>
</ul>
<p>The diagram is  <em>almost</em> too complex to absorb within a UML tutorial.  If you were writing these requirements, and did not create a similar diagram, you would be in trouble.  In the best case, you would end up with an implementation that met all the requirements, but did not use a good implementation design (due to lack of context).  It is more likely that either you would miss some requirements, or your implementation or test team would miss some.</p>
<p>The diagrams that have had the most impact, in our experience, are diagrams that have a similar level of complexity.</p>
<h2>Next Up</h2>
<p>In the first four parts of this series we&#8217;ve covered</p>
<ul>
<li>Using classes to represent business objects and entities.</li>
<li>Using simple associations (relationships) to demonstrate how objects are dependent or how they relate to one another.</li>
<li>Using composition and aggregation to show how objects are treated when grouped together.</li>
<li>Using generalization and inheritance hierarchies to show how similar, related objects can behave differently.</li>
</ul>
<p>All of the tools you&#8217;ve learned so far deal with <em>binary</em> associations &#8211; an agent sells a policy, a book club reviews books.  In the next article, we will look at relationships that involve more than two classes.</p>
<p><a title="uml class diagram association classes and n-ary associations" href="http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/">Uncovering Requirements With UML Class Diagrams Part 5: Complex Relationships</a></p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+4+http://bit.ly/2VYFXp+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/03/17/requirements-class-diagrams-4/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+4" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 3</title>
		<link>http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/</link>
		<comments>http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 03:40:47 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/</guid>
		<description><![CDATA[
UML Class Diagrams are very effective at uncovering requirements.  They give us insight into how the business thinks about objects and their relationships.  And from that understanding, we think to ask questions we might otherwise overlook.  In this part of our series, we look at how to represent when one object is [...]]]></description>
			<content:encoded><![CDATA[<p><img title="digging" alt="digging" src="http://www.smugmug.com/photos/265493886_dXET4-L.jpg" /></p>
<p>UML Class Diagrams are very effective at uncovering requirements.  They give us insight into how the business thinks about objects and their relationships.  And from that understanding, we think to ask questions we might otherwise overlook.  In this part of our series, we look at how to represent when one object is made up of other objects.  The two types of relationships we explore are composition and aggregation.</p>
<p><span id="more-647"></span></p>
<h2>Catching Up on UML Class Diagrams</h2>
<p>If you&#8217;ve found this article first, there are two that came before it.</p>
<ol>
<li><a title="Representing business concepts with uml class diagrams" href="http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/">Uncovering Requirements With UML Class Diagrams Part 1</a>: Discusses how to represent objects and entities from a business perspective.</li>
<li><a title="simple relationships in uml class diagrams" href="http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/">Uncovering Requirements With UML Class Diagrams Part 2</a>: Discusses simple relationships between objects or entities.</li>
<li>Uncovering Requirements With UML Class Diagrams Part 3: This article.</li>
</ol>
<p>So jump back to the other articles and get up to speed.  We&#8217;ll wait for you here.  As a reminder, in this series, we&#8217;re specifically focusing on using UML class diagrams for uncovering requirements &#8211; as part of analysis, not design.  We&#8217;re talking about what the business needs, not how the solution will work.  UML class diagrams can be used for both, and most tutorials are written for<a title="scott ambler's technical tutorial" href="http://www.agilemodeling.com/artifacts/classDiagram.htm"> programmers doing design work</a>.  This one is written for people who work with requirements.</p>
<h2>Relationships of Combination</h2>
<p>When a collection of bananas are combined, we call them a bunch.  Crows exist in a murder, and lions in a pride.  Teams are made up of players.  It is a deck of cards.  An order is a collection of line items.  We have always had the notions of both individual items (or people) and combinations existing as an interesting entity.  Sometimes we treat them the same &#8211; you can eat a banana or a bunch.  You can feed a lion or a pride.  Sometimes, we deal with the combined entity.  You shuffle a deck, you fulfill an order.</p>
<p>Understanding this type of relationship can be very important to understanding what your customer (aka &#8220;the business&#8221;) needs.  You are describing the <em>mental model</em> of the business.  Business people think about fulfilling an order, not &#8220;fulfilling all of the items on the order.&#8221;  A user may want to archive the history (all the previous versions) of a file, or she may just want to keep the most recent version.  Thinking about these concepts helps you uncover the requirements.</p>
<p>There are two <a title="funny jargon video" href="http://tynerblain.com/blog/2006/02/15/jargon-gone-amuck/"><em>jargon</em></a> terms &#8211; aggregation and composition &#8211; that apply when we talk about multiple things as one combined thing.  They have precise meanings.</p>
<ul>
<li>Composition &#8211; when one item is <em>part of</em> another item, the relationship is composition.</li>
<li>Aggregation &#8211; when one item <em>can be included in</em> another item, the relationship is aggregation.</li>
</ul>
<p>If that doesn&#8217;t make sense, this &#8220;formal&#8221; distinction will really mess you up:</p>
<blockquote><p>Composition is a stronger form of aggregation where the whole and parts have coincident lifetimes, and it is very common for the whole to manage the lifecycle of its parts.</p>
<p><cite>Scott Ambler</cite></p></blockquote>
<p>Here are some examples that may simplify things:</p>
<h2>Composition</h2>
<ul>
<li>A building is composed of one or more rooms (a room is part of a building)</li>
<li>A plane is composed of a fuselage, one or more engines, and one or more wings (a wing is part of a plane)</li>
<li>An order is composed of one or more line items (a line item is part of an order)</li>
</ul>
<h2>Aggregation</h2>
<ul>
<li>A team includes more than one players</li>
<li>A library includes more than one books</li>
<li>A market includes one or more customers</li>
</ul>
<p>Ambler&#8217;s definition makes sense, when you think about these examples.  You could shut down a library without destroying the books &#8211; likewise, you could kick one of the players off a team and the team would still exist.  That&#8217;s what he means by <em>coincident lifetimes</em>.</p>
<h2>Drawing a Composition Relationship With Visio</h2>
<p>To draw a composition relationship in Visio, you use the <em>composition</em> shape from the UML Static Structure stencil.</p>
<p><img title="composition shape" alt="composition shape" src="http://www.smugmug.com/photos/265492984_eKQ9V-L.jpg" /></p>
<p>When you first drop this shape on the page to connect two classes, it looks like the following:</p>
<p><img title="an order is made up of line items" alt="an order is made up of line items" src="http://www.smugmug.com/photos/265492992_yKHGd-L.gif" /></p>
<p>There is a solid black diamond on one end (the first end) and nothing on the other end.  In UML, this is stating that an order is <em>composed of</em> line items.  By default, Visio shows the &#8220;end names&#8221; as it did with the association shape.  You can fix it the same way we did before.  Right click on the line and select <em>shape display options</em>.</p>
<p><img title="shape display options context menu item" alt="shape display options context menu item" src="http://www.smugmug.com/photos/264377116_QZicY-L.jpg" /></p>
<p>Then make the same modification we did before, to show the shape name and suppress the display of the &#8220;end names.&#8221;</p>
<p><img title="shape display options dialog" alt="shape display options dialog" src="http://www.smugmug.com/photos/264377118_7UN7a-L.jpg" /></p>
<p>Now you have the kind of display you want.  Note the check marks at the bottom of the dialog &#8211; you only have to make this change once per class diagram.  Unfortunately, Visio does not remember this change, so you have to do it once for every diagram (every new file, and every new tab within the same file).  Annoying.<br />
<img title="order to line item composition" alt="order to line item composition" src="http://www.smugmug.com/photos/265492996_dEy7k-L.gif" /></p>
<p>Double click on the line to update the information about <em>this</em> composition relationship.</p>
<p><img title="visio uml class diagram composition properties dialog" alt="visio uml class diagram composition properties dialog" src="http://www.smugmug.com/photos/265492980_2zGKm-L.jpg" /></p>
<p>You will end up with the following (we re-arranged it to make it easier to read):</p>
<p><img title="completed composition diagram" alt="completed composition diagram" src="http://www.smugmug.com/photos/265492999_YaJFT-L.gif" /></p>
<h2>Drawing an Aggregation Relationship With Visio</h2>
<p>Drawing an aggregation relationship is almost the same as a composition relationship with Visio &#8211; it just requires an additional step.</p>
<p><img title="book club" alt="book club" src="http://www.smugmug.com/photos/265492967_QbH5q-L.gif" /></p>
<p>In this example, a book club reviews books.  You want to show that the book club <em>includes</em> members.  Note &#8211; members can come and go without causing the book club to be disbanded.  You can think of aggregation as <em>membership</em> in a combined entity.</p>
<p>First, use the composition shape again (the same as above), and update the properties as we just did.  You will see</p>
<p><img title="composition as aggregation" alt="composition as aggregation" src="http://www.smugmug.com/photos/265492976_D5MHN-L.gif" /></p>
<p>The Visio stencil does not include a special <em>aggregation</em> shape, so we will cheat by changing the formatting of the <em>composition</em> shape.  Select (in the menu at the top of the window) format > line&#8230;</p>
<p><img title="format line menu item" alt="format line menu item" src="http://www.smugmug.com/photos/265492988_24LVC-L.jpg" /></p>
<p>And in the dialog, you will change the display of the &#8220;Begin&#8221; end-point.</p>
<p><img title="aggregation" alt="aggregation" src="http://www.smugmug.com/photos/265492981_qTAMs-L.jpg" /></p>
<p>Aggregation is represented in UML Class Diagrams with the same diamond-shape as composition.  The difference is that the shape is &#8220;empty&#8221; instead of being a solid black diamond.  Click &#8220;Apply&#8221; and &#8220;OK&#8221; and you end up with what you want:</p>
<p><img title="aggregation relationship for members in a book club" alt="aggregation relationship for members in a book club" src="http://www.smugmug.com/photos/265515915_CRatX-L.gif" /></p>
<p>Note: If you change the format of the composition line first, and then change the properties (&#8220;Joins&#8221; etc), Visio will reset the line end to be a solid diamond again.  It resets.  Annoying.  If you copy an aggregation line, the copy reverts to the solid diamond again too.  Very annoying.</p>
<h2>Next Up</h2>
<p>Up to this point, you&#8217;ve learned how to define classes (and attributes), simple relationships (A book club reviews books, and a member reads books), and combinations of items as compositions and aggregations (an order is composed of line items, and a book club aggregates members).</p>
<p>Next, we will cover hierarchies, usually thought of as &#8220;Is a&#8221; relationships.  A Sales Rep is an employee, and an employee is a person.</p>
<p><a title="inheritance in class diagrams" href="http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/">Uncovering Requirements With UML Class Diagrams Part 4</a>: Generalization (inheritance) and how to use it.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+3+http://bit.ly/41Djpk+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/03/13/requirements-class-diagrams-3/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+3" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 2</title>
		<link>http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/</link>
		<comments>http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 04:26:32 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>
		<category><![CDATA[visio]]></category>
		<category><![CDATA[visio uml]]></category>
		<category><![CDATA[visio uml stencil]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/</guid>
		<description><![CDATA[
We continue our exploration of UML Class Diagrams with this article that explores how to represent basic business relationships in a class diagram.  Drawing these relationships can dramatically clarify requirements documents.  Using a class diagram to supplement other requirements documents provides for a centralized reference that enables a shared understanding of the problem [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="front loader" title="front loader" src="http://sehlhorst.smugmug.com/photos/264358008_sQVyu-L-0.jpg" /></p>
<p>We continue our exploration of UML Class Diagrams with this article that explores how to represent basic business relationships in a class diagram.  Drawing these relationships can dramatically clarify requirements documents.  Using a class diagram to supplement <a title="requirements documents" href="http://tynerblain.com/blog/2006/01/20/document-proliferation/">other requirements documents</a> provides for a centralized reference that enables a <em>shared understanding</em> of the problem domain.  That <a title="writing unambiguous requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">understanding prevents mistakes</a> in interpreting requirements.</p>
<p><span id="more-646"></span></p>
<h2>Getting Up To Speed</h2>
<p>We started this <a title="Class diagrams" href="http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/">discussion of class diagrams</a> last week.  In it, we presented the notion of a class.  When <a title="stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">a stakeholder cares about</a> a concept, idea, or thing, we represent it as a class.</p>
<p><img alt="customer class" title="customer class" src="http://www.smugmug.com/photos/262849856_uMzVU-L.gif" /></p>
<p>The business cares about customers.  And customers have addresses and credit ratings.</p>
<h2>Classes and Attributes</h2>
<p>How do you know when something should be an attribute, and not another class?  In our example above, think about <em>Customer</em> and <em>Address</em> and <em>Credit Rating</em>.  One way to make a distinction is to say that if an attribute has other attributes, it should be a class.  A credit rating is just a number.  But an address is a compound object made up of multiple attributes.</p>
<p><img alt="customer address 1" title="customer address 1" src="http://www.smugmug.com/photos/264377102_ZH2j7-L.gif" /></p>
<p>An address can have multiple lines of street address information, as well as city, state, zip code and country information.  That is a good indicator that it is <em>likely to be</em> a class of its own.  If we were to represent an address as attributes of a customer, we would have to include each of the &#8220;sub attributes&#8221; as a separate attribute of customer.  That feels bad, from a design standpoint.</p>
<p>The distinction is one of design, but generally speaking, if the concept stands on its own, it should be its own class.  An address is <em>related to</em> the customer.  A credit rating is <em>a property of</em> a customer.</p>
<h2>Simple Relationships</h2>
<p>How do we show a relationship between a customer and an address?</p>
<p><img alt="customer lives at address" title="customer lives at address" src="http://www.smugmug.com/photos/264377128_e6uKa-L.gif" /></p>
<p>The customer receives bills at an address.  That is the relationship between the customer and the address.  The business wants to know where to send bills for the customer.  We&#8217;ll talk more about relationships in a bit.  First, we&#8217;ll cover the steps in visio for creating the relationship shown above.</p>
<h2>Showing Relationships With Visio&#8217;s UML Stencil</h2>
<p>The relationship shown above is called a <em>binary association</em>, because it shows the association between two classes.  There is an object (Visio calls it a &#8220;master shape&#8221;) in the Static Structure template for creating these, aptly named <em>binary association</em>.</p>
<p><img title="binary association master shape" alt="binary association master shape" src="http://www.smugmug.com/photos/264377105_RzEd8-L.jpg" /></p>
<p>Drag that onto the page, and connect the two classes for which you wish to show a relationship.</p>
<p><img title="binary association with end names" alt="binary association with end names" src="http://www.smugmug.com/photos/264377114_Nwh78-L.gif" /></p>
<p>The default display properties for the <em>binary association</em> shape cause the shape to display some weird information &#8211; called the &#8220;end names&#8221; of the relationship.  The shape also does not give us the arrowhead, or the name of the relationship, <em>Receives Bills At</em>.  Right click on the line and select &#8220;Shape Display Options&#8230;&#8221;</p>
<p><img title="shape display options context menu" alt="shape display options context menu" src="http://www.smugmug.com/photos/264377116_QZicY-L.jpg" /></p>
<p>Remember this, you will use the dialog that pops up a lot.</p>
<p><img title="uml shape display options dialog" alt="uml shape display options dialog" src="http://www.smugmug.com/photos/264377118_7UN7a-L.jpg" /></p>
<p>We want to do three things for now:</p>
<ol>
<li>Check &#8220;Name&#8221; so that the name of the relationship (Receives Bills At) will show up.</li>
<li>Un-check &#8220;First end name&#8221; so that it is hidden.</li>
<li>Un-check &#8220;Second end name&#8221; so that it is hidden too.</li>
</ol>
<p>Click OK, and the shape will have updated to look like the following:</p>
<p><img title="unnamed association" alt="unnamed association" src="http://www.smugmug.com/photos/264377121_YoYt9-L.gif" /></p>
<p>The name is defaulted (to &#8220;Association1&#8243;), and no arrowheads are showing up.  We also have two asterisks, an no &#8220;1.&#8221;  We need to update the shape&#8217;s properties (not <em>display</em> properties) to include that information.  Double click on the line and you will see the following dialog (Fill it out to match):</p>
<p><img title="shape properties" alt="shape properties" src="http://www.smugmug.com/photos/264377126_AYaEt-S.jpg" /> [<a title="full size association properties dialog" href="http://www.smugmug.com/photos/264377126_AYaEt-L.jpg">click for full size view</a>]</p>
<ul>
<li><strong>Name</strong>: Enter &#8220;Receives Bills At.&#8221; for the name.  Note &#8211; some people prefer mixed case or lower-case.  Any approach is fine, just <a title="writing requirements consistently" href="http://tynerblain.com/blog/2006/06/09/big-ten-rules-writing-consistent-requirements/">be consistent</a>. The name is the name <em>of the relationship</em> and it indicates the meaning of the relationship.</li>
<li><strong>Name Reading Direction</strong>: forward and backward will confuse you.  It confused me for years.  This is what determines where the small solid triangle shows up to indicate the direction of reading.  <em>Customer</em> Receives Bills At <em>Address</em>, instead of <em>Address </em>Receives Bills At <em>Customer</em>.  One day, I realized that this field only controls if the triangle shows up before or after the text.  With up-down relationships, I still get confused.  Use the standard of top-to-down is the same as left-to-right, and you&#8217;ll eventually get used to it.</li>
<li><strong>Association Ends</strong>:  This section shows the two ends as rows in a table &#8211; with five columns describing each end.  For now, we will only focus on the last two columns.  This is another area for confusion &#8211; the first row represents the top-left end of the line (when you drag it onto the page) and the second row represents the bottom-right end of the line.  You can move the ends of the line around after you place it on the page, and the rows in this table will maintain their original associations.  Try not to get frustrated when you get these backwards.  I still make that mistake all the time, after creating a few hundred diagrams over the course of a decade.  Think of the top-left end of the line as the &#8220;first&#8221; end, and the bottom-right as the &#8220;second.&#8221;  Then when you move it around, you might remember which is which.  If you get in the habit of attaching the line first to the &#8220;from&#8221; class, and then to the &#8220;to&#8221; class, you will start to get the hang of it.</li>
<li><strong>Multiplicity</strong>:  Multiplicity allows you to specify how many objects can be on either end of the relationship.  In our example, a customer can receive bills at only one address, but multiple customers could share the same address.  My stepdaughter and I each have iTunes accounts.  We are two separate customers, but we have the same address.  Since I attached the &#8220;first&#8221; end to the <em>Customer</em> class, there is an asterisk in the first row, and a &#8220;1&#8243; in the second row. [*See below for explanations]</li>
<li><strong>IsNavigable</strong>:  Either the UI designers for Visio expected all of their users to be Java programmers, or they ran out of space.  &#8220;IsNavigable&#8221; can be translated into &#8220;Should the arrow be shown on this end of the line?&#8221;  Since, as a business, we care about the address at which a customer receives bills, we show the arrow for the &#8220;second&#8221; end.  But we don&#8217;t anticipate (commonly) needing to determine all of the customers that receive bills at a particular address &#8211; so we don&#8217;t show the arrow in the opposite direction.</li>
</ul>
<h2>Types of Multiplicity</h2>
<p>There are a few different concepts that can be displayed for multiplicity.  Your developer co-workers and math geeks will call this cardinality.  That&#8217;s probably even the <em>better</em> term to use.  But since Visio chose <em>multiplicity</em>, so will we, at least for this article.<br />
<img alt="multiplicity" title="multiplicity" src="http://www.smugmug.com/photos/264401798_kq7X2-L.jpg" /></p>
<ul>
<li>1: Exactly one object of this type is involved in the relationship.  A customer has one billing address.</li>
<li>*: Any number of objects (or none at all) are involved in the relationship.  Any number of customers can receive bills at a given address.</li>
<li>0..1: Zero or one objects are involved in the relationship.  A driver may or may not have a drivers license.</li>
<li>0..*: Same as &#8220;*&#8221;</li>
<li>1..1: Same as &#8220;1&#8243;</li>
<li>1..*: Any number of objects (as long as there is at least one) may be involved in the relationship.  A shipment can include any number of items, and it must include at least one item.</li>
</ul>
<p>This brings us back to our original relationship example.</p>
<p><img title="customer billing address relationship" alt="customer billing address relationship" src="http://www.smugmug.com/photos/264377128_e6uKa-L.gif" /></p>
<p>The small class diagram above represents the following:</p>
<ul>
<li>A customer has a credit rating.</li>
<li>An address includes three fields for &#8220;street information&#8221;, city, state/province/county, zip or postal code, and country fields.</li>
<li>A customer receives bills at <strong>exactly one</strong> address.</li>
<li>Any number of customers (or none at all) can receive bills at any one address.</li>
</ul>
<h2>Simple Relationships Revisited</h2>
<p>With the mechanics of using Visio out of the way, we can show some examples of some other simple relationships.</p>
<p><img alt="sales rep and customer" title="sales rep and customer" src="http://www.smugmug.com/photos/264426683_VYTbZ-L.gif" /></p>
<ul>
<li>A sales rep sells products to any number of customers.</li>
<li>Any number of customers purchase products from a sales rep.</li>
</ul>
<p>Both examples above depict the same relationship, and either is acceptable.  What would be bad would be to use the passive voice and say &#8220;any number of customers are sold products by a sales rep.&#8221;  This is the same advice that applies <a title="writing good use case names" href="http://tynerblain.com/blog/2007/01/22/how-to-write-good-use-case-names/">when writing use case names &#8211; don&#8217;t use passive voice</a>.</p>
<p>There are opportunities to misread requirements when relying <em>solely</em> on UML.  Imagine we had a requirement that any customer always make purchases from a single sales rep.  The goal is to provide a sense of <em>relationship</em> for that customer.  Both of the diagrams above <em>technically</em> express that requirement.  If a customer could have more than one sales rep, we would show &#8220;1..*&#8221; instead of &#8220;1&#8243; for the multiplicity on the sales rep side of the relationship.</p>
<p>Someone reading the examples above could <em>reasonably</em> be unsure about the intended requirement.  Is there a single sales rep for a given transaction?  Is there a single sales rep for a given customer, regardless of the number of transactions?  Only the latter interpretation is <em>technically</em> accurate &#8211; but either is a <em>reasonable</em> interpretation.  <a title="daniel berry's home page" href="http://se.uwaterloo.ca/~dberry/">Professor Daniel Berry</a>, author of <a title="the ambiguity handbook" href="http://se.uwaterloo.ca/~dberry/handbook/ambiguityHandbook.pdf"><em>The Ambiguity Handbook</em></a> [The actual title is <em>From Contract Drafting to Software Specification: Linguistic Sources of Ambiguity, A Handbook</em>], explained in a lecture last year at the <a title="2007 ibrf" href="http://tynerblain.com/blog/2007/09/06/10th-ibrf/">2007 IBRF</a> that UML stands for <em>Undefined</em> Modeling Language.  This is a good example of that.</p>
<p>By including the diagram within, or as a reference from, a requirements document, you provide both the context and the graphical clarity needed to understand the intent.  Don&#8217;t rely solely on the diagram!</p>
<p><img title="a product has a price" alt="a product has a price" src="http://www.smugmug.com/photos/264426726_jJbE8-L.gif" /></p>
<p>A product has a price.  One product has one price.  This relationship is almost too simple, making it difficult to come up with a good name for the relationship.  &#8220;A product has a price of price&#8221; is awkward.</p>
<p><img title="product will be sold for price" alt="product will be sold for price" src="http://www.smugmug.com/photos/264435630_tY9Ws-L.gif" /></p>
<p>&#8220;A product will be sold for a price&#8221; is better.  If we were limited to &#8220;has a&#8221;, we could make an argument that the price should be an attribute.  But the price may have properties (like currency used), or may be calculated dynamically based on coupons or contracts.</p>
<p>Using <em>action verbs</em> will help with both understanding and elicitation.  If you are reviewing the diagram above with a stakeholder, you are not likely to get any discussion from &#8220;product has a price&#8221; &#8211; of course it does.  But if you show &#8220;product will be sold for a price&#8221; you will immediately trigger responses.  Especially if you ask &#8220;how do you know what price to sell the product for?&#8221;  Use active verbs with explicit meanings instead of &#8220;weasel words&#8221; like &#8220;has a.&#8221;</p>
<p><img title="multiple addresses" alt="multiple addresses" src="http://www.smugmug.com/photos/264426677_ecG4B-L.gif" /></p>
<p>This is a very clear way to indicate that from a business perspective, the customer has a billing address <em>and</em> a shipping address, and no reason to expect them to be the same.  If you have to worry about export compliance, you may add an &#8220;end use&#8221; address &#8211; the location where the product will ultimately be used.  Imagine how messy that would be if we had used attributes instead of classes!</p>
<p>As messy as that would be, this highlights why we use classes.  Think about some other business relationships we have not drawn.  Credit card authorization uses the billing address.  Taxes may be* calculated based upon the billing address or the shipping address.  Shipping charges would be based upon the shipping address. [*I believe that for physical goods, the shipping address is used, and for electronic downloads, the billing address is used.]<br />
There is no limit to the number of entities and relationships that can be represented in a class diagram.  As a guideline, <a title="target your writing for your audience" href="http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/">think about usability</a>.  Are you producing class diagrams as part of exploring specific areas of the business?  Are you making sure that a complex set of relationships do not get oversimplified?  Are you &#8220;boiling the ocean&#8221; with a giant encyclopedia of the business domain?  If you are &#8211; why?</p>
<h2>Summary So Far</h2>
<p>So far, we have discussed classes as a means to represent entities from a business perspective.  We&#8217;ve also introduced some simple relationships.  Those relationships show how pairs of entities interact or inter-relate.  We&#8217;ve shown how to make the relationships directional and bidirectional &#8211; depending on which way(s) the business needs to look at things.  And we&#8217;ve covered multiplicity &#8211; how many of each type of object are involved in the relationship.</p>
<p>There is still a fair amount of ground to cover between here and Scott Ambler&#8217;s comprehensive reference.  If any of the concepts so far are unclear, or if there&#8217;s something you want to make sure we cover &#8211; add a comment!</p>
<h2>Next Up</h2>
<p>In our next article on using UML Class Diagrams for unearthing requirements, we will look at more complex relationships.</p>
<p><a title="using class diagrams for aggregation and compositing" href="http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/">Uncovering Requirements With UML Class Diagrams Part 3</a>: Combining objects into collections and concepts.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+2+http://bit.ly/lK0CC+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/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/03/10/requirements-class-diagrams-2/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+2" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
