<?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; Use Cases</title>
	<atom:link href="http://tynerblain.com/blog/category/requirements/requirements-models/use-case/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Thu, 11 Mar 2010 17:11:00 +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>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>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>10</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>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>Cockburn Affirms: Use Cases Rule for Agile!</title>
		<link>http://tynerblain.com/blog/2008/02/18/cockburn-loves-agile-use-cases/</link>
		<comments>http://tynerblain.com/blog/2008/02/18/cockburn-loves-agile-use-cases/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 04:41:13 +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[Use Cases]]></category>
		<category><![CDATA[agile requirements]]></category>
		<category><![CDATA[agile use cases]]></category>
		<category><![CDATA[managing data]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/02/18/cockburn-loves-agile-use-cases/</guid>
		<description><![CDATA[
We&#8217;ve been promoting use cases as the right way to approach agile requirements, and in a recent article, Alistair Cockburn stresses the importance of use cases.  Over the last three years, he has found that teams that avoid use cases consistently run into the same three problems.  We defer, of course, to Alistair [...]]]></description>
			<content:encoded><![CDATA[<p><img title="chocolate chip cookie" alt="chocolate chip cookie" src="http://sehlhorst.smugmug.com/photos/256212211_RqQRg-L.jpg" /></p>
<p>We&#8217;ve been promoting use cases as the right way to approach agile requirements, and in a recent article, Alistair Cockburn stresses the importance of use cases.  Over the last three years, he has found that teams that avoid use cases consistently run into the same three problems.  We defer, of course, to Alistair as the expert.  But we&#8217;ve been independently promoting this practice too.  So today, we get a cookie!</p>
<p><span id="more-637"></span></p>
<h2>Alistair Promotes Use Cases for Agile Development</h2>
<p>First, a hat tip to <a title="portrait of a business analyst" href="http://bizvalu.blogspot.com/2008/02/dispensabilty-of-use-case.html">Rajeev Singh</a> for pointing us to Alistair&#8217;s <a title="cockburn still loves use cases!" href="http://alistair.cockburn.us/index.php/Why_I_still_use_use_cases">defense of use cases in agile projects</a>.  In discussing his findings from the last three years of talking to agile project teams, Alistair writes:</p>
<blockquote><p>I keep running across organizations suffering from three particular, real, painful, and expensive problems.</p>
<p>[...]</p>
<p>In particular, use cases fix those three problems.</p>
<p>I&#8217;ve been testing this out for the last 3 years – I walk in and ask, &#8220;On your agile project(s), do you by any chance suffer from any of these three things?&#8221; &#8230; and then list the three &#8230; Much stronger than even I expect, there <em>hasn&#8217;t been a single organization I asked these of that hasn&#8217;t said, &#8220;Oh, Yes, and How!&#8221; </em></p>
<p><cite><a title="use cases rule for agile" href="http://alistair.cockburn.us/index.php/Why_I_still_use_use_cases">Why I still use use cases, Alistair Cockburn</a></cite></p></blockquote>
<p>Alistair finds these problems both when teams replace use cases with user stories (or <a title="use scenarios" href="http://tynerblain.com/blog/2007/04/10/what-are-use-case-scenarios/">use scenarios</a>) and when they eliminate either approach and move to a feature-driven product backlog.*[See "<em>Scrum</em>" Section at the end of the article.]</p>
<p>Paraphrasing the three problems (&#8220;Without use cases, &#8230;&#8221;):</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>How do use cases address these problems?</p>
<h2>1. Gaining Context With Use Cases</h2>
<p>Even in agile projects, use cases are an enabling mechanism for companies to achieve goals.  An approach that uses <a title="explaining structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements</a> provides that context.</p>
<p><img alt="requirements structure" title="requirements structure" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" /></p>
<p>Each use case exists in the context of the goal.  A couple years ago we wrote about the <a title="The goals of writing use cases" href="http://tynerblain.com/blog/2006/06/23/the-8-goals-of-use-cases/">reasons for writing use cases</a>.  Those goals could easily be addressed with use scenarios and user stories.  The problems that Alistair articulates arise from choosing something <em>other than</em> use cases to meet those goals.</p>
<h2>2. Getting An Early Indication of Scope</h2>
<p>Politically, the largest problems in getting an agile project launched in a waterfall organization comes from mis-set expectations.  Setting expectations and thereby securing both funding and support for a project can be more important than execution.</p>
<p>If you don&#8217;t have the support of a sponsor, your project will fail.  If you have sponsorship and funding, your product could still fail.  Both are necessary, neither is sufficient.</p>
<p>To set expectations, you have to identify the scope of your project immediately.  Here&#8217;s an example of the <a title="scope and vision" href="http://tynerblain.com/blog/2007/04/18/apr-scope-and-vision/">scope definition for our nexus project</a> from last year.  Setting scope is as much about <a title="stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">managing stakeholders</a> and <a title="prioritizing stakeholder value" href="http://tynerblain.com/blog/2007/10/25/stakeholder-value-matrix/">prioritizing stakeholder objectives</a> as it is about controlling delivery time frames and schedules. [Tangent Warning: even if it means <a title="incomplete requirements - on purpose!" href="http://tynerblain.com/blog/2007/03/27/writing-incomplete-requirements/">delivering incomplete requirements</a>.]</p>
<p>The key is to get a <a title="starting use cases to gain a broad understanding" href="http://tynerblain.com/blog/2007/03/28/how-to-start-use-cases/">breadth-first overview of the scope</a>, and then a deep understanding as you iterate.</p>
<h2>3. Avoid Scope Creep With the Rigor of Use Cases</h2>
<p>As Alistair points out, this is hard to differentiate from &#8220;managing scope.&#8221;  The distinction is that the scope-definition issue is one of discovering functionality broadly, where this scope creep issue is one of understanding complexity sufficiently.</p>
<p>The <a title="use cases for agile development" href="http://tynerblain.com/blog/2007/04/02/agile-development-of-use-cases/">right approach to defining use cases for agile development</a> starts with a definition of scope.  Once you&#8217;ve defined the scope, you <a title="use case naming" href="http://tynerblain.com/blog/2007/01/22/how-to-write-good-use-case-names/">define the use case names</a>, then progressively prioritize and define the <a title="informal use cases" href="http://tynerblain.com/blog/2005/12/21/use-case-series-informal-use-case/">use cases in more detail</a>, in priority order, as you incorporate them into your <a title="how to use timeboxes" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">time-boxed project schedule</a>.  You also refactor your use cases, consolidating and defining <a title="subordinate use cases" href="http://tynerblain.com/blog/2006/11/27/subordinate-use-cases/">subordinate use cases</a> where appropriate, and defining extension use cases as needed.</p>
<h2>Scrum</h2>
<p>Scrum, as an organizational approach to agile does not preclude the use of use cases. Scrum projects commonly choose to use a feature-driven backlog.  We actually really like scrum as a mechanism for managing delivery.  But we feel that it works most effectively when <a title="time boxes for agile development" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">time boxing each iteration</a> specifically<a title="iterations based on use cases" href="http://tynerblain.com/blog/2005/12/22/communicating-a-delivery-schedule-with-use-cases/"> in terms of use cases</a>.  When using use cases as the quanta of your iteration backlog, you get all the benefits defined above, plus the benefits of Scrum as a delivery vehicle.</p>
<h2>Conclusion</h2>
<p>Use Cases Rule!  ["If it's <em>our</em> blog, then it's <em>our</em> pizza." - Mr. Hand from <a title="fast times wiki entry" href="http://en.wikipedia.org/wiki/Fast_Times_at_Ridgemont_High"><em>Fast Times at Ridgemont High</em></a>]</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Cockburn+Affirms%3A+Use+Cases+Rule+for+Agile%21+http://bit.ly/2Z0zY2+" 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/02/18/cockburn-loves-agile-use-cases/&amp;t=Cockburn+Affirms%3A+Use+Cases+Rule+for+Agile%21" 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/02/18/cockburn-loves-agile-use-cases/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Use Case Management is a Tough Balancing Act</title>
		<link>http://tynerblain.com/blog/2008/02/04/balancing-use-cases/</link>
		<comments>http://tynerblain.com/blog/2008/02/04/balancing-use-cases/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 05:19:33 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[business goals]]></category>
		<category><![CDATA[corporate goals]]></category>
		<category><![CDATA[end users]]></category>
		<category><![CDATA[goal directed use cases]]></category>
		<category><![CDATA[goal-driven use cases]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[personas]]></category>
		<category><![CDATA[principal stakeholders]]></category>
		<category><![CDATA[principle stakeholders]]></category>
		<category><![CDATA[structured requirements]]></category>
		<category><![CDATA[two tier]]></category>
		<category><![CDATA[two tier requirements]]></category>
		<category><![CDATA[two tier sales requirements]]></category>
		<category><![CDATA[two-tier business model]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/02/04/balancing-use-cases/</guid>
		<description><![CDATA[
Learning how to write use cases can be tough, but it is simple compared to the balancing act of determining which use cases to write and how to manage the expectations of all the stakeholders that are involved.  It can be a difficult balancing act to prioritize use cases to assure that you meet [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="balancing act" title="balancing act" src="http://www.smugmug.com/photos/250633145-L.jpg" /></p>
<p>Learning how to write use cases can be tough, but it is simple compared to the balancing act of determining which use cases to write and how to manage the expectations of all the stakeholders that are involved.  It can be a difficult balancing act to prioritize use cases to assure that you meet the goals of the business while satisfying the needs of the users.</p>
<p><span id="more-631"></span></p>
<h2>Goal Driven Use Cases</h2>
<p>In <a title="how structured requirements work" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">the world of structured requirements</a>, we apply an approach of top-down decomposition to determine what we need to build.</p>
<p><img alt="structured requirements" title="structured requirements" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" /></p>
<p>In an article stressing the importance of non-functional requirements,  we summarized the relationships from the above diagram as follows:</p>
<blockquote>
<ul>
<li>Goals are achieved by enabling use cases.</li>
<li>Goals drive non-functional requirements.</li>
<li>Use cases are enabled by <a title="Writing Functional Requirements to Support Use Cases" href="http://tynerblain.com/blog/2006/02/10/writing-functional-requirements-to-support-use-cases/">implementing functional requirements</a>.</li>
<li><a title="Use Case Series Introduction" href="http://tynerblain.com/blog/2005/12/18/use-case-series-introduction/">Use cases</a> influence non-functional requirements.</li>
<li>Non-Functional Requirements define the characteristics of functional  requirements.</li>
<li>Functional requirements drive design decisions</li>
<li>Design choices are restricted by constraints</li>
<li>Design choices guide implementation</li>
<li>Implementation is product</li>
</ul>
<p><cite><a title="the importance of non-functional requirements" href="http://tynerblain.com/blog/2006/05/23/non-functional-requirements-era/">Non-Functional Requirements Equal Rights Amendment</a></cite></p></blockquote>
<p>The key element, with respect to this article, is that <strong>goals are achieved by enabling use cases</strong>.  In other words, without the use cases that people* perform, the goals of the business can not be achieved.</p>
<p>[*Sometimes the use case is performed by a system - not all actors are people]</p>
<h2>Principal Stakeholders Own Business Goals</h2>
<p>We learned a lot from <a title="outside in software development" href="http://tynerblain.com/blog/2007/09/27/outside-in/"><em>Outside-In Software Development</em></a>, by Carl Kessler and John Sweitzer.  One of the important things we learned is how to understand the goals of <em>principal</em> stakeholders.  Principal stakeholders are the &#8220;owners&#8221; of the ROI that we are attempting to achieve with our product or solution.  The business has the goals, but the business is an abstract entity.  If the goal of the business is to increase sales by 10%, we can&#8217;t call up the business and ask &#8220;did we meet your goal?&#8221;  We have to call up the vice president of sales.  The business is organized so that there are people who are responsible for the initiatives and goals of the business &#8211; they are responsible for growth, profitability, costs, strategy.  The insight we got from Kessler and Sweitzer is an appreciation that this ownership lies with one or more <em>individuals</em>.</p>
<p>When a goal has an owner, we can validate that we have met the goal.  We can validate that we have satisfied the owner of the goal.  You can&#8217;t do that validation with an abstract entity, a &#8220;business&#8221;, but you can with a person.  Certainly, we can do the math ourselves, but if we want someone to pay the bills &#8211; and more importantly &#8211; invite us back to do more projects, we have to satisfy an individual.  And that individual is our principal stakeholder.</p>
<h2>Principals Own Use Cases</h2>
<p>Our principal stakeholder owns the business goal &#8211; and therefore owns the use cases that enable that goal to be achieved.  Our <a title="completeness validation with use cases" href="http://tynerblain.com/blog/2006/07/06/requirement-completeness-validation-with-use-cases/">stakeholder will validate the completeness of our use cases</a> by answering the question, &#8220;If we enable all of these use cases, will we completely meet your goal?&#8221;</p>
<h2>End Users Own Use Cases</h2>
<p><a title="benefits of user-centered design" href="http://tynerblain.com/blog/2005/12/01/user-centric-design-yields-not-so-obvious-features/">User-centered design is also one of our </a>core principles, and an acknowledged best-practice.  For many companies, it is more than mandatory &#8211; it is a way of life.  The entire software development process is sometimes <a title="how to not suck at design" href="http://tynerblain.com/blog/2006/11/15/how-to-not-suck-at-design/">built around a focus on the end users</a>.  This approach puts the user in the center.</p>
<blockquote><p>You can identify end user goals with the following approach:</p>
<ol>
<li><a title="identifying actors " href="http://tynerblain.com/blog/2007/03/13/visualize-stakeholder-analysis/">Identify the actors</a> that interact with the software.</li>
<li><a title="persona identification" href="http://tynerblain.com/blog/2006/04/17/persona-grata/">Identify the personas</a> that represent those actors &#8211; thus avoiding the <a title="elastic user syndrome" href="http://tynerblain.com/blog/2007/07/23/elastic-users/">elastic user syndrome</a>.</li>
<li>Develop an understanding of the <a title="personas and goals" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">personal goals of the personas</a> &#8211; and by extension, the actors through <a title="types of requirements gathering" href="http://tynerblain.com/blog/2007/03/26/types-of-requirements-gathering/">ethnographic research</a>.</li>
</ol>
<p><cite><a title="end user goals" href="http://tynerblain.com/blog/2007/10/18/stakeholder-goals-2/">Stakeholder Goals: Principal vs. End User</a></cite></p></blockquote>
<p>This creates what appears to be a conflict &#8211; do principals own the use cases, or do end users own the use cases?</p>
<h2>Mixing Interaction Design With Structured Requirements</h2>
<p>One approach to resolving this conflict is to eliminate it by <a title="interaction design and structured requirements" href="http://tynerblain.com/blog/2006/03/23/interaction-design-and-structured-requirements/">mixing interaction design with structured requirements</a>.  In this approach, the interaction design component applies <em>end user ownership</em> as an input to the design, but not the content of the use cases, as the following diagram shows:</p>
<blockquote><p><img title="interaction design and structured requirements" alt="interaction design and structured requirements" src="http://sehlhorst.smugmug.com/photos/61228367-O.png" /></p>
<p>In the diagram above, the changes (relative to the Wiegers process) are marked in blue.</p>
<p>The interaction design process starts with two parallel activities. On the left is the identification of corporate goals, which is analogous to the creation of an MRD. An MRD can be a reasonable mechanism for documenting the corporate goals. It provides more detail than “Increase profits” with statements like “Increase profits with improved pricing.” On the right side is the <a title="How to create personas" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">creation of personas</a> to represent the most important users.</p>
<p><cite><a title="interaction design and requirements" href="http://tynerblain.com/blog/2006/03/23/interaction-design-and-structured-requirements/">Interaction Design and Structured Requirements</a> </cite></p></blockquote>
<p>This approach side-steps the issue by relegating the end users to &#8220;design input&#8221; and not allowing them to contribute to prioritization and management.  For many applications, this is a great way to approach things.  Specifically, it works very well when the user&#8217;s goals are tightly coupled or highly aligned with the principal stakeholder&#8217;s goals.</p>
<h2>When Goals Conflict</h2>
<p>User goals are not always aligned with stakeholder goals.  In <a title="conflicts in stakeholder goals" href="http://tynerblain.com/blog/2007/10/18/stakeholder-goals-2/">our earlier article on identifying these conflicts</a>, we proposed a simple grid view for identifying these conflicts.<br />
<img title="grid of goals in conflict" alt="grid of goals in conflict" src="http://sehlhorst.smugmug.com/photos/210042793-M.jpg" /></p>
<p>In that article, we looked at situations where the goals of the actor were primarily aligned with those of the principal stakeholder, and therefore the business.  We discussed using the grid to inspire solutions that removed the conflicts.  <em>Two birds with one stone</em> would be the easiest way to summarize.</p>
<p>What about when goals are <em>implicitly</em> in conflict &#8211; or even diametrically opposed?  We&#8217;ve worked on systems where that is exactly the case.  Consider a two-tier sales model, and products / websites designed for the people in the second tier.</p>
<h2>Two-Tier Sales Models</h2>
<p>Here are some common business models where the users have goals that are directly in opposition to the goals of the principal stakeholders.</p>
<ul>
<li><strong>Automotive Manufacturer and Dealer</strong>.  A website, designed by a car manufacturer, to allow dealers to improve their ability to sell cars.  The automotive manufacturer makes money by selling cars to the end customer, and the dealer makes money by causing the sale to happen.  The manufacturer is compensated by profits on the sale, whereas the dealer is compensated simply by making the sale.  In other words, the dealer is motivated to lower the price because a sale at any price generates the same profit for the dealer.  The manufacturer is motivated to raise the price because fewer sales at a higher margin generate the same profit, but higher ROA (return on assets) than more sales at a lower margin.  This is an implicit conflict.</li>
<li><strong>Book Publisher and Book Retailer</strong>.  A book publisher sets a price for sale to the retailer, and a suggested (list) price to the end customer.  The retailer will typically pay a negotiated discount, in the form of a percentage off list, for the book.  Any books not sold by the retailer are returned to the publisher or (usually) destroyed.  The retailer does not have to pay for books that are not sold.  The retailer has limited shelf-space, and makes money based upon a combination of the size of the discount and the number of books that are sold, regardless of publisher.  The retailer is therefore incented to increase the discount, and thus increase profits for a particular title &#8211; and the publisher is incented to reduce the discount, and thus increase the profits for a particular title.  Since the list prices are fixed, the retailer negotiates the discount, and as leverage over the publisher, gets to influence the placement of the book within the store.  Each publisher is forced to compete with other publishers.  These goals are also in conflict.</li>
<li><strong>High-Tech Equipment Manufacturer and Value-Added Reseller</strong>.  A value-added reseller (VAR) provides solutions to end customers.  They do this by combining products from manufacturers, and adding value &#8211; in the form of planning, custom engineering, installation services, etc.  The VAR will negotiate a price with the end customer for a solution.  The typical VAR sells products from multiple high-tech companies.  The VAR will negotiate with the manufacturers to get the lowest possible prices from the manufacturers.  The manufacturer wants the end-customer price (when it includes their equipment) to be as low as possible &#8211; to increase the number of sales that are made.  The manufacturer gets the same profit (based on the price to the VAR) regardless of the end-customer price.  Every dollar that the end-customer saves, the VAR loses in profit.  The VAR makes profit on the difference between price-to-the-VAR and the final selling price.  The VAR will also want to drive down the price it pays to the manufacturer.  Reducing the price-to-the-VAR transfers profits directly from the manufacturer to the VAR.  These goals are diametrically opposed.</li>
</ul>
<p>When goals are in conflict like this, we can&#8217;t just relegate the &#8220;end user&#8221; goals to design inputs &#8211; we have to incorporate them into the prioritization process.  In these examples, the &#8220;end users&#8221; are the VAR, the book retailer, and the automotive dealer.</p>
<p>Imagine that the high-tech equipment manufacturer sells networking hardware.  The manufacturer has an internal (direct) sales force, as well as the VAR channel (indirect) sales force.  The manufacturer identifies tools that help sales reps to close deals.  Large purchases are commonly made at as much as 80% off list price.  The list prices are irrelevant &#8211; they are not even guidelines in many cases.  So the manufacturer develops tools to help sales reps know what prices to set for end customers.</p>
<p>Internal sales reps have generally well-aligned goals with principal stakeholders.  The sales rep will be compensated based on a combination of revenue (sales) and margin (profits).  This compensation model creates implicit alignment between the user goals (get a bonus) and the company goals (make profitable sales).</p>
<p>One approach to helping the sales rep close <em>profitable</em> deals is to share an indication of the profitability of the deal with the rep.  The rep can (will!) set a price that is designed to maximize the sales rep&#8217;s bonus.  If the compensation system is well designed &#8211; this is also optimal for the business, and therefore the principal stakeholder.  The sales rep will get increased compensation for raising the price (and still closing the deal) by getting a percentage of the increase in margin.  The sales rep is motivated to increase the manufacturer&#8217;s profits.</p>
<p>The VAR, however, should not know the profitability of a particular transaction.  The VAR is motivated to lower the price (the price to the VAR) as much as possible &#8211; even at the expense of losing a &#8220;profitability bonus.&#8221;  If the VAR is given a percentage of the increased margin (to the manufacturer) it comes at the cost of losing 100% of the change in price to the VAR.  Remember, the VAR makes money on the difference between the price from the manufacturer, and the price to the customer.</p>
<p>Depending on the manufacturer&#8217;s business model, this could lower the priority of a margin-inspection capability, or dramatically raise the priority of features that restrict margin-viewing to only internal sales reps.</p>
<p>Also remember that the manufacturer and the VAR also have aligned goals &#8211; like closing the deal.  And the VAR can close the deal with the manufacturer, or with products from a competitor.  So the manufacturer is incented to provide valuable functionality to the VAR.  The manufacturer cannot ignore the VAR&#8217;s needs, or the VAR will work with a competitor and the manufacturer will lose all the business.</p>
<p>You have to determine the value <em>to the principal stakeholder</em> of the value of the feature to the end user.  In other words &#8211; even if a feature &#8220;hurts&#8221; the manufacturer, is the pain &#8220;worth it&#8221; because of the value of the relationship and expected future business that the company will do with the VAR?</p>
<p>Once the value of all of the functionality is identified, you can prioritize it.  <a title="valuing use cases for pain and gain" href="http://tynerblain.com/blog/2007/10/25/stakeholder-value-matrix/">An enlightening way to visualize this value is with a value-delivery matrix</a>.  Thanks again to Roger Burlton for inspiring our approach to prioritizing based upon a combination of pain and gain.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Use+Case+Management+is+a+Tough+Balancing+Act+http://bit.ly/binBW+" 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/02/04/balancing-use-cases/&amp;t=Use+Case+Management+is+a+Tough+Balancing+Act" 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/02/04/balancing-use-cases/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Global Processes and Business Rules</title>
		<link>http://tynerblain.com/blog/2007/09/25/global-processes-and-business-rules/</link>
		<comments>http://tynerblain.com/blog/2007/09/25/global-processes-and-business-rules/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 03:55:05 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Process Modeling]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[global business requirements]]></category>
		<category><![CDATA[global requirements]]></category>
		<category><![CDATA[managing data]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/09/25/global-processes-and-business-rules/</guid>
		<description><![CDATA[
We&#8217;ve written before about the importance of separating rules from requirements, particularly in use cases.  We wrote that with the goal in mind of reducing the costs of system maintenance.  Low-level rules like decision, calculation and inference rules tend to change frequently &#8211; and independently of other requirements.  So a documentation approach [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="people around a globe" title="people around a globe" src="http://sehlhorst.smugmug.com/photos/200498119-M.jpg" /></p>
<p>We&#8217;ve written before about the importance of separating rules from requirements, particularly in use cases.  We wrote that with the goal in mind of reducing the costs of system maintenance.  Low-level rules like decision, calculation and inference rules tend to change frequently &#8211; and independently of other requirements.  So a documentation approach that separates these rules from requirements can  both reduce implementation costs (by encouraging separated implementation) and reduce the time required to manage and approve changes.</p>
<p>There are also benefits to abstracting high-level, or procedural rules, when dealing with global business requirements.<br />
<span id="more-574"></span></p>
<h2>Global Businesses</h2>
<p>When companies get large enough that they start operating globally, they face an additional level of complexity in managing their processes.  And with that management burden comes the additional complexity of managing the software that implements those processes.</p>
<p>Global businesses usually don&#8217;t have the luxury of using the exact same processes, procedures, and rules in every company in which they operate.  They also have to deal with nasty problems like selling a product from one country to a customer in a second country, with a delivery address in a third country.  And the product may be shipped from a fourth country.  Now imagine that the order is split to deliver portions of it to each of multiple destinations.  And imagine it is further (orthogonally!) split because the products are being sourced from multiple locations.  That&#8217;s a lot of complexity.  How would you approach managing the requirements for something like that?</p>
<p>Let&#8217;s keep it simple and just imagine dealing with different processes and procedures in different countries.  Global businesses usually organize around regions, like the Americas, Europe, Asia, etc.  There are no formal rules to this organization, but the regional definitions are mostly consistent.  Within some of those regions, there are often variations in how the business operates within countries in those regions.  US Companies usually treat domestic US business differently than they would Canadian or Mexican operations &#8211; even on the same continent.  And Europe, Africa and the Middle East have even more variation and distinct differences between countries.</p>
<h2>Regional Growth</h2>
<p><img alt="front loader" title="front loader" src="http://sehlhorst.smugmug.com/photos/200499386-M.jpg" /><br />
When companies grow into multi-national organizations, they don&#8217;t initially start in &#8220;every country&#8221; and then gradually grow all of the divisions in lock-step.  Companies rightly focus on a single country until they are driven to grow into other countries.  Then they establish footprints in those countries, grow those businesses, and eventually reach a size where they need to organize regionally.</p>
<p>The businesses in those countries and regions are usually given both guidance and latitude in the development of their businesses.  As a result, the company will both develop new processes and extend existing processes into the new countries.  Imagine a company like Caterpillar or John Deere that sells heavy construction equipment around the world.  The company initially, likely, both manufactures and sells all of the vehicles in the same country.  Then the company begins exporting vehicles to the other countries.  Eventually, the business grows until the company sets up shop in the foreign country.</p>
<p>The company is now doing the same things in multiple countries (at a high level).  Selling vehicles, leasing vehicles from a maintained fleet, financing purchases, etc.  Consider the business of leasing vehicles &#8211; different countries have different cultures that approach borrowing differently.  They also have different regulations about leasing versus sales.  Our company may even decide to partner with a local third-party company that manages a fleet of lease vehicles for them in one country, while maintaining their own fleet in another country.</p>
<p>The people running these country-specific businesses have to react to local issues, regulations, and market dynamics.  Success in those countries may require different operations than success in the home country.  And the people responsible for these businesses are usually able to &#8220;do what it takes&#8221; to be successful in the different countries.</p>
<h2>Global Processes</h2>
<p>Now the company is faced with the situation where the same process (leasing a vehicle) exists in multiple countries or regions.  At the same time, the process is different in each of the countries, because of the differences in how the business operates in those countries.</p>
<p>The company now has the same process defined multiple times.  And that process is defined not only based on local influences, but also corporate policies, the policies that are in effect in the country where the company is based (and therefore reports income, etc), and those things that are common across the regions.</p>
<p>This means there is both variation and duplication in the process.  And that creates opportunities for improvement.</p>
<p>Consider a use case that is part of a global process.  For the vehicle leasing process, a use case (or sub-process) may be &#8220;Approve credit of lessee.&#8221;  The company requires that all leases be made only to people who have been approved as <em>credit-worthy</em>.  But determining credit-worthiness can vary by country.  And the process required to determine credit worthiness will vary by country.</p>
<h2>Variation by Country</h2>
<p>Consider the definition of credit-worthiness.  This is defined for a single country with a set of rules that represent the results of an actuarial analysis that does a risk-scoring process designed to weed out unprofitable loans.  The credit-worthiness of a lessee in a third-world country would necessarily be different than the analysis in a major industrialized nation.  And that means a different set of rules.</p>
<p>What about country regulations?  There are different privacy laws in place in different countries.  You may be allowed to contact character-references in one country, but not in another.  You may have access to three years of records in one country, and seven years in another.  These variations in regulation affect what you <em>are allowed to do</em> in the different regions.</p>
<p>And the businesses in different countries have evolved their processes independently over time.  One business may choose to pre-approve a lease for repeat customers, while another country may require credit checks for all new leases.</p>
<p>These differences make the goal of <em>globalizing</em> processes and requirements seem insurmountable.</p>
<h2>Why Globalize Requirements</h2>
<p>There are many reasons to understand processes at a global level.  Let&#8217;s look at just one.  Reporting.  Management accounting is the science (or art, if you ask a financial accountant) of inspecting measurable elements of your business so that you can make informed decisions about how you run your company.  Being able to understand, analyze, and measure the same process in every country of the world provides benefits in strategic reporting and decision making.  This consolidation can also be valuable for financial accounting and reporting of business performance for public companies.  Making good management decisions is enough of a reason, so we&#8217;ll ignore the added financial accounting and external reporting benefits of a consolidation.</p>
<p>OK, so your construction equipment company operates in multiple countries.  And you lease equipment in multiple countries.  You want to know how profitable your leasing business is.  Each country has developed different processes for leasing, with different rules for determining details like <em>who to approve for a lease</em>, and different calculations of profitability.  For example, one country may monitor gross margins, another may track contribution margin.  What about the rules for revenue recognition?  One country&#8217;s business may recognize revenue at the time of signing a lease, while another may recognize revenue only when the payments are due (or when payments are made).</p>
<p>To get better control on your businesses, or more specifically, more consistent reporting, you need every country to follow the same process.  Even though the &#8220;business&#8221; in each country needs to be handled slightly differently.</p>
<h2>Consolidate Requirements</h2>
<p>One approach is to take all 50 countries, analyze all 50 process variations, document 50 different use cases, and determine the proper reporting for each of the 50 situations.  That&#8217;s a lot of analysis work.  And a lot of risk to the reporting effort.  You avoid disrupting the individual businesses, but you may make mistakes in any of the many analyses.  And whenever any of the countries has a change in regulation, or when any of the businesses in those countries has a change in process or policy, you have to review and update your process, use case, and analysis for that country.</p>
<p>Another approach is to mandate that everyone follow an identical process &#8211; come hell or high water.  This is completely impractical.  For some countries, this will work.  For others, this will force the businesses to operate at a competitive disadvantage (remember, there was a <em>locally rational decision</em> to deviate in the first place).  And in the worst case, you may be &#8220;requiring&#8221; the business to operate illegally (or prevent it from operating at all) in some countries.</p>
<p>A third, more reasonable approach is to look for a common abstraction.  Develop a description of the process and use case that applies to all of the countries, while allowing for a representation of the variations.  This might <em>encourage</em> individual countries to make changes to their processes (in order to appear more consistent with the rest of the business), but it allows them to continue to deviate.</p>
<p>How is this possible &#8211; we&#8217;ve identified that each country has a different process, so how can the same process documentation be correct for the different countries?</p>
<h2>Business Rules Provide the Abstraction</h2>
<p>Most of the variations in process identified in the example above are really <em>variations in rules</em>, happening within similar or identical processes.  Think of it from a use case perspective &#8211; here&#8217;s a snippet from the normal flow of the &#8220;Approve Credit&#8221; use case:</p>
<ol>
<li>Lessee submits request for financing.</li>
<li>System approves lease <em>per BR01, Credit Approval Rules</em>.</li>
<li>Lessee confirms intent to lease.</li>
<li>System reserves vehicle.</li>
<li>&#8230;</li>
</ol>
<p>The key is the abstraction of <em>Credit Approval Rules</em>.  Even though those rules vary by country, all countries will follow the flow defined above.  Note &#8211; this does not address the case when the processes are structurally different.</p>
<p>Then, within your business rules repository (or spreadsheet, or wherever you maintain the rules), you will have a ruleset (BR01) that defines when credit is approved and when it is rejected.  What you can do is define different rulesets for different countries (or regions).  BR01-USA, BR01-Canada, BR01-Mexico, etc.</p>
<p>When the business within a particular country changes its credit approval criteria, you only update those rules &#8211; and not the process or use case documentation.  The use case remains unchanged.</p>
<p>In our <em>calculate profitability</em> example, you will need to either require the businesses to calculate the same way, or, because the data will be consistent, you can aggregate and report on the information at a global level &#8211; taking into account which transactions happen in what countries.</p>
<h2>When Processes Are Structurally Different</h2>
<p>What about when the process is significantly different in some countries?  Perhaps the system reserves the vehicle in advance of qualifying the lessee (pre-approval of the lease)?  We have a different process.  Technically, it is a variation on the same process &#8211; the process would share the same name and have the same high level description.  Only in the details would it be different.</p>
<p>We get to &#8220;make up an answer&#8221; here, I think &#8211; I don&#8217;t know of anyone who has standardized on a good solution for this problem.  There are two reasonable obvious approaches that come to mind.<br />
The first approach is to define multiple use cases, and organize them hierarchically beneath the original (global) version of the use case.  If the use case is &#8220;UC01 Approve Credit&#8221;, then you would add &#8220;UC01A&#8221; or &#8220;UC01-USA&#8221; to reflect that this use case is a variation on the first one.  Then you would trace the <em>special case</em> use case to the <em>global</em> use case.</p>
<p>This works, and minimizes redundancy, but it could be confusing to deal with this added complexity, in light of subordinate use cases, use case versions, and tracing of requirements.  Would the requirement for &#8220;User submits application&#8221; be traced to UC01, or UC01, UC01A, etc.?  You would trace to all variations for which the requirement is <em>required</em>.  Each country-specific implementation team can then look at each use case and say &#8220;Do we use the global one, or do we have a special variation?&#8221;   The team would then know precisely which requirements they had to implement.</p>
<p>Another approach would be to define the <em>global</em> use case &#8211; &#8220;UC01 Approve Credit&#8221;, and then for each country that has an <em>alternative process</em>, define an <em>alternate flow</em> through the use case.  This takes care of the confusion with subordinate use cases and versioning.  And it reduces the need for redundant tracing.  But it makes the individual use case harder to read.  And since most software today only traces requirements to use cases (and not individual steps in the use cases), it makes it harder for the implementation teams to know which requirements they have to implement for their countries variation.<br />
Ultimately, we document requirements to foster improved communication.  An approach that makes a use case harder to read (and approve), or harder to implement (or trace dependencies) is not as good as one that might make repository-maintenance more difficult, while improving the ability of the teams to understand both the contents and the dependencies of use cases.</p>
<h2>Summary</h2>
<p>Global businesses have variations in processes and use cases in the different countries where they do business.  Documenting the individual processes leads to redundant documentation of requirements, makes it more difficult to analyze the processes (including reporting and accounting), and does not help in standardization of practices.</p>
<p>Abstracting rules, and finding commonalities in process patterns allows for consolidation of process documentation &#8211; which improves communication and analysis of requirements.</p>
<p>Utilizing <em>alternate use cases</em> to represent when individual companies or regions deviate from the global <em>standard</em> allows businesses to deviate their processes when needed, while minimizing the impact on making and managing changes to the processes across the organization.  It also provides a framework for analysis, tracking, and encouragement of standardization of processes across a multi-national company.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Global+Processes+and+Business+Rules+http://bit.ly/38sOCn+" 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/2007/09/25/global-processes-and-business-rules/&amp;t=Global+Processes+and+Business+Rules" 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/2007/09/25/global-processes-and-business-rules/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Business Rules Hidden in Use Cases</title>
		<link>http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/</link>
		<comments>http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 04:30:16 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[alternate flow]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[exception flow]]></category>
		<category><![CDATA[hidden business rules]]></category>
		<category><![CDATA[hidden rules]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[normal flow]]></category>
		<category><![CDATA[preconditions]]></category>
		<category><![CDATA[triggers]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/</guid>
		<description><![CDATA[
Business rules are not requirements.  Yet they are often gathered at the same time as requirements, from the same sources, by the same business analysts.  And unfortunately, often documented in the same artifacts.  In this article we look at some of the ways that business rules are commonly hidden inside use cases.

Separate [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="individual hidden in group" title="individual hidden in group" src="http://sehlhorst.smugmug.com/photos/191360766-M.jpg" /></p>
<p>Business rules are not requirements.  Yet they are often gathered at the same time as requirements, from the same sources, by the same business analysts.  And unfortunately, often documented in the same artifacts.  In this article we look at some of the ways that business rules are commonly hidden inside use cases.</p>
<p><span id="more-565"></span></p>
<h2>Separate Business Rules from Use Cases</h2>
<p>As we&#8217;ve discussed before, <a title="business rules and agility" href="http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/">business rules need to be separated from requirements</a>.  James Taylor and I continue to explore how best to isolate rules from requirements.  To quickly summarize (and dramatically oversimplify) one of the points from James&#8217; book, <a title="Smart Enough Systems" href="http://www.informit.com/store/product.aspx?isbn=0132347962&#038;rl=1"><em>Smart Enough Systems</em></a>, isolating the implementation of business rules allows you to update the way your business runs on your software much more quickly.  And the first step to driving this isolation at the implementation layer is to isolate rules from requirements at the documentation layer.</p>
<h2>Types of Business Rules</h2>
<p>In our earlier article, we touched briefly on how <a title="Business Rules and requirements" href="http://tynerblain.com/blog/2007/07/10/rules-and-requirements-early-thoughts/">business rules are used to define decisions</a> within a use case or process flow.  David Wright wrote an article, <a title="the business rules approach" href="http://www.requirementsnetwork.com/node/754"><em>The Business Rules Approach</em></a>, where he identifies five classes of business rules:</p>
<ul>
<li>Constraints &#8211; mandated criteria such as &#8220;the applicant must not be a felon&#8221;</li>
<li>Guidelines &#8211; suggestions such as &#8220;the applicant should not have been rejected previously&#8221;</li>
<li>Action Enablers &#8211; rules that initiate or trigger behavior, like &#8220;when the customer&#8217;s card has been rejected, it must be confiscated&#8221;</li>
<li>Computations &#8211; the embodiment of calculations, like &#8220;pay 1.5 times the wager for a two-card total of 21&#8243;</li>
<li>Inferences &#8211; the canonical &#8220;if&#8230;then&#8221; statements</li>
</ul>
<p>These types of business rules can easily be hidden in different elements of a use case.</p>
<h2>Where Business Rules Can Lurk</h2>
<p>When we look at <a title="structure of a formal use case" href="http://tynerblain.com/blog/2006/06/26/foundation-series-how-to-read-a-formal-use-case/">the structure of a formal use case</a>, we see several areas where business rules can be hidden.</p>
<p><strong>Description</strong></p>
<p>Since the description acts as a summary or overview of the entire use case, any of the different types of business rules might be captured within it.  Looking at an example from one of our old articles:</p>
<blockquote><p>A pilot performs an FAA mandated list of equipment and operational inspections prior to every flight. All inspections must pass before the flight is allowed to take off per corporate policy.</p></blockquote>
<p>&#8220;All inspections <em>must</em> pass&#8230;&#8221; is a constraint, and therefore a business rule.  &#8220;Prior to <em>every</em> flight&#8221; is also a constraint.  It would be better to write the description as follows:</p>
<blockquote><p>A pilot performs an FAA mandated list of equipment and operational inspections [see FAA-1] prior to flights.</p></blockquote>
<p>We&#8217;ve removed both business rules from the description, and added an explicit reference to the FAA mandated list.  If the list of inspections defined by the FAA should change, we should not have to update our use case.</p>
<p><strong>Triggers</strong></p>
<p>Very often, these are <em>action enabler</em> rules.   A trigger of &#8220;Student submits college application&#8221; is a trigger for the &#8220;Evaluate student application&#8221; use case.  Although you could possibly argue that this is a business rule, there doesn&#8217;t seem to be much value in making the distinction.  However, a trigger could also be &#8220;It is Friday at 5pm&#8221; for the use case &#8220;Process pending orders.&#8221;  This represents a company-specific business decision to process orders at the end of the week.  The order-processing use case would not change if the frequency were changed to every day, or every other week.  The trigger really represents an implicit decision &#8211; &#8220;Is it time to process pending orders?&#8221;  Using language that is more correct for a trigger, we would write:</p>
<blockquote><p>It is time to process pending orders [See BR021, <em>Order-processing time</em>].</p></blockquote>
<p>This would allow us to change the way our business operates more quickly.  We could start processing on any frequency &#8211; or even start processing whenever more than 10 orders have queued up, or whenever outstanding orders represent $1000 in revenue (or profits).  The key point is that by abstracting out the decision, <em>Is it time yet?</em>, we again can change how we run our business without having to update and re-validate the use case.</p>
<p><strong>Preconditions</strong></p>
<p>Business rules that represent constraints very often show up as preconditions to a use case.  Since preconditions describe &#8220;what must be true&#8221; before the use case starts, this is understandable.  Imagine we were writing a use case named &#8220;Process New Car Loan Application.&#8221;  An obvious precondition might be that the amount to be borrowed has been resolved for the new car.</p>
<p>This would reduce labor, by only processing loan applications (which include running credit checks, etc), after a buyer has been locked in to a price, their trade-in value has been agreed to, and any deposit has been defined.  However, this represents a linear process.  An interesting business decision might be to immediately process a loan application as soon as the buyer agrees to start negotiations.  The car dealer could use a conservatively estimated amount to get approval from the financing institution for a loan for &#8220;up to amount X.&#8221;  Then, once negotiations have been completed, the only step remaining would be to fill in the exact amount and get the buyer&#8217;s signature.  A much improved shopping experience for the new car buyer.</p>
<p>We could write this as follows:</p>
<blockquote><p>A maximum amount for the loan has been identified [See BR033, <em>Determining loan-application amount</em>].</p></blockquote>
<p>And then, within that business rule we can define heuristics like &#8220;Subtract Kelly Blue Book value of indicated trade-in from 5% below the sticker price&#8221; or use the average selling price for the particular model car + 5%, or any of a number of rules.  Those rules can easily be changed without affecting the loan-application use case.</p>
<p><strong>Normal and Other Flows</strong></p>
<p>There are many opportunities within the normal course of a use case to hide business rules.  Every point in the use case that could cause <a title="understanding branches in use cases" href="http://tynerblain.com/blog/2007/03/19/use-case-vs-process-flow-1/">branching to an alternate or exception flow</a> represents a decision.  Each of those decisions represents the combination of one or more business rules.  To be more precise, <a title="Business rules and rapid development" href="http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/">each decision represents a <em>set of rules</em></a> that are applied together to reach a conclusion (stay in the normal flow, or branch to another flow).</p>
<p>A use case named &#8220;Review conversation transcript&#8221; for a CIA analyst would have a normal course that probably documents that the transcript has been reviewed, and follows some archiving procedure.  If the transcript identifies a &#8220;red flag&#8221; word or phrase like &#8220;Blackbriar&#8221; or &#8220;Touchstone&#8221;, then an alternate flow would be initiated.  [Yes, I did watch the Bourne Ultimatum this weekend.]  The trigger for this alternate flow could be written as:</p>
<blockquote><p>3.  Review of the transcript identified a <em>red-flag</em> word or phrase [See BR US-21744.6, <em>Identification of red-flag words and phrases</em>].</p></blockquote>
<p>Then this business rule could be defined as a lookup into a database, it could be filtered &#8211; so that counter-terrorism analysts look for different words and phrases than people looking for drug dealers.  This allows the &#8220;review a transcript&#8221; use case to remain stable while the rules for identifying onerous phrases are modified on a regular basis.  This also allows the &#8220;review a transcript&#8221; use case to be changed without impacting the phrase-identification business rules.</p>
<h2>Key Element</h2>
<p>The key element of this reworking of use cases is to reference the <em>sets of business rules</em> that make up individual decisions, constraints, and action enablers.  Those rules are maintained in separate documents.  These other documents may be distinct documents, top-level objects within a requirements repository, or rule sets managed in a rules repository.</p>
<p>Most importantly, the rules are not hidden within the use case.  Hiding the rules in this way makes it more difficult for developers to interpret the documents.  It makes it all but impossible for the developers to abstract the rules into abstract <em>decision services</em>.  It also slows down the approval process of the requirements and the rules &#8211; both initially, and when managing changes.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Business+Rules+Hidden+in+Use+Cases+http://bit.ly/UhUoE+" 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/2007/09/03/business-rules-and-use-cases/&amp;t=Business+Rules+Hidden+in+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/2007/09/03/business-rules-and-use-cases/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Requirements Details &#8211; How Much is Enough?</title>
		<link>http://tynerblain.com/blog/2007/08/23/requirements-details/</link>
		<comments>http://tynerblain.com/blog/2007/08/23/requirements-details/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 02:44:57 +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[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[concise requirements]]></category>
		<category><![CDATA[functional requirements]]></category>
		<category><![CDATA[level of detail for requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[non-functional requirements]]></category>
		<category><![CDATA[requirements details]]></category>
		<category><![CDATA[requirements level of detail]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/08/23/requirements-details/</guid>
		<description><![CDATA[
What is the right level of detail for writing requirements?  What about for writing specifications (functional, non-functional requirements, etc)?  The answer is that there is no one answer.  But there are guidelines, and reasons to write more detail, or less detail &#8211; for any given product or project, and any given team. [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="balance" title="balance" src="http://sehlhorst.smugmug.com/photos/187206753-M.jpg" /></p>
<p>What is the right level of detail for writing requirements?  What about for writing specifications (functional, non-functional requirements, etc)?  The answer is that there is no one answer.  But there are guidelines, and reasons to write more detail, or less detail &#8211; for any given product or project, and any given team.  The reason we write requirements is so that they can be read.  Understanding the readers is the key to determining which details to include in the requirements.</p>
<p><span id="more-560"></span></p>
<h2>Requirements for Agile Teams</h2>
<p>Steve Johnson and I had a great discussion this morning about his webinar from last week, <a title="pragmatic marketing webinars" href="http://www.pragmaticmarketing.com/resources/archived-webinars"><em>Extreme Product Management</em></a>.  Steve&#8217;s presentation is really good, and worth a listen to answer questions about how to combine product management and agile development teams to achieve market-driven product successes.</p>
<p>As part of a follow-up, Steve and I got to talking about how much to document for agile teams.  A few hours later, he shared a slide with me that he had put together, that provides a great visual of the concept.  In short, the more your team knows about your domain, the less documentation details they require to be effective.</p>
<p><img title="agile domain details diagram" alt="agile domain details diagram" src="http://sehlhorst.smugmug.com/photos/187205450-M.jpg" /> [<a title="larger image" href="http://sehlhorst.smugmug.com/photos/187205497-O.jpg">click for larger version</a>]</p>
<h2>Generalizing The Relationship</h2>
<p>Steve&#8217;s slide is well designed for the &#8220;who do we need to be effective with an agile process?&#8221; question.  And it can also lead us down paths that consider outsourcing, in-sourcing, off-shoring and co-location of development teams.  That isn&#8217;t necessarily where we want to take the discussion for this article.</p>
<p>What Steve&#8217;s slide (not from the webinar, by the way) illustrates is that different audiences respond differently to different processes.  From an understanding of how agile processes work, we can extend this idea &#8211; <a title="writing to be read" href="http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/">we need to write differently for different audiences</a>.</p>
<p>Generally speaking, the more you know about a domain, the fewer the words needed to convey a concept (or requirement) with precision.  Without using <a title="jargon video" href="http://tynerblain.com/blog/2006/02/15/jargon-gone-amuck/">jargon</a>, you can still communicate more <a title="Writing Concise Requirements" href="http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/">concisely</a>.  Remember, though &#8211; the goal is clarity, not brevity.  For example, it is much easier to describe the concept of drafting when speaking to a racing fan.  [Note: drafting is riding or driving close behind another competitor, in order to benefit from the reduced aerodynamic drag.]  When someone already knows what drafting is, providing instructions on how to do it is easier than if they do not.</p>
<h2>Use Case Details</h2>
<p>At this point, you may be thinking <em>but there </em>is<em> a right level of detail for use cases</em>.  Alistair Cockburn talks about the level of detail for describing use cases in <em>Writing Effective Use Cases</em>.  Jeff Patton has a good article <a title="goal level" href="http://www.outside-in-development.com/work/goal_level.html">explaining Cockburn&#8217;s levels</a>.  Cockburn uses a metaphor of elevation:</p>
<ul>
<li>Cloud Level &#8211; very high level summary</li>
<li>Kite level &#8211; summary</li>
<li>Sea level &#8211; &#8220;single sitting&#8221; task descriptions</li>
<li>Fish level &#8211; small tasks that add up to valuable tasks</li>
<li>Clam level &#8211; very small details that make up small tasks</li>
</ul>
<p>Cockburn suggests writing at three levels &#8211; summary, user goal (sea level), and sub-function (fish) levels.</p>
<p>The authors of <em>Patterns for Effective Use Cases</em> present an interesting pattern &#8211; EverUnfoldingStory (pattern 4.5, p102).  They point out that different readers of use cases need different levels of detail.</p>
<p>An architectural analysis may only need very high level details of the use cases.  Other readers of the use cases may need to understand the interplay of use cases at a more detailed level.  And individuals may need to understand a particular use case in even more detail, while only needing a higher level understanding of other use cases.</p>
<p>The suggested pattern is to use multiple layers of use cases that can be &#8220;drilled down&#8221; into to get more detail, and can be rolled up (and hidden) to obscure detail when it isn&#8217;t needed.  The clearest way to achieve this is with <a title="subordinate use cases" href="http://tynerblain.com/blog/2006/11/27/subordinate-use-cases/">subordinate use cases</a>.</p>
<p>This seems like conflicting advice &#8211; write for your audience, <em>and</em> write for all audiences.</p>
<h2>Supporting Details</h2>
<p>The language you use should be adequate for anyone who has a reasonable level of understanding of the domain.  For example, in a business application, it would be appropriate to use language like &#8220;The system will report the net profit of the sale.&#8221;  It would also be appropriate to specify a business rule that &#8220;All companies with EBITDA below 5% be treated as high-risk investments.&#8221;</p>
<p>When your team needs it, you should provide explanations and definitions in a glossary of terms.  The level of domain expertise determines how much explanation you need to include.  As a product manager or business analyst, you ideally should not have to document the definition of &#8220;net profit&#8221; and EBITDA.  You aren&#8217;t teaching a course on financial accounting, you&#8217;re specifying a product.  You should be able to reasonably expect that team members understand, or can easily find definitions for these industry terms.</p>
<p>You might need to define (or link to a definition of) <a title="definition of hhi" href="http://www.google.com/url?sa=t&#038;ct=res&#038;cd=1&#038;url=http%3A%2F%2Ffinancial-dictionary.thefreedictionary.com%2FHerfindahl-Hirschman%2BIndex%2B-%2BHHI&#038;ei=a0PORqnUH4jagASy0qnLAw&#038;usg=AFQjCNErLR1GH8Tildj7yre7Sg6M2TbcDg&#038;sig2=dx5zCm5rIDA2YgBD_a2dyQ">HHI</a>, or other more esoteric terms.  You can&#8217;t expect your developers to have MBAs.  You absolutely need to define any terms that are specific to a single customer (product managers cover your ears).  For example, the method of allocating overhead.  As a rule of thumb, management accounting terms would need definitions, as they are often interpreted differently by different companies.  You have to find a balance, by understanding who is reading the documents, as to where you draw the line.</p>
<p>In practice, make sure that you have budget and time allocated to deal with this.  When your company leans more towards the &#8220;development factory&#8221; model &#8211; treating people who sling code as a commodity, you will need to allocate more time and effort towards education.  Recognize that you will be articulating business requirements, in a language that requires some understanding of business terms.  If you can use that knowledge to influence how you staff the project, great.  If you don&#8217;t plan ahead, you might get lucky &#8211; but more likely, you&#8217;ll find yourself with scope creep, or missed estimates.</p>
<h2>How Have You Dealt With This?</h2>
<p>I&#8217;ve been on projects where the implementation team had deep domain expertise.  The communication was very efficient.  I&#8217;ve been on projects where the team was able to very quickly gain that expertise.  Those teams needed some early education, but very quickly became efficient.  And I&#8217;ve been on projects with teams that had no experience in the domain.  It was like teaching them a new language &#8211; and unfortunately, we did not expect to have to spend time on that education.  And it delayed the project.  Eventually, they became conversant in the domain.<br />
The best practice I walked away with was to not clutter the artifacts (directly) with these definitions, but to identify and link to reference materials, and an easily searchable glossary of terms.  This allowed team members to drill down when they needed to, without being distracted by wading through unneeded information when they didn&#8217;t.</p>
<p>We would love to hear about situations like this that you have run into, how they caused problems, and how you solved them.  Maybe there are better ways to address this stuff.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Requirements+Details+%E2%80%93+How+Much+is+Enough%3F+http://bit.ly/YntBc+" 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/2007/08/23/requirements-details/&amp;t=Requirements+Details+%E2%80%93+How+Much+is+Enough%3F" 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/2007/08/23/requirements-details/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prioritization and Value Maximization</title>
		<link>http://tynerblain.com/blog/2007/07/31/prioritization-and-value-maximization/</link>
		<comments>http://tynerblain.com/blog/2007/07/31/prioritization-and-value-maximization/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 05:52:15 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Expert systems]]></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[Use Cases]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[prioritizing use cases]]></category>
		<category><![CDATA[time boxes]]></category>
		<category><![CDATA[time boxing]]></category>
		<category><![CDATA[timeboxes time-boxes]]></category>
		<category><![CDATA[timeboxing]]></category>
		<category><![CDATA[use cases]]></category>
		<category><![CDATA[value maximization]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/07/31/prioritization-and-value-maximization/</guid>
		<description><![CDATA[
We all know the story about the emperor&#8217;s new clothes.  I&#8217;ve been thinking about prioritization and scheduling, and as far as I know, no one is promoting that we maximize value &#8211; they (and we) have been promoting that we do the most valuable stuff first.  Doing the most valuable things first does [...]]]></description>
			<content:encoded><![CDATA[<p><img title="emperor's clothes" alt="emperor's clothes" src="http://sehlhorst.smugmug.com/photos/179245489-M.jpg" /></p>
<p>We all know the story about the emperor&#8217;s new clothes.  I&#8217;ve been thinking about prioritization and scheduling, and as far as I know, no one is promoting that we maximize value &#8211; they (and we) have been promoting that we do the most valuable stuff first.  Doing the most valuable things first does not result in getting value the fastest.  In this article, we show why not.</p>
<p><span id="more-550"></span></p>
<h2>Genesis</h2>
<p>About a month ago, I read an <a title="Prioritize intuitively" href="http://kw-agiledevelopment.blogspot.com/2007/06/how-to-prioritise-quickly-and.html">article by Kelly Waters on how to prioritize intuitively</a>.  He presents a magic square diagram, showing both the &#8220;how valuable is it&#8221; and the &#8220;how hard is it to do&#8221; axes.  I&#8217;m oversimplifying, read his article for more details &#8211; he incorporates elements of risk, complexity, etc.  I really liked that he was addressing the &#8220;missing element&#8221; of how much work is involved.  However, his diagrammatic approach, while presenting this information very well, does not really yield insights into <em>what to do first</em>.  Kelly and I had a great discussion over the next couple weeks, exploring the interplay of work and value in prioritization, trying to find a way to encourage value-maximizing decisions.</p>
<h2>Prioritize By Value</h2>
<p>We have talked about prioritizing the <em><a title="prioritize by value" href="http://tynerblain.com/blog/2006/01/18/prioritizing-requirements-three-techniques/">most</a> <a title="prioritize across releases" href="http://tynerblain.com/blog/2006/03/08/prioritizing-software-requirements-across-releases/">valuable</a> <a title="cost reduction potential" href="http://tynerblain.com/blog/2006/09/25/cost-reduction-potential/">requirements</a></em> first repeatedly.  And in the last of those links, we accidentally hinted at, but didn&#8217;t grasp the real goal:</p>
<blockquote><p>We will only consider those steps where the profitability of change  exceeds our <a title="definition of npv" href="http://tynerblain.com/blog/2006/03/05/definition-of-npv-net-present-value/">hurdle rate</a> for investment.</p></blockquote>
<p>We&#8217;ve also talked in the past about using <a title="Planning a delivery schedule with use cases" href="http://tynerblain.com/blog/2006/07/19/communicating-a-release-schedule-with-use-cases/">use cases as the basis for scheduling</a>, as each use case represents realizable value.  For the rest of this article, we&#8217;ll talk in the context of scheduling use cases across releases.</p>
<p>Consider a very simple example &#8211; you have five use cases, with values of 10, 9, 9, 8, and 7 respectively (the units don&#8217;t matter).  If you sort those use cases in order by value, from left to right, they would look like the following:</p>
<p><img alt="use cases in order by value" title="use cases in order by value" src="http://sehlhorst.smugmug.com/photos/179245556-M.png" /></p>
<p>The size of each box shows the relative value of having the use case implemented.</p>
<p>Based on our previous guidance (and everyone else&#8217;s), you would implement them in order, from left to right.  Makes sense.  Do the most valuable thing first.  Do the next most valuable thing next.  Repeat until the value is not high enough to continue.</p>
<h2>What About The Amount of Work?</h2>
<p>OK, the amount of work required should play a role too.  In our <a title="how to timebox" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">time-boxing article</a>, we describe each release as having a given capacity, which you can visualize in terms of cost (resource) and time (duration of applying resources):</p>
<p><img alt="empty timebox" title="empty timebox" src="http://sehlhorst.smugmug.com/photos/64224627-M.png" /></p>
<p>We fill up that capacity with use cases, based upon how much work is involved.</p>
<p><img alt="filled timebox" title="filled timebox" src="http://sehlhorst.smugmug.com/photos/64224630-M.png" /></p>
<p>We can estimate the work involved with each use case by any of a number of methods &#8211; but the earliest estimates can be developed using <a title="use case points tutorial" href="http://tynerblain.com/blog/2007/02/12/software-cost-estimation-ucp-1/">use case points</a>.</p>
<p>Consider the following &#8220;work&#8221; measurements, identified for each of our use cases from above:</p>
<p><img alt="prioritize by value with work" title="prioritize by value with work" src="http://sehlhorst.smugmug.com/photos/179245541-M.png" /></p>
<p>We have the same sequence of use case implementation (based on value), but now we can visually see that there are different amounts of work associated with each use case.  The area of each box represents the relative level of effort required to implement the use case.</p>
<h2>Prioritize By Value Results</h2>
<p>The best way to explain the flaw with the classical &#8220;prioritize by value&#8221; approach is to show what happens after the first release.  Consider that you can accomplish 30 units of work in the first release.</p>
<p><img title="empty timebox of size 30" alt="empty timebox of size 30" src="http://sehlhorst.smugmug.com/photos/179245531-M.png" /></p>
<p>We can schedule the first two use cases for this release.  The size of the time-box above represents the amount of work that can be accomplished.  With the first two use cases scheduled, the time-box will look like the following:</p>
<p><img title="first release" alt="first release" src="http://sehlhorst.smugmug.com/photos/179245535-M.png" /></p>
<p>We have completely used up the available capacity of the team (Work = W = 30 = 10 + 20) by delivering the two most valuable use cases.  We have delivered <strong>19 units of value</strong> (Value = V = 10 + 9 = 19).</p>
<h2>Value Maximization</h2>
<p>When we consider both the value (V) and the cost (in terms of work, W) of each use case, we see that some use cases generate more value <em>per unit of work</em> than other use cases.  If we consider the ratios of value to work (V/W), and sort the use cases based on this approach, we would see the following:</p>
<p><img title="ratio order" alt="ratio order" src="http://sehlhorst.smugmug.com/photos/179245567-M.png" /></p>
<p>And with the previous specific value and work values:</p>
<p><img title="value and work in ratio order" alt="value and work in ratio order" src="http://sehlhorst.smugmug.com/photos/179245574-M.png" /></p>
<p>If we were to organize our delivery of use cases based on this ratio, we would be saying &#8220;<strong>prioritize the most effective use cases in terms of value per unit of work</strong>.&#8221;  This may seem counter intuitive, but it makes sense &#8211; get the most bang for the buck earlier, and you will get more value faster.</p>
<p>Consider what our first release would look like:</p>
<p><img title="timebox scheduled by ratio" alt="timebox scheduled by ratio" src="http://sehlhorst.smugmug.com/photos/179245564-M.png" /></p>
<p>We would complete three use cases (using 25 units of available work), and we would deliver <strong>25 units of value</strong>.  We would also be able to start working on one of the use cases that would be delivered in the next release.</p>
<h2>True Maximization</h2>
<p>To find the mathematically proven maximal value, we have to do a bunch more work.  This prioritization exercise is actually an example of the <em>bin-packing problem</em>, an np-complete computer science puzzle.  To make a long story short, we can&#8217;t use a simple heuristic and guarantee that in all cases it will be optimal.  But we can do better than &#8220;most valuable first.&#8221;</p>
<p>If we use the scheduling rule as follows:</p>
<p>Schedule the use cases in order based on the highest value-to-work ratio, skipping use cases that are &#8220;too big&#8221; for the current release.</p>
<p>Then we will get value out of the system as fast as possible.  There are a couple problems with this approach:</p>
<ol>
<li>It does not take into account that you can apply work from one release to a use case that is scheduled in a future release.  Intuitively, any &#8220;remaining time&#8221; after scheduling complete use cases should be spent on the next highest-ratio use case.  I haven&#8217;t proven that mathematically, but it makes sense.</li>
<li>Use cases, and their underlying requirements, and the implementation tasks to support those requirements are not actually independent.  You may need to introduce one use case before another &#8211; the second use case may not be possible without the first one.  Implementing a requirement that is shared across use cases will reduce the &#8220;remaining work&#8221; for those other use cases &#8211; causing a need to recalculate ratios.  Implementation tasks are often dependent upon one another.  The discrete tasks to support a valuable use case may require implementation work that is also leveraged in lower value use cases.  Further, some implementation tasks <em>must</em> be performed sequentially.  You can&#8217;t optimize a query before defining a database schema, for example.</li>
</ol>
<p>The second problem actually applies to any prioritization approach that incorporates value.  The nature of software development introduces constraints (X must be  completed before Y can be started).  Those constraints narrow the possible scheduling choices.  And they make it impractical to determine the &#8220;optimal&#8221; solution.  At least with commercially available tools, excluding expert systems, which can be used to solve this type of problem.</p>
<h2>Conclusion</h2>
<ul>
<li>Sequencing use cases based <em>solely</em> on value does not maximize the delivery of value over time.</li>
<li>Sequencing those use cases based upon the ratio of value to effort will increase the rate at which value is delivered to customers.</li>
<li>It is impractical (and possibly marginally valuable) to determine the optimal sequence for scheduling use cases to maximize value.</li>
</ul>
<p>You should use the &#8220;highest ratio first&#8221; approach, and when a use case can&#8217;t be delivered yet because of interdependencies, skip it.  Also &#8211; apply judgement to sanity check if you are doing something that seems odd &#8211; like delaying a high ratio, high value use case.  Explore with the development team if there are ways to adjust their dependencies to allow for a &#8220;more valuable&#8221; delivery sequence</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Prioritization+and+Value+Maximization+http://bit.ly/4xmnR+" 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/2007/07/31/prioritization-and-value-maximization/&amp;t=Prioritization+and+Value+Maximization" 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/2007/07/31/prioritization-and-value-maximization/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Elastic Users, Actors, and Roles</title>
		<link>http://tynerblain.com/blog/2007/07/23/elastic-users/</link>
		<comments>http://tynerblain.com/blog/2007/07/23/elastic-users/#comments</comments>
		<pubDate>Tue, 24 Jul 2007 02:00:38 +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[Use Cases]]></category>
		<category><![CDATA[action-based role]]></category>
		<category><![CDATA[actors]]></category>
		<category><![CDATA[actors and personas]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[persona and actor]]></category>
		<category><![CDATA[personas]]></category>
		<category><![CDATA[personas and use cases]]></category>
		<category><![CDATA[roles]]></category>
		<category><![CDATA[use cases]]></category>
		<category><![CDATA[user-role-based role]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/07/23/elastic-users/</guid>
		<description><![CDATA[
In About Face 2.0, Alan Cooper describes the elastic user as an ill-defined user who&#8217;s characteristics change to suit the needs of the developer &#8211; sometimes an expert and sometimes a novice.  However, some of the otherwise good techniques for managing actors and use cases exacerbate this problem instead of alleviating it.  How [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="generic stretch armstrong" title="generic stretch armstrong" src="http://sehlhorst.smugmug.com/photos/176167352-M.jpg" /></p>
<p>In <em>About Face 2.0</em>, Alan Cooper describes the elastic user as an ill-defined user who&#8217;s characteristics change to suit the needs of the developer &#8211; sometimes an expert and sometimes a novice.  However, some of the otherwise good techniques for managing actors and use cases exacerbate this problem instead of alleviating it.  How should we manage use cases while still getting the benefits of Cooper&#8217;s insight?</p>
<p><span id="more-545"></span></p>
<h2>Traditional Use Case Actors</h2>
<p>In our previous <a title="actor hierarchies" href="http://tynerblain.com/blog/2006/12/13/actor-hierarchies/">article on actor hierarchies</a>, we showed a method of classifying users based upon their roles.  For example, a simple hierarchy for people who drive cars could look like the following:</p>
<p><img title="car driver actor hierarchy example" alt="car driver actor hierarchy example" src="http://sehlhorst.smugmug.com/photos/116713253-M.png" /></p>
<p>When defining use cases, you <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/">identify the primary actor</a> of the use case.  Secondary actors represent other participants of the use case, not other people who can act as primary actors.  This introduces a problem with keeping track of all of the users who can perform a use case.</p>
<h2>Action-based Roles</h2>
<p>In <em>More About Software Requirements</em>, Karl Wiegers proposes the notion of having <em>action-specific</em> roles.</p>
<p>In Karl&#8217;s example, he presents a use case of &#8220;Request Chemicals&#8221;, with a set of users who may want to request these chemicals:</p>
<ul>
<li>Chemist</li>
<li>Chemical Technician</li>
<li>Stockroom Staff</li>
<li>Lab Manager</li>
</ul>
<p>Each of these four <em>user classes</em> can request chemicals from the stockroom.  Karl proposes identifying the users above as <em>user classes</em>, with an actor <em>role</em> of <strong>Chemical Requester</strong>.  This way, you can define a single use case, with a single primary actor &#8211; the person requesting the chemicals, regardless of what user class the actor is in.</p>
<p>This solution is designed for situations where more than one person could act as the primary actor.  When designing for organizations that have more rigidly defined roles, this is probably most common in manager-subordinate situations.  Subordinates will always do <em>thing X</em>, and their managers will occasionally do it.</p>
<p>The problem is that it treats the unequal users as being equivalent &#8211; making the <em>elastic user problem</em> worse.</p>
<h2>Solving Both Problems At Once</h2>
<p>There is an approach that will effectively address both problems.  It builds on our initial attempts to <a title="interaction design and structured requirements" href="http://tynerblain.com/blog/2006/03/23/interaction-design-and-structured-requirements/">combine interaction design and structured requirements approaches</a>.</p>
<p>The first step in validating a solution to these problems is to make sure we are supporting the primary reasons, or <a title="Eight reasons to write use cases" href="http://tynerblain.com/blog/2006/06/23/the-8-goals-of-use-cases/">goals of writing use cases</a>.  The three highest priority goals are around communicating the <em>intent</em> of what the system has to enable users to do.  The reason for consolidating use cases to improve the efficiency of communication when all of the users have to do the same thing.  So we want to make sure our approach uses a single use case.</p>
<p>The second step is in recognizing and addressing, rather than side-stepping a misunderstanding of use cases.  A formal use case includes both primary and secondary actors.  In our <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/"><em>How to Read a Formal Use Case</em></a> article, we clarify that the primary actor is not the most important actor (with secondary actors being other <em>subjects</em>), but rather that the primary actor is the <em>subject</em> and the secondary actors are other participants (like <em>the system</em>).</p>
<p>While it might be confusing at first, there is nothing to prevent us from having <em>multiple</em> primary actors.  The naming is a little unfortunate and misleading (&#8220;Primary Actor&#8221;), but there is no reason that there can&#8217;t be multiple primary actors.  Each primary actor is <em>one of the subjects</em> who can be following the use case.  The <em>Secondary Actors</em> term is unaffected &#8211; it still represents the other participants in the use case.</p>
<p>When defining these actors, we should <strong>not</strong> use action-based roles, as Karl suggests.  We should keep the user-role-based roles (chemical technician, stockroom staff, etc).  To prevent the <em>elastic-user</em> problem, we should <a title="How to define personas" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">define personas</a> that represent members of the user-roles.</p>
<p>The key to this approach is remembering that a given use case describes <em>what users must do</em>, not <em>how users will do it</em>.  It is imperative that we <a title="Top 5 use case mistakes" href="http://tynerblain.com/blog/2005/12/23/top-five-use-case-blunders/">avoid design cues in the use cases</a>.  One benefit of persona development is that you provide guidance to designers and developers in <em>how they choose to implement</em> to support a use case.</p>
<h2>When Different Users Do It Differently</h2>
<p>As a quick &#8220;what about&#8230;?&#8221; question &#8211; what if the different users have different things they want (e.g. &#8211; it is not an identical use case)?  Variations in the use case should be handled as <em>alternate flows</em> through the use case, with the most common mechanism being the normal flow.</p>
<p>This is a slightly orthogonal problem &#8211; using <em>action-based roles</em> does not address this, nor does persona development.  It can be a problem to keep track of which users use which flows.  If the use cases are sufficiently different for different users, then the right answer may be to make separate use cases.  And if you implement different flows in different releases, that introduces another problem.  Neither of which is made worse or otherwise addressed by this approach.  We&#8217;ll leave that topic for a different article.</p>
<h2>From the Implementer&#8217;s View</h2>
<p>With this approach, the developer and designer will see the following:</p>
<ol>
<li>A use case, such as &#8220;Request Chemicals&#8221;.</li>
<li>A list of the primary actors, or subjects, of the use case (chemical technician, stockroom staff, etc).</li>
<li>For each user-role based actor in the list, there will be at least one persona that represents the relevant user population.</li>
</ol>
<p>The designer can then design implementations of the use case that will be good designs for the persona that represent the primary actors of the use case.  The designer may need to make trade-offs between expert and novice interfaces &#8211; but it is no longer arbitrary, it is explicit.</p>
<h2>Summary</h2>
<p>There is a challenge in designing user interfaces that incorporate the (personal) needs of the people who will be using the system.  Personas are very effective tools for conveying an understanding of user populations that will result in good design decisions.  We can associate those personas with the groups they represent through user-role based actor definitions.  And we can map those actors to the use cases they perform.  Allowing for multiple primary users of a use case, we avoid the need to duplicate use cases when multiple actors may perform the same use case &#8211; without undermining our solution to the elastic user problem.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Elastic+Users%2C+Actors%2C+and+Roles+http://bit.ly/yGJcB+" 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/2007/07/23/elastic-users/&amp;t=Elastic+Users%2C+Actors%2C+and+Roles" 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/2007/07/23/elastic-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Case Example With Business Rules</title>
		<link>http://tynerblain.com/blog/2007/07/16/use-case-example-with-business-rules/</link>
		<comments>http://tynerblain.com/blog/2007/07/16/use-case-example-with-business-rules/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 05:31:34 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[business rules and use cases]]></category>
		<category><![CDATA[edm]]></category>
		<category><![CDATA[embedded business rules]]></category>
		<category><![CDATA[embedded decisions]]></category>
		<category><![CDATA[embedded rules]]></category>
		<category><![CDATA[implicit decisions]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[use case rules]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/07/16/use-case-example-with-business-rules/</guid>
		<description><![CDATA[
In our ongoing exploration of how to meld the worlds of business rules and requirements, we look at an example use case and see how to extract the business rules.

Separating Business Rules From Requirements
In our earlier article we described one benefit of separating business rules from requirements.  That article explored the benefit that we [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="atm " title="atm " src="http://sehlhorst.smugmug.com/photos/173859544-M.jpg" /></p>
<p>In our ongoing exploration of how to <a title="business rules and requirements" href="http://tynerblain.com/blog/2007/07/10/rules-and-requirements-early-thoughts/">meld the worlds of business rules and requirements</a>, we look at an example use case and see how to extract the business rules.</p>
<p><span id="more-541"></span></p>
<h2>Separating Business Rules From Requirements</h2>
<p>In our earlier article we described one benefit of <a title="separating business rules from requirements" href="http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/">separating business rules from requirements</a>.  That article explored the benefit that we get from spending less time defining requirements and less time interpreting requirements.  Ultimately, we spend less time developing our software as a result.</p>
<p>Business rules tend to be embedded in <a title="intro to structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements artifacts</a> because those rules tend to be uncovered during <a title="top 5 requirements elicitation tips" href="http://tynerblain.com/blog/2006/01/14/top-five-requirements-gathering-tips/">elicitation activities for the requirements</a>.  One very common and powerful artifact is the <a title="intro to use case series" href="http://tynerblain.com/blog/2005/12/18/use-case-series-introduction/">use case</a>.  And business rules often get embedded in use cases.  We&#8217;ll look at an example.</p>
<h2>Use Case Example</h2>
<p>In <em>Patterns for Effective Use Cases</em>, by Steve Adolph and Paul Bramble, we find an example that shows several opportunities to embed (or more importantly, to abstract) business rules.  The authors (there&#8217;s a link to the book at amazon at the top of this article in the <em>Recommended Reading</em> box) do a fantastic job of providing examples, both good and bad, that highlight behaviors common in use case development.  It is a great resource, and if you are anything short of a use case expert, you should own this book.</p>
<p>Use Case 6.9, from p.160 of the book is a use case for withdrawing cash from an ATM.  I&#8217;m retyping and editing it for our example &#8211; all mistakes are mine:</p>
<p>Name: Withdraw Cash</p>
<p>Primary Actor: Account Holder</p>
<p>Normal Flow:</p>
<ol>
<li>User inserts his ATM card.</li>
<li>System reads and validates the card information.</li>
<li>User selects transaction and enters transaction details.</li>
<li>System validates transaction details.</li>
<li>User collects cash and withdraws card.</li>
<li>System updates the account and resets the system.</li>
</ol>
<h2>Finding Rules-Extraction Opportunities</h2>
<p>The same normal flow from above is duplicated below, but with <strong>bold</strong> text to identify places where there is an opportunity to abstract business rules.  We will look at each example.<br />
Normal Flow:</p>
<ol>
<li>User inserts his ATM card.</li>
<li>System reads and <strong>validates the card information</strong>.</li>
<li>User <strong>selects transaction</strong> and enters transaction details.</li>
<li>System <strong>validates transaction details</strong>.</li>
<li>User collects cash and withdraws card.</li>
<li>System <strong>updates the account</strong> and resets the system.</li>
</ol>
<p>Looking at each opportunity&#8230;</p>
<ul>
<li><strong>Validates the card information</strong>.  What does it mean to validate the information?  What information must be on the card?  Possibly only the account number.  Perhaps both the account number and an encrypted copy of the account number.  Since a bank almost certainly maintains unique account numbers, and people&#8217;s names are never reasonably unique, the name of the account holder is redundant information &#8211; but it may be used as a redundant piece of information in a set of validation rules.  Regardless, the validation <em>criteria</em> represent a <em>decision</em> &#8211; which is determined by a set of rules.</li>
<li><strong>Selects transaction</strong>.  What is the set of possible transactions for the machine?  That list of transactions may change over time.  Are different types of transactions allowed for different accounts?  While not an <em>explicit</em> decision &#8211; the list of transactions implies an implicit decision of what transactions the system must support.</li>
<li><strong>Validates transaction details</strong>.  There will be validation rules associated with every transaction.  What types of accounts can be used to transfer money to other accounts?  What are the maximum and minimum withdrawal amounts?  And do those vary for account holders (maybe high balance accounts allow larger withdrawals, or maybe account holders can restrict the withdrawal amounts for secondary card holders)?  Each possible transaction will have a set of allowable actions / valid details.</li>
<li><strong>Updates the account</strong>.  Perhaps service charges are made (or waived) based on a set of criteria.  Maybe people with multiple accounts get free withdrawals.  Perhaps the fees (charged by the machines) are paid by the bank and credited to the account.</li>
</ul>
<p>Instead of writing requirements that specify these details, we should abstract out the rules (e.g. &#8220;See transaction list XYZ&#8221;).</p>
<h2>Summary</h2>
<p>[Ed: Added 2007-07-17, thanks Bengt for pointing out that this was missing.]</p>
<p>The requirements discovery and elicitation process uncovers both requirements and rules.  While not a formal definition, rules are &#8220;discrete requirements&#8221;, in that they should be managed differently.  Rules can be changed independently of requirements &#8211; the transaction-validation rules, for example, do not need to be defined in order to write the software, and should be easy to change once the software is written.  Rules may represent <em>constraints</em>, as Roger alludes in the first comment in the discussion below &#8211; such as regulatory compliance, or fraud-risk policies that are independent of the ATM interface/process design.  Rules may also be implicitly reflected, again, as Roger points out &#8211; such as a rule that requires an account to be verified prior to processing a transaction.</p>
<p>In all of these cases, the frequency of change, people responsible for the changes, or the impact on consumers of rules and requirements encourages us to abstract the rules from the requirements.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Use+Case+Example+With+Business+Rules+http://bit.ly/wf99x+" 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/2007/07/16/use-case-example-with-business-rules/&amp;t=Use+Case+Example+With+Business+Rules" 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/2007/07/16/use-case-example-with-business-rules/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Benefits of Agile Story Decomposition</title>
		<link>http://tynerblain.com/blog/2007/06/27/benefits-of-agile-stories/</link>
		<comments>http://tynerblain.com/blog/2007/06/27/benefits-of-agile-stories/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 04:55:02 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[managing releases]]></category>
		<category><![CDATA[managing software releases]]></category>
		<category><![CDATA[software release schedule]]></category>
		<category><![CDATA[tasks]]></category>
		<category><![CDATA[user stories]]></category>
		<category><![CDATA[user story]]></category>
		<category><![CDATA[user story break down]]></category>
		<category><![CDATA[user story decomposition]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/06/27/benefits-of-agile-stories/</guid>
		<description><![CDATA[
When you plan a release, agile user stories, or classic use cases are the best sized pieces to use in the planning &#8211; from the perspective of your customers.  Each user story can be further decomposed into a set of specifications, and those into development tasks.  Development tasks are the right sized unit [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="open book" title="open book" src="http://sehlhorst.smugmug.com/photos/60909481-M.jpg" /></p>
<p>When you plan a release, agile user stories, or classic use cases are the best sized pieces to use in the planning &#8211; from the perspective of your customers.  Each user story can be further decomposed into a set of specifications, and those into development tasks.  Development tasks are the right sized unit to manage your work breakdown structure &#8211; communicating the release schedule <em>internally</em> with your development team.</p>
<p><span id="more-528"></span></p>
<h2>Overview of Structure</h2>
<p>Even agile projects benefit from having a structured perspective on why and how to develop the software.</p>
<ul>
<li>Customers have goals, and those goals have value.</li>
<li>Those goals are achieved through user stories (or use cases).</li>
<li>Capabilities, usually defined in a specification,  enable people to execute the stories.</li>
<li>Development tasks represent the work that must be done to implement those capabilities.</li>
<li>Tests can be defined to validate the capabilities, and assure that code is working as-designed.</li>
</ul>
<h2>Scheduling Releases</h2>
<p>We&#8217;ve written before about <a title="use cases and release schedules" href="http://tynerblain.com/blog/2005/12/22/communicating-a-delivery-schedule-with-use-cases/">communicating a release schedule with use cases</a>.  The fundamental concept is that you need to deliver actionable, valuable capabilities with each release.  Since customers get value from goals by executing use cases, you need to deliver a complete use case (or user story) for the customer to get value from it.  This also helps with the &#8220;why do I care about release X?&#8221; question &#8211; because it provides value.</p>
<p>Although your customers don&#8217;t need to know which development tasks are included in what release, your team does.  And as a point of clarification, when you are scheduling the work that fits in the <a title="time box scheduling" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">time box for a release</a>, you absolutely can schedule tasks that do not add up to a complete use case.  Sometimes all of the work required to implement a single use case can&#8217;t fit within a single time box.  And there&#8217;s no particular benefit to trying to force it to always happen that way.  It is more important to schedule the most valuable use cases (or user stories) first.  And then communicate to your customers the releases in which those use cases are completed.</p>
<h2>Nine Development Team Benefits</h2>
<p>Doug Blis, at Visionpace, just wrote a good article listing <a title="dividing into tasks" href="http://blog.visionpace.com/2007/06/why_use_tasks.html">nine reasons to divide user stories into tasks</a>.  He provides a couple of paragraphs of detail on each of the following reasons:</p>
<ol>
<li>Iteration Planning</li>
<li>Iteration Burndown</li>
<li>Accountability</li>
<li>Shared &#038; Individual Learning</li>
<li>Tasks Encourage Better Design</li>
<li>Forecasting Velocity</li>
<li>Tasks Serve as Reminders</li>
<li>Talk to the Dog</li>
<li>What if you hear &#8220;can&#8217;t/won&#8217;t task?&#8221;</li>
</ol>
<p>These are all excellent <em>how do we improve as a development team</em> benefits.  Managing your development team&#8217;s efforts at the task level provides enough data-points to improve, without being so much work that it hinders.  Tasks are also the perfect size for extrapolation and improved estimation on future projects.</p>
<h2>Getting Bigger Picture Benefits</h2>
<p>In addition to your development team getting better by using tasks, you can improve your overall software delivery process.  The key is to be able to clearly define the traceability for the project.  Traceability won&#8217;t really help the development team get better at developing (which may be why not many agile proponents talk about it).  But it will help you manage your project, and therefore the release schedule for your product.  And that allows you to improve your relationships with your customers.</p>
<p>Better forecasting of tasks (combined with traceability) yields better forecasting of capabilities.  And this also leads to better forecasting of user stories (or use cases).  This allows you to spend less time <a title="Scheduling Requirements Changes" href="http://tynerblain.com/blog/2006/04/10/scheduling-requirements-changes-part-1/">dealing with changes to the schedule</a> &#8211; and more time focusing on finding huge value for your customers.  And fewer schedule changes result in better relationships, more trust, and higher profit (when you can leverage that trust into higher prices, and when you avoid the costs of schedule changes).<br />
Do it so your development team gets better.  And do it so you deliver better products, and build better relationships.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Benefits+of+Agile+Story+Decomposition+http://bit.ly/92Y0q+" 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/2007/06/27/benefits-of-agile-stories/&amp;t=Benefits+of+Agile+Story+Decomposition" 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/2007/06/27/benefits-of-agile-stories/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nexus &#8211; Use Case Definition for Bundles</title>
		<link>http://tynerblain.com/blog/2007/05/23/nexus-bundle-use-cases/</link>
		<comments>http://tynerblain.com/blog/2007/05/23/nexus-bundle-use-cases/#comments</comments>
		<pubDate>Wed, 23 May 2007 23:54:31 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Project: Ratings]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[agile case study]]></category>
		<category><![CDATA[agile project]]></category>
		<category><![CDATA[agile requirements management]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[nexus]]></category>
		<category><![CDATA[use case briefs]]></category>
		<category><![CDATA[use case definition]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/05/23/nexus-bundle-use-cases/</guid>
		<description><![CDATA[
Yesterday, we identified the high priority goal for the third release of nexus to be supporting creation of bundles of articles.  In this article, we will define the use cases we need to support.

Defining The Use Cases
The first step in defining the use cases is to review the scope and vision for the product. [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="bundle of books" title="bundle of books" style="width: 250px; height: 187px" src="http://sehlhorst.smugmug.com/photos/155645464-M.jpg" /></p>
<p>Yesterday, we identified the <a title="Prioritizing nexus use cases" href="http://tynerblain.com/blog/2007/05/22/nexus-third-release-prioritization/">high priority goal for the third release of nexus</a> to be supporting creation of <em>bundles </em>of articles.  In this article, we will define the use cases we need to support.</p>
<p><span id="more-503"></span></p>
<h2>Defining The Use Cases</h2>
<p>The <a title="How to start use cases" href="http://tynerblain.com/blog/2007/03/28/how-to-start-use-cases/">first step in defining the use cases</a> is to review the<a title="Defining the nexus scope and vision" href="http://tynerblain.com/blog/2007/04/20/apr-scope-and-vision-vote-1/"> scope and vision for the product</a>.  Once we&#8217;re sure we&#8217;re operating within the scope, we review the goals of <a title="Defining the nexus personas" href="http://tynerblain.com/blog/2007/04/23/apr-persona/">our personas</a>, and then we <a title="Defining use case names" href="http://tynerblain.com/blog/2007/04/23/apr-use-case-names/">define the use case names</a>.  The next iteration of the use cases is in the form of <a title="nexus use case briefs" href="http://tynerblain.com/blog/2007/04/24/apr-use-case-briefs/">use case briefs</a>.  And finally informal use cases.  This <a title="Agile use case development" href="http://tynerblain.com/blog/2007/04/02/agile-development-of-use-cases/">agile approach to use case definition</a> seems like a lot of work, but the mechanics don&#8217;t take very long &#8211; most of the time is actually productive time spent thinking about the use cases.  And the effort of writing a few things down introduces some implicit refactoring and editing.  An <a title="Stakeholder Analysis" href="http://tynerblain.com/blog/2007/03/13/visualize-stakeholder-analysis/">analysis of the stakeholders</a> at this stage will help identify any missing use cases &#8211; it helped us identify a missing one, as we&#8217;ll see below.</p>
<h2>Scope and Vision Analysis</h2>
<p>We reviewed the scope and vision yesterday as part of defining the goal for the release.  The goal of bundles is to leverage the effect that <em>the whole is greater than the sum of the parts</em> to leverage articles from nexus to create valuable <em>meta-artifacts</em> that combine articles into cohesive collections, designed to achieve particular objectives.  At a sound-bite level, people combine articles into bundles, and people will consume the collections of articles found in a bundle.</p>
<h2>Persona Goals</h2>
<p>We initially focused on <a title="nexus Use Case Names and practical goals" href="http://tynerblain.com/blog/2007/04/23/apr-use-case-names/">Paul the product manager&#8217;s goal</a> of sharing ideas, and started sketching out some design concepts based on how Paul might want to create his bundles.  Those sketches helped keep us on target as we moved forward on use cases.  From a classical requirements definition perspective, they were a bit of a segue.  From an interaction design perspective, they were important embodiments of the ideas.</p>
<p>We actually missed a persona goal, until we did a quick stakeholder analysis.  Until we reviewed the stakeholders, we completely forgot about consumption of the bundles &#8211; we had focused only on their creation.</p>
<p>All of our personas would be consumers of the bundles, with the possible exception of Brian the blogger, who is focused more on getting information out to others than pulling information in.  Brian may be a bundle creator &#8211; he probably already creates summary-posts on his blog that collect multiple articles together.  He can use bundles as a secondary means to organize his articles, or to combine his thoughts with others.</p>
<h2>Use Case Names</h2>
<p>The use case names we initially defined for the bundle-creators are</p>
<ul>
<li>Create a Bundle of Articles.</li>
<li>Update a Bundle of Articles.</li>
</ul>
<p>After reviewing the needs of other stakeholders, we added</p>
<ul>
<li>Study a Bundle of Articles.</li>
</ul>
<p>Considering both the consumption and creation of bundles will definitely affect how we design the interactions and the implementation.</p>
<h2>Use Case Briefs</h2>
<p><strong>Create a Bundle of Articles</strong> (Paul the product manager is the primary user, Jill the business analyst is secondary)<br />
Paul defines the topic and a brief explanation of the goal of the bundle (to teach a new product manager how to write use cases).  Paul creates an outline of the topics to cover in the bundle, organizing his thoughts and the topics.  Paul then begins inserting existing nexus articles into the bundle at each point in the outline.  Alternately, Paul may need to submit some articles to nexus in order to include them in the bundles.</p>
<p><strong>Update a Bundle of Articles</strong> (Paul the product manager is the primary user, Jill is secondary)</p>
<p>Paul returns to an existing bundle, and adds new articles to it.  Alternately, Jill adds an article to a bundle that she is studying to &#8220;complete&#8221; it from her perspective.<br />
This raises an interesting question &#8211; should people collaborate on bundles?  Or should it be single-author?  I&#8217;m leaning towards collaboration, or an implementation that allows people to control it (e.g. make a bundle &#8220;open&#8221; for anyone to edit, or closed).</p>
<p><strong>Study a Bundle of Articles</strong> (Jill and Ellen are primary, Paul is secondary)</p>
<p>Jill browses the available bundles in a particular topic area, and finds one that looks interesting.  The bundle is a tutorial on how to write use cases for a project.  She starts by reading the first articles, leaves nexus, and returns later.  On each visit to the site she gradually reads the articles, occasionally rating the articles and providing feedback on them.  Jill also provides feedback about ways to improve the bundle.</p>
<p>This use case would be greatly facilitated if there were a way to manually or automatically track which articles Jill has already read.</p>
<h2>Stakeholder Analysis</h2>
<p>Stakeholder analysis is important because it identifies who cares about a particular feature or functionality.  It can be very effective for finding missing use cases &#8211; usually because of a focus on the indirect users of a product.  For example, an accountant may generate reports with a product, which are then delivered to a regional manager.  Although the regional manager does not use the software, her needs must be addressed when generating the report.</p>
<p>In the analysis of bundles, we initially overlooked the consumption of bundles.  This was immediately obvious when we started to think through how they would be used.  We went back and added the <em>Study a Bundle</em> use case.  We also uncovered the possibility of a consumer becoming a collaborator on a bundle.</p>
<h2>Summary</h2>
<p>This analysis of use cases presents us with the inputs we need for designing the interactions, and defining the specifications for the bundles.  The &#8220;under the hood&#8221; implementation will probably be very straightforward, while the user interface work will be more significant.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Nexus+%E2%80%93+Use+Case+Definition+for+Bundles+http://bit.ly/4rauWg+" 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/2007/05/23/nexus-bundle-use-cases/&amp;t=Nexus+%E2%80%93+Use+Case+Definition+for+Bundles" 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/2007/05/23/nexus-bundle-use-cases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APR: Mixing It Up With Design And Requirements</title>
		<link>http://tynerblain.com/blog/2007/04/25/apr-mixing-it-up/</link>
		<comments>http://tynerblain.com/blog/2007/04/25/apr-mixing-it-up/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 01:46:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Project: Ratings]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[agile case study]]></category>
		<category><![CDATA[agile project]]></category>
		<category><![CDATA[agile requirements management]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/04/25/apr-mixing-it-up/</guid>
		<description><![CDATA[
With a definition of the important use cases for our agile project, we can move to the logical next step &#8211; which is what exactly?
Prototyping.
Depending on which discipline is dominant in the project approach, the next step could be to define the functional requirements  (or specification) that support the use cases.  Or it [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="prototyping flow" title="prototyping flow" src="http://sehlhorst.smugmug.com/photos/146822363-M.jpg" /><br />
With a definition of the important use cases for our agile project, we can move to the logical next step &#8211; which is what exactly?</p>
<p><strong>Prototyping.</strong></p>
<p><span id="more-475"></span>Depending on which discipline is dominant in the project approach, the next step could be to define the functional requirements  (or specification) that support the use cases.  Or it could be to take  user-centric approach to prototyping interface elements.  Or it could be developing an understanding of the domain model that will drive the behavior of the site.</p>
<h2>Functional Prototyping</h2>
<p>Ruby on Rails (Rails, for short) makes rapid prototyping of the &#8220;under the hood&#8221; stuff appear to be very quick to develop.  And Rails separates the presentation from the logic with a model-view-controller approach to code structure.  From the reading I&#8217;ve done about Rails, the next step needed to get an interactive prototype is to define the representational model.</p>
<p>In the better object oriented programs I&#8217;ve worked on in the past, the underlying representation matches the user&#8217;s conceptual model as well as possible.  This will be challenging to not confuse the two and expose the implementation to the users.  I&#8217;m not sure what differences will exist between them, we&#8217;ll see when we explore this.  Creating a UML static diagram of both will help.</p>
<h2>UI Prototyping</h2>
<p>Creating some mockups of the user interface and documenting some design elements and interaction ideas will help here.  I started that process last night and have the first initial thoughts drawn on paper.  I will scan those in and post them as paper prototypes.</p>
<h2>Documenting Requirements</h2>
<p>If we were using a purely structured requirements approach, we would create an SRS at this stage. In conjunction with this prototyping approach, we will capture those same requirements.  The requirements will be defined in the context of <a title="Prioritizing Use Cases" href="http://tynerblain.com/blog/2007/04/25/apr-prioritizing-use-cases-1/">the individual use cases that we are focusing on</a> for the first release.  Don&#8217;t forget to vote on the use cases if you haven&#8217;t already.</p>
<h2>Iteration</h2>
<p><img title="Concurrency" alt="Concurrency" src="http://sehlhorst.smugmug.com/photos/146822365-M.png" /></p>
<p>This process will be iterative or concurrent.  The goal is to get enough of an understanding of the design to create an initial prototype.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+APR%3A+Mixing+It+Up+With+Design+And+Requirements+http://bit.ly/30bWqG+" 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/2007/04/25/apr-mixing-it-up/&amp;t=APR%3A+Mixing+It+Up+With+Design+And+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/2007/04/25/apr-mixing-it-up/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>APR: Prioritizing Use Cases &#8211; Vote Three Times</title>
		<link>http://tynerblain.com/blog/2007/04/25/apr-prioritizing-use-cases-1/</link>
		<comments>http://tynerblain.com/blog/2007/04/25/apr-prioritizing-use-cases-1/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 14:53:17 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Project: Ratings]]></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[Use Cases]]></category>
		<category><![CDATA[agile case study]]></category>
		<category><![CDATA[agile project]]></category>
		<category><![CDATA[agile requirements management]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[agile use cases]]></category>
		<category><![CDATA[group think]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[prioritizing use cases]]></category>
		<category><![CDATA[use case prioritization]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/04/25/apr-prioritizing-use-cases-1/</guid>
		<description><![CDATA[
In our agile project case study we defined corporate goals and user personas, and from our understanding created a list of use case names.  We refined those use cases into use case briefs, filtering out some of the use cases (for the first revision) narrowing the list to six use cases.  In this [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="dice in order" title="dice in order" src="http://sehlhorst.smugmug.com/photos/146810758-M.jpg" /></p>
<p>In our <a title="Agile Software Development Case Study" href="http://tynerblain.com/blog/2007/04/17/agile-software-development-experiment/">agile project case study</a> we defined <a title="Corporate Goals" href="http://tynerblain.com/blog/2007/04/19/apr-corporate-goals/">corporate goals</a> and <a title="Agile Persona Development" href="http://tynerblain.com/blog/2007/04/23/apr-persona/">user personas</a>, and from <a title="Understanding Our Users" href="http://tynerblain.com/blog/2007/04/19/apr-understanding-users/">our understanding</a> created a list of <a title="Agile Use Case Names" href="http://tynerblain.com/blog/2007/04/23/apr-use-case-names/">use case names</a>.  We refined those use cases into <a title="Agile Use Case Briefs" href="http://tynerblain.com/blog/2007/04/24/apr-use-case-briefs/">use case briefs</a>, filtering out some of the use cases (for the first revision) narrowing the list to six use cases.  In this article, we propose a prioritization of those use cases and ask you to vote to share your thoughts.</p>
<p><span id="more-474"></span></p>
<h2>Use Cases</h2>
<p>Here is the list of use cases that we&#8217;ve already defined, presented in what we think the priority order should be.  Each use case lists the (primary &#038; secondary) actors after the name of the use case.  There appears to be an obvious separation of <a title="Scheduling Requirements Across Releases" href="http://tynerblain.com/blog/2006/03/08/prioritizing-software-requirements-across-releases/">what to do first and what to do second</a>.  Each item also includes &#8220;first&#8221; or &#8220;second&#8221; in which represents <a title="Scheduling Use Cases Across Releases" href="http://tynerblain.com/blog/2006/07/19/communicating-a-release-schedule-with-use-cases/">scheduling use cases across releases</a>.  Each use case should be &#8220;completely released&#8221; within a single release (even if some of the functionality is quietly implemented during an earlier release cycle to make <a title="Using timeboxes to schedule delivery" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">timeboxing</a> more manageable).</p>
<p>Following the list is our thought process for proposing this order of importance.  After that rationalization, we have three polls for you to vote on what should be included first.  There are three identical polls to allow each of you to vote three times.  We&#8217;re presenting the votes this way in order to <a title="Getting Value From Brainstorming" href="http://tynerblain.com/blog/2006/09/27/getting-value-from-brainstorming/">allow you to express &#8220;passion&#8221; for a particular item</a> &#8211; you can vote on the same item three times if you want (the results will be combined).</p>
<ol>
<li>Browse An Area (Jill &#038; Paul + Ellen).  First.</li>
<li>Suggest An Article [Version 1] (Paul &#038; All). First.</li>
<li>Rate An Article (Jill &#038; All).  First.</li>
<li>Search For A Topic (Jill &#038; Paul + Ellen). Second.</li>
<li>Broadcast An Article (Paul). Second.</li>
<li>Comment On An Article (Paul &#038; All). Second</li>
</ol>
<h2>Prioritizing The Use Cases</h2>
<p>The first question is the chicken and the egg question.  How can users browse without the ability to suggest?  We put browsing first because browsing will happen much more frequently than suggesting.  Note that version 1 of suggesting is the one we are prioritizing (user must submit the article through the site).  Versions 2 and 3 are lower priority than the other 5 use cases here &#8211; if you disagree, please join in the discussion on this article and we will revisit.</p>
<p>Rating of articles follows immediately, because rating the articles makes browsing better, but you could browse without a rating.   Ratings are placed ahead of searching because we think that searching is a &#8220;<a title="Prioritizing With Kano" href="http://tynerblain.com/blog/2006/02/27/prioritizing-software-requirements-kano-take-two/">more is better</a>&#8221; capability, where &#8220;rating&#8221; is one that is intrinsic to the nature of this site being effective.  An interesting <a title="visualizing social networks" href="http://nform.ca/publications/social-software-building-block">article from nForm on social networks</a> provided some thought-guidance on visualizing the characteristics of a social network.  Hat tip to <a title="Leisa's links for the day" href="http://www.disambiguity.com/links-for-2007-04-20/">Leisa at disambiguity</a> for the reference.</p>
<p>Broadcasting slightly nudged out commenting because we think the ability to &#8220;market&#8221; the site will be more important when the site is first starting out &#8211; trying to reach a tipping point where the aggregate user contributions just &#8220;make it work.&#8221;</p>
<h2>Voting To Promote Use Cases</h2>
<p>Enter each of your votes here for the use cases that you believe should be in the first release (you may disagree with our analysis).  If you want to share your thoughts, please include them in the discussion for this article &#8211; it may help convince others that your approach is better (getting more votes for your use case).</p>
<p>[poll=7]</p>
<p>[poll=8]</p>
<p>[poll=9]</p>
<p>Thanks for your votes, and if you selected &#8220;Other&#8221; &#8211; please explain in the discussion below.  Note: I have placed two votes for Browse and one for Suggest &#8211; to show that I think browsing and suggesting are the most important use cases, and because I think browsing is more important that searching (which could work as an alternative approach).</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+APR%3A+Prioritizing+Use+Cases+%E2%80%93+Vote+Three+Times+http://bit.ly/rR3Fs+" 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/2007/04/25/apr-prioritizing-use-cases-1/&amp;t=APR%3A+Prioritizing+Use+Cases+%E2%80%93+Vote+Three+Times" 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/2007/04/25/apr-prioritizing-use-cases-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>APR: Use Case Briefs</title>
		<link>http://tynerblain.com/blog/2007/04/24/apr-use-case-briefs/</link>
		<comments>http://tynerblain.com/blog/2007/04/24/apr-use-case-briefs/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 22:38:26 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Project: Ratings]]></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[Use Cases]]></category>
		<category><![CDATA[agile case study]]></category>
		<category><![CDATA[agile project]]></category>
		<category><![CDATA[agile requirements management]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[example use cases]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[sample use case examples]]></category>
		<category><![CDATA[sample use cases]]></category>
		<category><![CDATA[use case examples]]></category>
		<category><![CDATA[use case samples]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/04/24/apr-use-case-briefs/</guid>
		<description><![CDATA[
Each of the use cases defined as part of our use case names post is described at a high level of detail here.  The goal is to get a broad view of the domain for our project so that we can focus on the most important elements.  This is a key step in [...]]]></description>
			<content:encoded><![CDATA[<p><img title="briefcase" alt="briefcase" src="http://sehlhorst.smugmug.com/photos/146586419-M.jpg" /></p>
<p>Each of the use cases defined as part of our <a title="Defining Use Case Names for an Agile Project" href="http://tynerblain.com/blog/2007/04/23/apr-use-case-names/">use case names post</a> is described at a high level of detail here.  The goal is to get a broad view of the domain for <a title="Agile Software Development Project" href="http://tynerblain.com/blog/2007/04/17/agile-software-development-experiment/">our project</a> so that we can focus on the most important elements.  This is a key step in <a title="Agile Development of Use Cases" href="http://tynerblain.com/blog/2007/04/02/agile-development-of-use-cases/">using use cases in an agile project</a>.  We need to understand enough of the big picture in order to determine what is actually the most important.  Then we will work on the more important use cases.</p>
<p><span id="more-473"></span></p>
<h2>Pre-emptive Filtering</h2>
<p>After reviewing the use case names, we can pre-emptively filter out several of the use cases for this stage of the analysis.  If you feel that any of these should be included in the initial release, please comment in the discussion area of this article, and we will revisit.</p>
<ul>
<li>The &#8220;Promote An Article&#8221; use case &#8211; where a blogger promotes their own work for review or publicity will be deferred until after the general sharing of articles has been implemented.  The first version of &#8220;Suggest An Article&#8221; will serve as a means for the blogger to achieve his goals &#8211; it will just happen to be suggesting an article that the blogger has written himself.  Brian won&#8217;t mind, as long as any functionality is retro-active (and that would make sense anyway, if he were to discover that someone else had promoted one of his articles before he did).</li>
<li>The &#8220;Article Mashup&#8221; use cases will also be deferred from the inital release.  While we think this functionality may provide a differentiating hook and significant value, it make sense to wait.  Each mashup will be a mashup of articles that have already been suggested.  So we need to have articles being suggested before we can start collecting them into mashups.  As of right now, this will probably be the most valuable feature to follow &#8220;article scoring&#8221; features.  We&#8217;ll revisit of course &#8211; that&#8217;s just a hunch.</li>
</ul>
<h2>Use Case Briefs</h2>
<p>Excluding those use cases that are filtered per the above.  We&#8217;re using the <em>use case brief</em> format explained in this <a title="Use Case Brief Example" href="http://tynerblain.com/blog/2007/04/09/sample-use-case-example/">sample use case article</a>.  The actors are being identified in terms of <a title="Agile Project Personas" href="http://tynerblain.com/blog/2007/04/23/apr-persona/">the personas</a> we identified.</p>
<p><strong>Use Case Name: Browse An Area</strong></p>
<p><strong>Actors</strong>: Jill (Primary), Paul &#038; Ellen (Secondary)</p>
<p>The user is exploring an area to see if there is an article that &#8220;jumps out&#8221; as being interesting.  This could be an exploration of a new area &#8211; trying to get the lay of the land.  It could also be simply browsing an area that the user knows well, to see if something new or interesting has been written lately.  The need to &#8220;only read something really good&#8221; is reduced a little here &#8211; the mode of searching is semi-directed, idle investigation.  This is the usage mode that is most likely to have people &#8220;stumble upon&#8221; an article and score it.</p>
<p>Question: Should the &#8220;what&#8217;s hot right now&#8221; mode of browsing be included in this use case?  Think about the &#8220;watch the front page of digg.com&#8221; model &#8211; the <em>area</em> is our entire niche, not a section of it &#8211; but the idea is the same.</p>
<p><strong>Use Case Name: Search For A Topic</strong></p>
<p><strong>Actors</strong>:  Jill (Primary), Paul &#038; Ellen (Secondary)</p>
<p>The user is looking for articles on a specific topic, and wants to read the best articles first (or only!).  This type of searching would not neccesarily be constrained by topic area &#8211; the user may want to actively find cross-posted articles (for example an &#8220;agile&#8221; article on use cases).  They key element is that the user wants to research a specific topic.</p>
<p><strong>Use Case Name: Rate An Article</strong></p>
<p><strong>Actors</strong>: Jill (Primary), All (Secondary)</p>
<p>The user has just read an article found by browsing or searching. The user will provide a &#8220;recommendation&#8221; &#8211; should people make sure that they read this or skip it.  The user will also optionally identify if they think this article is targetted at beginners or experts (is it an explanation of how parallel activities work in BPMN, or is it a discussion of how you can create deadlock conditions in a BPMN diagram?).</p>
<p>Question: Should rating an article require users to be logged in?  Mainstream sites use this approach, which probably prevents the worst gaming of the system, in exchange for the potentially tedious step of logging in.</p>
<p>Question: Should users be able to &#8220;recategorize&#8221; articles if they feel like something was overlooked, or the article were incorrectly classified (e.g. had nothing to do with use cases, but was tagged &#8220;use case&#8221;)?</p>
<p><strong>Use Case Name: Broadcast An Article</strong></p>
<p><strong>Actors</strong>: Paul (Primary)</p>
<p>The user will want to share a particular article with people who are not part of the community on the site.  After optionally rating an article, the user will identify some people to email the article to.  Those people are probably coworkers or former colleagues who the user believes will benefit from reading the article.<br />
Email was suggested as the communication method, and we&#8217;ll use the term &#8216;email&#8217; as a proxy for &#8220;tell non-users about an article&#8221; for now.  This will be less cumbersome than jumping through hoops to avoid saying &#8216;email.&#8217;</p>
<p>Thought: This capability may also be used for other &#8220;check this out&#8221; goals &#8211;  we should prioritize the &#8220;you should read this&#8221; goal when defining requirements / designing this functionality.  Other goals may be identified in the future.</p>
<p><strong>Use Case Name: Comment On An Article</strong></p>
<p><strong>Actors</strong>: Paul (Primary), All (Secondary)</p>
<p>The user will optionally add a comment or notation to an article after rating it.  Comments are great qualitative feedback to help other users decide between articles that they find as part of searching or browsing &#8211; but it is &#8220;second order&#8221; feedback that helps someone refine their search.  The &#8220;first order&#8221; feedback is created via the &#8220;Rate An Article&#8221; use case.</p>
<p>Thought: A secondary use of this capability could be to ask questions or develop a conversation around an article (eg &#8220;This Worked for Us&#8221; or &#8220;Had anyone actually done this?&#8221;  Not all articles are published such that their authors encourage on-site conversations like this.  Having this facility will help users, and possibly authors.</p>
<p>Thought: Requiring someone to have rated an article prior to commenting will help with spam.</p>
<p><strong>Use Case Name: Suggest An Article</strong></p>
<p><strong>Actors</strong>: Paul (Primary), All (Secondary)</p>
<p>Thought: Brian is <em>almost</em> a primary user of this use case, given the filtering of Brian&#8217;s use case from the initial release.  He would be treated as a <em>supplementary</em> persona for this use case &#8211; using functionality designed for Paul without modification.</p>
<p>The user has discovered a great article for our niche and wants to include it in the site for others to read and review.  The user will add the article to the site and optionally rate it.  The user may also specify the tags/categories for which the article applies, and may classify the article as being for beginners or experts.<br />
Version 1: The first version of this use case will require the user to be logged into the site, and enter the URL of the article directly into a form on the page.</p>
<p>Version 2: The second version of this use case may allow users to use a widget (like stumbleupon, or other widgets created for other sites like digg and delicious) to suggest an article with less interruption to their other browsing.</p>
<p>Version 3: A third version of this use case may allow users to unobtrusively leverage other external activities to automate all or part of the submission process.  For example, automatically submitting any del.icio.us articles with a specific tag, or allowing a blogger to &#8220;trackback&#8221; to the site and initiate a suggestion.</p>
<p>Question: Should users be forced to rate an article when submitting it?</p>
<h2>Summary</h2>
<p>This overview paints the domain of our project (as defined in the <a title="Project Scope and Vision Document" href="http://tynerblain.com/blog/2007/04/20/apr-scope-and-vision-vote-1/">scope and vision article</a>) with a broad brush.  It allows us to take the next step of prioritizing the use cases.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+APR%3A+Use+Case+Briefs+http://bit.ly/oGsxy+" 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/2007/04/24/apr-use-case-briefs/&amp;t=APR%3A+Use+Case+Briefs" 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/2007/04/24/apr-use-case-briefs/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>APR: Use Case Names</title>
		<link>http://tynerblain.com/blog/2007/04/23/apr-use-case-names/</link>
		<comments>http://tynerblain.com/blog/2007/04/23/apr-use-case-names/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 04:53:17 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Project: Ratings]]></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[Use Cases]]></category>
		<category><![CDATA[agile case study]]></category>
		<category><![CDATA[agile project]]></category>
		<category><![CDATA[agile requirements management]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[goal-driven use cases]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[supporting goals with use cases]]></category>
		<category><![CDATA[use case name examples]]></category>
		<category><![CDATA[use case names]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/04/23/apr-use-case-names/</guid>
		<description><![CDATA[
In our agile programming case study, we have two corporate goals, but one of them (learn Ruby on Rails) only drives constraints, not requirements.  The other goal is to make it easier for people to find and read great content in our niche.  This makes the documentation of goal-driven use cases pretty straightforward. [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="cropped ux diagram" title="cropped ux diagram" src="http://sehlhorst.smugmug.com/photos/146414354-M.jpg" /></p>
<p>In our <a title="Agile project case study" href="http://tynerblain.com/blog/2007/04/17/agile-software-development-experiment/">agile programming case study</a>, we have <a title="Corporate Goals" href="http://tynerblain.com/blog/2007/04/19/apr-corporate-goals/">two corporate goals</a>, but one of them (learn Ruby on Rails) only drives constraints, not requirements.  The other goal is to make it easier for people to find and read great content in our niche.  This makes the documentation of <em>goal-driven</em> use cases pretty straightforward.  All of the <a title="Structured Requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">use cases support this single goal</a>.</p>
<p>With an understanding of the goals, the next step is to <a title="How To Start Use Cases for an Agile Project" href="http://tynerblain.com/blog/2007/03/28/how-to-start-use-cases/">define the use case names</a>.</p>
<p><span id="more-471"></span>Before we can do that, we have to revisit and re-organize our goal definitions.</p>
<h2>User Personas Drive Practical Goals</h2>
<p>However, we&#8217;re folding in some elements of interaction design by <a title="Persona Examples" href="http://tynerblain.com/blog/2007/04/23/apr-persona/">defining user personas</a>, which means the hierarchy of support structure for our goals is a little different.</p>
<p><img alt="UX Structure" title="UX Structure" src="http://sehlhorst.smugmug.com/photos/61228367-O.png" /></p>
<p>We defined four personas in our earlier article:</p>
<ol>
<li>Jill the Business Analyst (Primary)</li>
<li>Paul the Product Manager (Secondary)</li>
<li>Brian the Blogger (Secondary)</li>
<li>Ellen the Program Manager (Supplemental)</li>
</ol>
<h2>Defining Practical Goals</h2>
<p>These <em>practical</em> goals represent the role that each persona might play in achieving the corporate goal.  There is a lot of overlap in what the different personas want to do, and that is further complicated by the context in which they want to do it.  The ideas are really very simple, but describing them simply is complex.  We looked at the <a title="Understanding Our Users" href="http://tynerblain.com/blog/2007/04/19/apr-understanding-users/">needs of the different users</a> earlier.</p>
<p>To bring things together with clarity, we will document the goals here, and parenthetically identify the personas that share each goal.</p>
<ul>
<li>Learn a Beginner Topic (Jill, Ellen)</li>
<li>Learn an Expert Topic (Jill, Paul)</li>
<li>Promote an Article (Brian)</li>
<li>Share an Idea With Non-Users (Paul)</li>
<li>Participate in Discussions (All)</li>
<li>Score a Good Idea (All)</li>
</ul>
<p>The last goal is more nebulous than the others.  For some people, <em>scoring </em>an idea may be &#8220;the cost of doing business&#8221;, recognizing that it is the way the site works &#8211; ideas that are scored highly are easier to find.  These people may see the scoring of articles they have read as their payment into the system, so that they can more easily find articles with great ideas (because other people score those).  It is a communal dynamic.</p>
<p>Other people may simply score articles because it is a good thing to do &#8211; a for-the-betterment-of-all approach.  This is easy to rationalize, because by raising the skill levels of <em>everyone</em> in our niche, we raise the value and visibility of the value we can provide to employers.  And this increases demand for our services.  This is very indirect, but intuitive.  I honestly don&#8217;t know if this is a motivator for most people.</p>
<p>Here&#8217;s a quick poll &#8211; please let us know why (and if) you would score the articles on the site.</p>
<p>[poll=6]</p>
<p>Also, please note that we&#8217;ve used <em>promote</em> to imply promotion of <em>your own</em> article, and <em>score</em> to imply &#8220;promotion&#8221; or demotion of articles written by other people.  This distinction will be necessary to clarify when we are discussing features to support Brian&#8217;s objectives.</p>
<h2>Defining Use Case Names</h2>
<p>The diagram above shows <em>scenarios</em> instead of <em>use cases</em> as the next step.  From the referenced article:</p>
<blockquote><p>The practical goals are an analog to the Wiegers <em>goals</em> &#8211; they represent the software-relevant goals of the company, in actionable language, associated with a particular persona (class of users). The association with the persona is the key element that allows for great design. The actionable nature of the goals may incorporate or imply particular business process design decisions (made outside of the scope of either process).</p>
<p>The main benefit we get from this approach is <a title="Essential and non-essential feature prioritization" href="http://tynerblain.com/blog/2006/02/17/prioritizing-software-requirements-am-i-hot-or-not/">the ability to not implement the non-essential features</a>.  The absence of these fluff-features allows the most important users to <a title="Getting past the suck threshold" href="http://tynerblain.com/blog/2005/12/14/getting-past-the-%e2%80%99suck-threshold%e2%80%99/">master the software faster</a> without <a title="This software sucks, say users" href="http://tynerblain.com/blog/2006/03/02/this-software-sucks-say-users/">having to deal with low-value complexity</a>.</p>
<p>The scenarios are effectively the same as informal use cases.</p>
<p><cite><a title="Interaction Design and Structured Requirements Mixed Together" href="http://tynerblain.com/blog/2006/03/23/interaction-design-and-structured-requirements/">Interaction Design and Structured Requirements</a></cite></p></blockquote>
<p>For this project, we will use use cases &#8211; it probably simplifies communication, and as the quote above mentions, the same objective is met.  Each goal is listed again below (in bold), and the names of the use cases that support the goal are listed underneath it.  A use case name is listed multiple times if it supports multiple goals.</p>
<p><strong>Learn A Beginner Topic</strong></p>
<ul>
<li>Create an Article Mashup</li>
<li>Browse an Area</li>
<li>Search for a Topic</li>
</ul>
<p><strong>Learn an Expert Topic</strong></p>
<ul>
<li>Browse an Area</li>
<li>Search for a Topic</li>
</ul>
<p><strong>Promote an Article</strong></p>
<ul>
<li>Promote an Article</li>
<li>Rate an Article</li>
</ul>
<p><strong>Share an Idea With Non-Users</strong></p>
<ul>
<li>Broadcast an Article</li>
<li>Broadcast an Article Mashup</li>
</ul>
<p><strong>Participate in Discussions</strong></p>
<ul>
<li>Comment on an Article</li>
<li>Comment on an Article Mashup</li>
</ul>
<p><strong>Score a Good Idea</strong></p>
<ul>
<li>Suggest an Article</li>
<li>Rate an Article</li>
<li>Create an Article Mashup</li>
<li>Rate an Article Mashup</li>
</ul>
<p>Note that &#8220;suggest&#8221; is used to represent creating a link/entry in the site for a particular article written by someone else.  Also note that &#8220;promote&#8221; and &#8220;suggest&#8221; may get combined if the <em>Brian the Blogger</em> persona ranks lower in the priority for the site.  Or Brian may be able to use the &#8220;suggest&#8221; functionality to achieve his goals.</p>
<h2>New Idea Introduced</h2>
<p><img alt="card catalog" title="card catalog" src="http://sehlhorst.smugmug.com/photos/146431033-M.jpg" /></p>
<p>As part of naming the use cases, we introduced a new idea &#8211; the idea of an &#8220;article mashup.&#8221;  Think back to when you did research for a paper in high school (if you&#8217;re old enough) &#8211; you found passages in magazines and books from all over the library.  You photocopied them, and maybe even stuck them all together in a binder and called them &#8220;research.&#8221;  Then you referenced those articles from different sources when compiling your paper.</p>
<p>Now imagine if you could do the same thing, but make it useful for everyone else, and make it be easy!</p>
<p>You could have a mashup like &#8220;Intro to Use Cases&#8221; which included references to several articles about use cases &#8211; the ones that you found to be most helpful when getting started.  All bundled together, put in order, and made easy for consumption by other people.  These &#8216;mashups&#8217; of articles can be pulled from anywhere on the internet, mixed and matched as you please.  Since these mashups have a value beyond the sum of the articles included in them, they should also be rated and reviewed &#8211; just like individual articles.  This may even be the killer feature for the site.</p>
<h2>Did We Miss Anything?</h2>
<p>Any of the user goals slip through the cracks?</p>
<p>Any use cases that you think we missed?</p>
<p>Got any feedback on the <em>mashup</em> idea?</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+APR%3A+Use+Case+Names+http://bit.ly/KXFKg+" 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/2007/04/23/apr-use-case-names/&amp;t=APR%3A+Use+Case+Names" 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/2007/04/23/apr-use-case-names/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Difference Between Use Cases and Test Cases</title>
		<link>http://tynerblain.com/blog/2007/04/12/use-case-vs-test-case/</link>
		<comments>http://tynerblain.com/blog/2007/04/12/use-case-vs-test-case/#comments</comments>
		<pubDate>Fri, 13 Apr 2007 03:00:05 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[blackbox test]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[system test]]></category>
		<category><![CDATA[test case]]></category>
		<category><![CDATA[use case scenario]]></category>
		<category><![CDATA[what is the difference between a use case and a test ca]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/04/12/use-case-vs-test-case/</guid>
		<description><![CDATA[People who are new to software, requirements, or testing often ask "What's the difference between a use case and a test case?"  This article answers that question, by building on earlier articles about use cases and use case scenarios.  At the soundbite level, each use case has one or more scenarios, and each use case scenario would lead to the creation of one or more test cases.]]></description>
			<content:encoded><![CDATA[<p><img title="praying mantis" alt="praying mantis" src="http://sehlhorst.smugmug.com/photos/140019109-M.jpg" /></p>
<p>People who are new to software, requirements, or testing often ask &#8220;<em>What&#8217;s the difference between a use case and a test case?</em>&#8221;  This article answers that question, by building on earlier articles about <a title="Example Use Case" href="http://tynerblain.com/blog/2007/04/09/sample-use-case-example/">use cases</a> and <a title="Use Case Scenarios" href="http://tynerblain.com/blog/2007/04/10/what-are-use-case-scenarios/">use case scenarios</a>.  At the soundbite level, each use case has one or more scenarios, and each use case scenario would lead to the creation of one or more test cases.</p>
<p><span id="more-452"></span></p>
<p><strong>Definition of a Use Case</strong></p>
<p><img title="flow chart of a use case" alt="flow chart of a use case" src="http://sehlhorst.smugmug.com/photos/142803347-M.jpg" /></p>
<p>Use cases tell the story of how someone interacts with a software system to achieve a goal.  A good use case will describe the interactions that lead to <em>either </em>achieving <em>or </em>abandoning the goal.  The use case will describe multiple paths that the user can follow within the use case.</p>
<p><strong>Definition of a Use Case Scenario</strong></p>
<p><img title="diagram of a use case" alt="diagram of a use case" src="http://sehlhorst.smugmug.com/photos/142803787-M.png" /> <img title="diagram of a use case scenario" alt="diagram of a use case scenario" src="http://sehlhorst.smugmug.com/photos/142803767-M.png" /></p>
<p>A use case is made up of one or more <a title="What Are Use Case Scenarios" href="http://tynerblain.com/blog/2007/04/10/what-are-use-case-scenarios/">use case scenarios</a>.  Each path that can be followed within the use case is a use case scenario.  Any given example of following a use case also follows a single scenario.  Multiple executions of the use case can use the same or different scenarios.</p>
<p><strong>Definition of a Test Case</strong></p>
<p>There are many different kinds of testing, and they can be described in different ways.  They can be done by different people to achieve different objectives.  They can be manual or automated.  Testing is a very large field, and this article is not trying to define all of the ways that people can test software.</p>
<p>When someone asks the question &#8220;<em>What&#8217;s the difference between a use case and a test case?</em>&#8221; they are generally referring to system tests, &#8220;end to end&#8221; tests, or <a title="Blackbox and Whitebox testing" href="http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/">blackbox tests</a>.  They are probably not thinking about unit tests or integration tests.</p>
<p>Check out this explanation of <a title="Functional Testing explained" href="http://tynerblain.com/blog/2006/05/17/foundation-series-functional-testing-of-software/">the difference between unit tests and system tests</a>.  Or this article for an <a title="Continuous Integration Introduction" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">introduction to <em>Continuous Integration</em></a> &#8211; an approach to test automation and software development, or this article on <a title="Ten Essential Continuous Integration Practices" href="http://tynerblain.com/blog/2006/05/09/ten-essential-practices-of-continuous-integration/">the essential practices of continuous integration</a>.<br />
<strong>System Test Cases</strong></p>
<p>Many system tests are designed to simulate how a user interacts with the system, to make sure that the system responds appropriately.  If you&#8217;ve defined your requirements by using <a title="Why Create Goal Driven Use Cases?" href="http://tynerblain.com/blog/2006/06/28/the-use-case-for-creating-goal-driven-use-cases/">goal driven use cases</a>, you can use the use cases as a framework for defining these test cases.</p>
<p>These system tests should be created to test a single situation.  When using the approach of use cases and use case scenarios to describe requirements, a system test should test a single use case scenario.</p>
<p>In <a title="A use case example" href="http://tynerblain.com/blog/2007/04/09/sample-use-case-example/">an example use case</a> we recently wrote, one alternate flow &#8220;3A1&#8243; involves the user entering shipping and billing information that is unique to the order they are placing.  You would define at least one use case scenario that involves these steps.  Assume that the scenario you have defined follows alternate flow &#8220;3A1&#8243; but otherwise follows the normal flow.</p>
<p><img title="use case scenario selected" alt="use case scenario selected" src="http://sehlhorst.smugmug.com/photos/142803767-M.png" /></p>
<p>You could create two system tests that are designed to validate that the requirements of the use case are met.  The first system test would involve a user that has an account but elects to use different information for <em>this</em> order.  This is a realistic scenario &#8211; perhaps someone is ordering a gift to be delivered to their cousin who lives at a different address.</p>
<p>You could also define a system test that involves a user without a pre-existing account.</p>
<p>Both test cases follow the use case, and both test cases follow the use case scenario.  But the test cases test different things (from a business / requirements perspective).  They may be testing exactly the same code, but from a system test perspective, you neither know nor care because a system test is <a title="More details on blackbox testing" href="http://tynerblain.com/blog/2006/01/13/software-testing-series-black-box-vs-white-box-testing/">a blackbox test</a>.</p>
<p><strong>Summary</strong></p>
<p>A use case represents the interactions (or observed behaviors) associated with achieving or abandoning a goal.  A use case scenario represents one of the possible paths through a use case.  A test case represents one set of inputs that exercises a single use case scenario.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+The+Difference+Between+Use+Cases+and+Test+Cases+http://bit.ly/AyjE7+" 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/2007/04/12/use-case-vs-test-case/&amp;t=The+Difference+Between+Use+Cases+and+Test+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/2007/04/12/use-case-vs-test-case/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Are Use Case Scenarios?</title>
		<link>http://tynerblain.com/blog/2007/04/10/what-are-use-case-scenarios/</link>
		<comments>http://tynerblain.com/blog/2007/04/10/what-are-use-case-scenarios/#comments</comments>
		<pubDate>Wed, 11 Apr 2007 03:23:24 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[sample use case]]></category>
		<category><![CDATA[sample use case scenario]]></category>
		<category><![CDATA[sample use cases]]></category>
		<category><![CDATA[use case example]]></category>
		<category><![CDATA[use case examples]]></category>
		<category><![CDATA[use case scenario]]></category>
		<category><![CDATA[use case scenario example]]></category>
		<category><![CDATA[what are use case scenarios]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/04/10/what-are-use-case-scenarios/</guid>
		<description><![CDATA[It is easy to mix up the definitions of use case and use case scenario.  A use case represents the actions that are required to enable or abandon a goal.  A use case has multiple "paths" that can be taken by any user at any one time.  A use case scenario is a single path through the use case.  This article provides an example use case and some diagrams to help visualize the concept.]]></description>
			<content:encoded><![CDATA[<p><img alt="olives" title="olives" src="http://sehlhorst.smugmug.com/photos/142803385-M.jpg" /></p>
<p>It is easy to mix up the definitions of <em>use case</em> and <em>use case scenario</em>.  A use case represents the actions that are required to enable or abandon a goal.  A use case has multiple &#8220;paths&#8221; that can be taken by any user at any one time.  A use case scenario is a single path through the use case.  This article provides an example use case and some diagrams to help visualize the concept.</p>
<p><span id="more-457"></span></p>
<p><strong>An Example Use Case</strong></p>
<p>Most example use cases are very simple.  Unfortunately, a simple use case does not help get a clear understanding of the differences between a use case and a use case scenario.  For this article, please refer to <a title="Sample Use Case" href="http://tynerblain.com/blog/2007/04/09/sample-use-case-example/">the sample use case</a> provided in yesterday&#8217;s article.</p>
<p>This use case involves 17 steps in the normal flow, and three alternate flows that represent another 10 steps.  The details of each step are provided in prose in the previous article.  To understand the difference between a use case and a use case scenario, we can look at visualizations of the use case, drawn as a flow chart.  As a reader commented earlier today, an activity diagram would be a &#8220;better&#8221; artifact than a flow chart.  This is true, but this article will use flow charts, as they require no &#8220;additional&#8221; learning for most readers.  Activity diagrams can be used, if that is your preference.</p>
<p><strong>Diagramming The Normal Flow</strong></p>
<p>The example use case includes 17 steps in a normal flow that involves the system being developed, and three actors (two of whom are other systems).  The actors are the user, the fulfillment system, and the billing system.  The actions of the system being developed are represented in the &#8220;System&#8221; swim lane.  You can see that control flows from the user to the system and back again, and occasionally from the system to external systems and back again.</p>
<p><img alt="normal flow" title="normal flow" src="http://sehlhorst.smugmug.com/photos/142803325-M.jpg" /></p>
<p>[<a title="larger version of normal flow" href="http://sehlhorst.smugmug.com/photos/142803647-O.png">larger image</a>]</p>
<p><strong>Diagramming Alternate Flows</strong></p>
<p>The alternate flows can also be diagrammed using the same approach.</p>
<p><img alt="alternate flows" title="alternate flows" src="http://sehlhorst.smugmug.com/photos/142803347-M.jpg" /></p>
<p>[<a title="larger alternate flows" href="http://sehlhorst.smugmug.com/photos/142803668-O.png">larger image</a>]</p>
<p>Each alternate flow is drawn in this example with different colored arrows (red, green, or blue) in order to present an alternative visualization of the flow of the use case.</p>
<p><strong>Simpler Visualization Of A Use Case</strong></p>
<p>The essence of the diagram, for the purpose of discussing use case scenarios, is the branching behavior.  You can create a much simpler diagram like the following:</p>
<p><img title="simple colored flow" alt="simple colored flow" src="http://sehlhorst.smugmug.com/photos/142803787-M.png" /></p>
<p>The normal flow is represented as a straight line from the solid black circle to the &#8220;END&#8221; object.  Each alternate flow is represented as a curved line that breaks away from the normal flow.  The &#8220;3A1&#8243;, and &#8220;5A2&#8243; alternate flows return to the normal flow (bypassing one or more normal flow steps).  The &#8220;5A1&#8243; alternate flow returns to a step in the middle of the 3A1 flow.  The &#8220;10A1&#8243; flow has one or more steps that end in the use case being abandoned.</p>
<p>The colors have been added only to simplify the mapping of this diagram to the cross-functional flowchart above.  If anyone knows of a formal name for this type of diagram, please add it in the comments.</p>
<p><strong>Use Case Scenarios</strong></p>
<p>The use case is represented graphically as the following diagram.</p>
<p><img title="simple use case example" alt="simple use case example" src="http://sehlhorst.smugmug.com/photos/142803776-M.png" /></p>
<p>The diagram depicts every possible branch of the use case that might be executed in either the completion or abandonment of the goal of the use case.  The use case may take any of the alternate flow branches or may follow the normal flow.<br />
A use case scenario is a single path through the diagram.</p>
<p><img title="use case normal flow example" alt="use case normal flow example" src="http://sehlhorst.smugmug.com/photos/142803795-M.png" /></p>
<p>This diagram shows the normal flow &#8211; one of the possible scenarios.</p>
<p>Another possible scenario would be to follow alternate flow &#8220;3A1&#8243; and otherwise follow the normal flow.  The simple diagram would look like the following:</p>
<p><img title="alternate flow use case diagram" alt="alternate flow use case diagram" src="http://sehlhorst.smugmug.com/photos/142803767-M.png" /></p>
<p>Specifically, this diagram indicates the following path as shown in the cross-functional flow chart:</p>
<p><img title="cross functional flow chart of alternate path through use case" alt="cross functional flow chart of alternate path through use case" src="http://sehlhorst.smugmug.com/photos/142803334-M.jpg" /></p>
<p>[<a title="larger use case alternate view" href="http://sehlhorst.smugmug.com/photos/142803659-O.png">larger image</a>]</p>
<p><strong>Finding All Use Case Scenarios</strong></p>
<p>The next step is a somewhat mechanical exercise &#8211; identifying all of the possible use case scenarios for a single use case.</p>
<p><img alt="use case branching diagram" title="use case branching diagram" src="http://sehlhorst.smugmug.com/photos/142803776-M.png" /></p>
<p>The user can take alternate &#8220;3A1&#8243; or not, and then can take either &#8220;5A1&#8243; or &#8220;5A2&#8243; (in either case), or both &#8220;5A1&#8243; and &#8220;5A2&#8243;, and then can either take alternate &#8220;10A1&#8243; or not.  This yields 12 distinct scenarios.  You could arguably consider that taking &#8220;5A1&#8243; multiple times is a valid scenario.</p>
<p><strong>Summary</strong></p>
<p>A use case defines all of the paths that lead to the success of the use case.  The use case also defines all of the paths that lead to the abandonment of the use case without achieving its goal.  Each unique combination of those paths that can be taken by an actor during a single &#8220;pass&#8221; through the use case is a use case scenario.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+What+Are+Use+Case+Scenarios%3F+http://bit.ly/ivQmm+" 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/2007/04/10/what-are-use-case-scenarios/&amp;t=What+Are+Use+Case+Scenarios%3F" 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/2007/04/10/what-are-use-case-scenarios/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
