<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tyner Blain &#187; Requirements gathering</title>
	<atom:link href="http://tynerblain.com/blog/category/requirements/requirements-gathering/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Thu, 02 Sep 2010 21:53:12 +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>The High Costs of Building the Wrong Product</title>
		<link>http://tynerblain.com/blog/2010/06/21/building-the-wrong-product/</link>
		<comments>http://tynerblain.com/blog/2010/06/21/building-the-wrong-product/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 14:15:12 +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 gathering]]></category>
		<category><![CDATA[1-10-100 rule]]></category>
		<category><![CDATA[bad product management]]></category>
		<category><![CDATA[cost of quality]]></category>
		<category><![CDATA[requirements bugs]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1229</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F06%2F21%2Fbuilding-the-wrong-product%2F", "shorturl": "http://bit.ly/bmtQmO", "style": "big", "title": "The High Costs of Building the Wrong Product" });

As product managers, we talk about creating the right solutions with our products.  Understanding the very real problems our customers face, understanding the very real opportunities our markets present, and manifesting that understanding in a product roadmap.
Other than [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2010%252F06%252F21%252Fbuilding-the-wrong-product%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FbmtQmO%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22The%20High%20Costs%20of%20Building%20the%20Wrong%20Product%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F06%2F21%2Fbuilding-the-wrong-product%2F", "shorturl": "http://bit.ly/bmtQmO", "style": "big", "title": "The High Costs of Building the Wrong Product" });</script></div>
<p><img class="alignnone" title="Bug" src="http://sehlhorst.smugmug.com/photos/51917869-M.jpg" alt="A Praying Mantis" width="250" height="187" /></p>
<p>As product managers, we talk about creating the right solutions with our products.  Understanding the very real problems our customers face, understanding the very real opportunities our markets present, and manifesting that understanding in a product roadmap.</p>
<p>Other than being &#8220;not as good,&#8221; how expensive is it to build the wrong product?<br />
<span id="more-1229"></span></p>
<h2>The Cost of Poor Quality</h2>
<p><img class="alignnone" title="frayed cable" src="http://sehlhorst.smugmug.com/Other/blog/frayed-cable/908182336_gJtUG-O.jpg" alt="A frayed Steel cable" width="250" height="179" /></p>
<p>There&#8217;s an analog to the market dynamics of making poor product decisions &#8211; executing with poor quality.  Many research studies  and articles have identified the market impacts of poor quality.  This has become so well accepted that people today cite it like a law of physics (<a title="cost of quality" href="http://www.tylogix.com/Articles/The_Dollars_and_Sense_of_Software_Quality_Control_V011.htm">one example here</a> based on <a title="boehm in 1988" href="http://faculty.ksu.edu.sa/ghazy/Cost_MSc/R6.pdf">this 1988 IEEE research</a> by Barry Boehm and Philip Papaccio) as the &#8220;1-10-100 rule.&#8221;  The primary conclusion of that research is that ten dollars spent on fixing bugs:</p>
<ul>
<li>Costs and saves $10 when you catch (and fix) the bug during implementation.</li>
<li>Avoids $100 in costs when you catch the bug during QA and send the product back to development (then test again).</li>
<li>Avoids $1,000 in costs versus waiting until your customers catch the bug in the field, causing the team to remedy the problems, rush out a patch release, and/or go to heroic lengths to manage a PR problem.</li>
</ul>
<p>This is an opportunity in front of your product team &#8211; a 100x payback from investing in quality during the development process.  Of course, be pragmatic about it -<a title="measuring the cost of quality" href="http://tynerblain.com/blog/2006/02/22/software-testing-series-measuring-the-cost-of-quality/"> if the cost of testing exceeds the cost of bugs, don&#8217;t test</a>.</p>
<p>This is not a solved problem, by any stretch, but the solutions and methods to solve this problem are well understood now.  In fact, a <a title="boehm and Basili on cost of quality" href="http://www.cs.umd.edu/projects/SoftEng/ESEG/papers/82.78.pdf">2001 article by Barry Boehm and Victor Basili</a> shows that in some cases, the labor costs to resolve bugs can be as low as 5:1 &#8211; when considering a subset of smaller systems, when using more &#8220;agile&#8221; processes.  That lowered ratio does not take into account the lost market opportunities and the costs of cleaning up <em>collateral</em> damage to your product &#8211; just the immediately realizable (and measurable) costs of resolution.</p>
<p>One very real problem, when talking about &#8220;bugs&#8221; is in defining what a &#8220;bug&#8221; is.  And <a title="Where bugs come from - software development process analysis" href="http://tynerblain.com/blog/2006/01/22/where-bugs-come-from/">the definition of a bug is a matter of perspective</a>.  A developer can reasonably assert that &#8220;if it meets the spec it is not a bug, it is working as designed.&#8221;  What if the spec is wrong?  The developer may not be guilty, but collectively, your team screwed up.  There&#8217;s a &#8220;bug&#8221; in the requirements.</p>
<h2>What Is A Requirements Bug?</h2>
<p><img class="alignnone" title="flawed revenue projection" src="http://sehlhorst.smugmug.com/Other/blog/Revenue-300x234/908184921_okRC5-O.png" alt="A very unlikely hockey stick revenue forecast graph" width="300" height="234" /></p>
<p>Now things are getting interesting.</p>
<p>If you wrote a requirement that you interpret as &#8220;A&#8221; and your developers interpret as &#8220;B&#8221; &#8211; you definitely have a bug &#8211; the team won&#8217;t build the right product.  For each $1 you could spend making sure you have bug-free requirements, you could:</p>
<ul>
<li>Make sure you have a shared understanding of the documented requirements through <a title="Eliciting with Active Listening" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">active listening</a> before development begins ($1).  Following the <a title="The Rules of Writing Good Requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">Rules of Writing Requirements</a> will help prevent this miscommunication.</li>
<li>Wait until the engineering team is ready to demo their progress ($10).  They will have to build it again, because they built the wrong stuff.</li>
<li>Wait until development is complete and QA is validating that the code meets the spec ($100).  This gets tricky if you are thinking &#8220;A&#8221;, the developers are thinking &#8220;B&#8221;, and QA is thinking &#8220;C.&#8221;</li>
<li>In classic throw-it-over-the-wall mode, wait until the product is launched, and it is the wrong product ($1000).  Assuming &#8220;A&#8221; was the right problem to solve, the cost of entering the market with a solution to &#8220;B&#8221;, leaving &#8220;A&#8221; unaddressed, is impressively high.</li>
</ul>
<p>This gets interesting because the above assumes that &#8220;A&#8221; was the right problem to solve.  What if &#8220;G&#8221; was <a title="Writing Valuable Requirements" href="http://tynerblain.com/blog/2009/07/29/valuable-requirements/">the right problem to solve</a>, and &#8220;A&#8221; was <a title="market data is more important than feature requests" href="http://tynerblain.com/blog/2008/08/19/managing-market-data/">the </a><em><a title="market data is more important than feature requests" href="http://tynerblain.com/blog/2008/08/19/managing-market-data/">wrong</a></em><a title="market data is more important than feature requests" href="http://tynerblain.com/blog/2008/08/19/managing-market-data/"> market problem</a>?  Even if everything (else) is working perfectly &#8211; you document requirements for &#8220;A&#8221;, the engineering team creates a marvelous &#8220;A&#8221; and it launches without implementation errors &#8211; you still fail, and incur the 1,000x cost of a failed product launch.</p>
<p>There is an even larger opportunity in front of your product team &#8211; a 1,000x payback on discovering and choosing to solve the right problems for your customers and markets.</p>
<ul>
<li>Would Palm still be independent if the Pre had solved a compelling problem?</li>
<li>Why did Intuit have to buy Mint.com &#8211; could they have embraced the same customers with Quicken?</li>
<li>What is Garmin going to do now that &#8220;free&#8221; GPS mapping and turn-by-turn directions are becoming ubiquitous? If it is &#8220;more of the same,&#8221; how much are they wasting?</li>
</ul>
<h2>Wrapping Up</h2>
<p><img class="alignnone" title="Wrapping" src="http://sehlhorst.smugmug.com/Other/blog/wrapping-paper/908188628_begak-O.jpg" alt="Wrapping paper rolls" width="250" height="181" /></p>
<p>I&#8217;m not aware of any studies that show that &#8220;requirements bugs&#8221; fit the same 1/10/100/1000 cost explosion model that &#8220;implementation bugs&#8221; exhibit.  Emotionally, it &#8220;feels about right&#8221; to me &#8211; it passes my &#8220;sniff test.&#8221;</p>
<p>There are times when days of research would have been required to avoid or redirect a few hours of implementation effort on projects I&#8217;ve worked on.  And I&#8217;ve seen man-years invested solving problems that didn&#8217;t involve much more research.</p>
<p>My intuition from products and teams I&#8217;ve worked with is that it probably averages out somewhere around 10x.</p>
<p>What does your gut (or your data &#8211; if you have some, post a link below!) tell you?</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+The+High+Costs+of+Building+the+Wrong+Product+http://bit.ly/d0A65h+" 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/06/21/building-the-wrong-product/&amp;t=The+High+Costs+of+Building+the+Wrong+Product" 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/06/21/building-the-wrong-product/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>Business Goals and Requirements</title>
		<link>http://tynerblain.com/blog/2010/03/11/goals-and-requirements/</link>
		<comments>http://tynerblain.com/blog/2010/03/11/goals-and-requirements/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 17:11:00 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[business goals]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1181</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F03%2F11%2Fgoals-and-requirements%2F", "style": "big", "title": "Business Goals and Requirements" });

One of my colleagues got into a debate with one of his colleagues about the differences between goals and requirements.  His opponent fired the following salvo: &#8220;[That] is not a business requirement in any company of the world&#8230;&#8221;
What you call your requirements is less important than [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2010%252F03%252F11%252Fgoals-and-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Business%20Goals%20and%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F03%2F11%2Fgoals-and-requirements%2F", "style": "big", "title": "Business Goals and Requirements" });</script></div>
<p><img class="alignnone" title="warehouse inventory level" src="http://sehlhorst.smugmug.com/Other/blog/warehouse/807733348_FDXS6-O.jpg" alt="Inventory in a warehouse" width="250" height="187" /></p>
<p>One of my colleagues got into a debate with one of his colleagues about the differences between goals and requirements.  His opponent fired the following salvo: &#8220;[That] is not a business requirement in any company of the world&#8230;&#8221;</p>
<p>What you <em>call </em>your requirements is less important than <em>how you communicate</em> them.</p>
<h2><span id="more-1181"></span>Labels</h2>
<p>I&#8217;ve worked with a lot of companies that use different <em>labels</em> to describe their descriptions of the problems that need to be solved. This is not another article about requirements versus specification (specification = design constraint, btw).</p>
<blockquote><p>If you&#8217;re not a long time reader who&#8217;s followed the debates and discussions on this topic in the past, check out these articles and comments, where we&#8217;ve had some great discussions on that topic &#8211; with particular thanks to <a title="Roger, on Twitter" href="http://twitter.com/rcauvin">Roger Cauvin</a> for keeping the debate front and center.</p>
<ul>
<li><a title="debating the difference between requirements and design" href="http://tynerblain.com/blog/2006/02/11/requirements-vs-design-which-is-which-and-why/">Requirements Versus Design: Which is Which and Why</a></li>
<li><a title="Article acknowledging different perspectives on 'requirements'" href="http://tynerblain.com/blog/2006/05/11/requirements-documents-one-mans-trash/">Requirements Docs &#8211; One Man&#8217;s Trash is&#8230;</a></li>
</ul>
<p>The central theme is that the debate about &#8220;what versus why&#8221; centers around differences in people&#8217;s perspective on the problem.</p>
<p><img class="alignnone" title="What versus Why versus How" src="http://sehlhorst.smugmug.com/photos/69105260-M.png" alt="Diagram of different perspectives on the same artifacts" width="482" height="420" /></p></blockquote>
<p>This challenge is not really about that (but it makes for good background).  The complaint my colleague received was really a critique of the way that the <em>why</em> of a set of requests was communicated and labeled.</p>
<h2>Actionable Goals</h2>
<p>Companies have strategic goals (increase shareholder value, gain market share, etc) that serve to guide the investments and activities of the organization.  However, for the teams that are creating products, those goals are too vague to be actionable.  I guess this is where <em>my</em> set of labels comes in.  I don&#8217;t think the labeling of a goal <em>as a goal</em> (versus labeling it <em>as a requirement</em>) is abstractly important, however, when people value making a distinction, here&#8217;s how I do it.</p>
<p>A <em>goal </em>is something your business (or user) is trying to achieve.  It is too abstract to have a single valid solution approach.  Once your business stakeholder(s) decide on a strategy by which they will achieve that goal, the business will define <em>requirements </em>for the actionable project(s) that execute this strategy.  This is an ideation step that lives inside the &#8220;why&#8221; box from a business analyst&#8217;s perspective.  Here&#8217;s an example:</p>
<h2>Warehouse Manager</h2>
<p><img class="alignnone" title="businesswoman" src="http://sehlhorst.smugmug.com/Other/blog/ok/807760870_z87Fe-O.jpg" alt="business woman giving thumbs-up sign" width="166" height="250" /></p>
<p>You&#8217;re in the IT department of a large company.  You&#8217;ve been assigned to support the warehouse manager (or COO, or vice president of order fulfillment or whatever).  Your warehouse manager is responsible for procuring the products that your company sells, keeping inventory on hand, and delivering those products to customers when they have been purchased.</p>
<p>Your warehouse manager is measured (or promoted) based on her performance relative to the following:</p>
<ul>
<li>The time that a customer has to wait between placing an order and receiving the product.</li>
<li>The cost impact of warehouse operations on the products.</li>
</ul>
<p>Your warehouse manager focuses on these two metrics because of your company&#8217;s goals &#8211; provide good customer service, be profitable, and grow revenue.  Those abstract goals influence product pricing &#8211; it must be low enough to grow revenue in the target markets, and be high enough to be profitable.  Since market pressures drive pricing decisions, typically a profitability target will then create cost-reduction pressures (profitability also influences pricing decisions, selection of markets, positioning within that market, etc).  A customer service strategy can also include a &#8220;you get your product quickly&#8221; component &#8211; as it does in this example.</p>
<p>Your warehouse manager now comes to you and says &#8220;I have an initiative to lower costs.&#8221;</p>
<p><strong>Is this a goal or is it a business requirement?</strong></p>
<p>Ultimately, it doesn&#8217;t matter what you call it, but for you to <em>actually do something</em> you need to know more.  That&#8217;s why <em>my</em> approach is to call it a goal.  Your warehouse manager&#8217;s problem is to lower costs.  You need to <a title="Problem decomposition with Ishikawa Diagrams" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">decompose that problem to understand</a> how you (and your team) can do something to help her achieve that goal.  The reason you have to do that is that you need <a title="Defining good problem statements" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">a problem statement at the right level of abstraction</a>.</p>
<p>In <a title="Top elicitation techniques" href="http://tynerblain.com/blog/2007/09/13/elicitation-techniques-2/">elicitation conversations</a> with your warehouse manager, you learn that all of the costs of operating the warehouse are allocated to the different business units, who operate as profit centers.  The warehouse operates as a cost center.  The warehouse manager treats each business unit as a customer, and provides a service of &#8220;fulfilling product orders&#8221; in exchange for funds that cover the costs of operation.  The allocation of costs is done per product that appears in the warehouse.  Since allocation is per product, it could be something like $1.30 per product in &#8220;warehouse costs.&#8221;  There are multiple sources of those costs (that are then allocated per product), and there are multiple ways to approach reducing the <em>cost per product</em>.</p>
<p>Your warehouse manager develops a strategy (probably a &#8220;mini-strategy&#8221; from the company&#8217;s perspective) to lowering costs.  She rules out &#8220;sell more products&#8221; as an approach, because she can&#8217;t control that.  She also can not affect her fixed costs (rent, depreciation, labor).</p>
<p>Eventually you discover that there is another cost hidden in the provisioning model &#8211; products are purchased, they sit in the warehouse for a while, then they are sold and delivered, and eventually money is collected from customers to pay for the products.  Your company has to pay in advance for the products, and doesn&#8217;t get their money back until funds are collected from the customers.  That money is &#8220;tied up in inventory&#8221; when it could have been invested otherwise &#8211; so there is a cost associated with high inventory levels, that directly correlates with the amount of inventory in stock.  When a new version / revision of a product is introduced, your inventory may become obsolete (it is definitely devalued).  And since markets are moving targets, your prospects of selling a product change over time &#8211; a risk that you will not be able to sell all of your inventory.</p>
<p>At the end of the day, the amount of inventory you have on hand has a cost.  The more you have, the more it costs.  A rule of thumb I heard 20 years ago was that inventory costs could be as high as 1/3 of the cost of the product for each year you keep it around.  If that is true, that is something like 0.5% added cost for every week the product is in inventory.  Here&#8217;s something the warehouse manager can potentially control.</p>
<p>Currently, your warehouse manager has 8 weeks of inventory on hand (on average) for products, which allows her to ship quickly.  She realizes she is adding 4% to the cost of the product.  She decides that if she can cut those costs in half, she will be a heroine.</p>
<p><img class="alignnone" title="business woman triumphs" src="http://sehlhorst.smugmug.com/Other/blog/hooray/807760868_acWdi-O.jpg" alt="image of businesswoman in victory" width="166" height="250" /></p>
<p>Her <em>business requirement</em> is to reduce inventory levels from 8 weeks (on average) to 4 weeks (on average).  She also has a constraint that no more than 1% of orders be delayed by more than a day (due to running out of inventory).</p>
<p>Now you have requirements that are <a title="writing unambiguous requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">unambiguous </a>and <a title="verifiable and measurable requirements" href="http://tynerblain.com/blog/2006/06/13/writing-verifiable-requirements/">measurable</a>.</p>
<h2>Conclusion</h2>
<p>Don&#8217;t trap yourself in worrying about the labeling of goals / requirements, but if you have to work with someone who does find that really important, before you call it a <em>requirement</em>, make sure it is at the right level of abstraction.  And of course, make sure you <a title="The rules of writing requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">follow the rules of writing requirements</a>.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Business+Goals+and+Requirements+http://bit.ly/aVZD63+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2010/03/11/goals-and-requirements/&amp;t=Business+Goals+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/2010/03/11/goals-and-requirements/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Most Engaging Articles of 2009</title>
		<link>http://tynerblain.com/blog/2010/01/05/most-engaging-articles-of-2009/</link>
		<comments>http://tynerblain.com/blog/2010/01/05/most-engaging-articles-of-2009/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 07:00:18 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Administrivia]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[top ten list]]></category>
		<category><![CDATA[tyner blain]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1161</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F01%2F05%2Fmost-engaging-articles-of-2009%2F", "style": "big", "title": "Most Engaging Articles of 2009" });

Engagement &#8211; that&#8217;s what this whole product management blogging thing is about.  Check out what Tyner Blain readers found to be the most engaging articles in 2009.
Deep Dives

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

<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>5</slash:comments>
		</item>
		<item>
		<title>Stakeholders in a Barrel</title>
		<link>http://tynerblain.com/blog/2008/12/30/stakeholders-in-a-barrel/</link>
		<comments>http://tynerblain.com/blog/2008/12/30/stakeholders-in-a-barrel/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 05:52:57 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[effective communication]]></category>
		<category><![CDATA[stakeholder expectations]]></category>
		<category><![CDATA[stakeholder goals]]></category>
		<category><![CDATA[stakeholders]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=788</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F12%2F30%2Fstakeholders-in-a-barrel%2F", "style": "big", "title": "Stakeholders in a Barrel" });

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

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Stakeholders+in+a+Barrel+http://bit.ly/uNjg+" 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/12/30/stakeholders-in-a-barrel/&amp;t=Stakeholders+in+a+Barrel" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/12/30/stakeholders-in-a-barrel/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Hidden Business Rule Example</title>
		<link>http://tynerblain.com/blog/2008/09/23/hidden-business-rule-example/</link>
		<comments>http://tynerblain.com/blog/2008/09/23/hidden-business-rule-example/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 04:26:17 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Process Flow]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[enterprise decision management]]></category>
		<category><![CDATA[hidden business rule example]]></category>
		<category><![CDATA[hidden business rules]]></category>
		<category><![CDATA[process flow example]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=704</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F09%2F23%2Fhidden-business-rule-example%2F", "style": "big", "title": "Hidden Business Rule Example" });

A business process is not just a sequence of steps.  A business process is a series of decisions and actions.  Some decisions are obvious and can be actively managed.  Some decisions are hidden, and until you discover them, you can&#8217;t manage or improve them.  Here [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F09%252F23%252Fhidden-business-rule-example%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Hidden%20Business%20Rule%20Example%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F09%2F23%2Fhidden-business-rule-example%2F", "style": "big", "title": "Hidden Business Rule Example" });</script></div>
<p><img class="alignnone" title="hidden" src="http://sehlhorst.smugmug.com/photos/379162662_SF7Ev-L.jpg" alt="Little girl hiding by covering her face" width="250" height="167" /></p>
<p>A business process is not just a sequence of steps.  A business process is a series of decisions and actions.  Some decisions are obvious and can be actively managed.  Some decisions are hidden, and until you discover them, you can&#8217;t manage or improve them.  Here is a real-world example of the discovery of a hidden enterprise decision.</p>
<p><span id="more-704"></span></p>
<h2>Enterprise Decision Management</h2>
<p>Over the past couple of years, I&#8217;ve collaborated with and become friends with <a title="Neil and James' book" href="http://www.smartenoughsystems.com/">James Taylor</a>, an enterprise decision management guru.  He and Neil Raden wrote <em>the</em> book, <a title="smart enough systems at amazon" href="http://www.amazon.com/dp/0132347962?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0132347962&amp;creative=373489&amp;camp=211189"><em>Smart (Enough )Systems</em></a> , you should get it if you don&#8217;t already have it.    It is sitting on my desk right now, and every time I pick it up I have to mark another page with a post-it note so I can find that good idea again later.  If you aren&#8217;t convinced, listen to this <a title="smart enough systems interview" href="http://tynerblain.com/blog/2007/06/25/smart-enough-systems/">interview with James</a> about their book.</p>
<p>James and I developed <a title="rules and requirements in software at ibrf" href="http://tynerblain.com/blog/2007/09/06/10th-ibrf/">a presentation, <em>Getting It Right: Rules and Requirements in Software</em></a> last fall for the International Business Rules forum.  Below is a slideshare of a shortened version of the presentation, delivered to the Austin IIBA this spring.</p>
<div id="__ss_479352" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Getting It Right" href="http://www.slideshare.net/ssehlhorst/getting-it-right-479352?type=powerpoint">Getting It Right</a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=getting-it-right-20080619-1214103759615632-8&amp;stripped_title=getting-it-right-479352" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=getting-it-right-20080619-1214103759615632-8&amp;stripped_title=getting-it-right-479352" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View SlideShare <a style="text-decoration:underline;" title="View Getting It Right on SlideShare" href="http://www.slideshare.net/ssehlhorst/getting-it-right-479352?type=powerpoint">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/tyner">tyner</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/blain">blain</a>)</div>
</div>
<p>A large portion of that talk was dedicated to discovering hidden business rules within use cases.  The reason we dedicated so much time to rules discovery is that the first step to managing decisions across your enterprise is to discover and <a title="isolating rules from requirements" href="http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/">isolate those decisions</a>!  In this article, we will look at an example of a decision hidden within a simple business process.</p>
<h2>A Simple Business Process</h2>
<p>The following is a simple real-world business process.  The details of the steps in the process have been modified to clarify this example.</p>
<p><img class="alignnone" title="Simple customer search process" src="http://sehlhorst.smugmug.com/photos/379161150_BRKJ6-O.gif" alt="" width="310" height="574" /></p>
<p>The process flow example above depicts an automated process that involves searching internal systems for an existing customer (record).  There are three possible outcomes from the search, shown above from left to right: no results are returned from the search, a single result is returned, or multiple results are returned.  When no results are returned, a new customer (record) is created, and the automated process continues.  When a single result is returned, that customer is used and the process continues.  When multiple results are returned, a new customer (record) is created and used, but the automated process is interrupted and a manual intervention is required before the process can continue.</p>
<p>This third path confused me when it was initially presented to me this way by the subject matter expert who explained the process to me. The business creates a new customer (record) even when multiple results are found because they don&#8217;t have time to determine which result is the right one, within the automated process.  They would rather create a duplicate customer (record), continue with the automated process, and clean up the mess later.  That&#8217;s much better than losing a sale (a very real risk because of delays due to manual oversight.</p>
<p>As part of this <a title="elicitation techniques for rules and requirements" href="http://tynerblain.com/blog/2007/09/13/elicitation-techniques-2/">elicitation session</a>, I applied a variation on <a title="active listening tips" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">active listening</a> by talking to the diagram above (on a whiteboard) and enhancing it.</p>
<h2>Impacts and Decisions</h2>
<p>One technique that is effective in reaching agreement, generally, is to inspire the other person to &#8220;have your idea&#8221; so that it becomes their idea.  Once I understood the process above, I realized that there was an implicit decision in the process.  Instead of making the statement &#8211; &#8220;you have a hidden decision in your process&#8221; and then hoping the business stakeholder (also in the room) would care, I chose to start with the impact.  Presenting the impact of a hidden decision first might expose that decision and trigger acknowledgment of the hidden decision by the stakeholders.  The following diagram shows how I first modified the flow on the whiteboard.</p>
<p><img class="alignnone" title="impact of decision on process flow" src="http://sehlhorst.smugmug.com/photos/379161161_Rk7DQ-L.gif" alt="" width="434" height="574" /></p>
<p>The subject matter experts had told me that when there is a manual intervention in the otherwise automated process, the process is sometimes abandoned.  Imagine customers walking away from an online sale because (for some reason) the sale cannot be completed without an unexpected delay.  I represented this with the &#8220;Abandon Process?&#8221; decision in the flow.  This decision was never drawn before, because it is the customer&#8217;s decision, and it can not be controlled by the business.</p>
<p>I also pointed out that the business makes money only through the last step in the process, &#8220;Continue Automated Process.&#8221;  My goal was to accentuate that this abandonment decision has a very real value.  The stakeholder and subject matter experts agreed &#8211; this was something they had told me previously.  But they had never drawn it directly within their process.</p>
<p>As it turns out, this did not trigger any additional insights.  It did however, set the stage for describing the relevance of the hidden decision.</p>
<h2>The Hidden Decision</h2>
<p>After setting the stage, I updated the process flow diagram to expose the hidden decision.</p>
<p><img class="alignnone" title="Example of a hidden decision in a process flow" src="http://sehlhorst.smugmug.com/photos/379161208_6FwGv-L.gif" alt="" width="396" height="600" /></p>
<p>The hidden decision is the decision of picking one of the many search results (top right corner of the diagram).  Your first response may be that the business is not picking any of the results.  My response is that choosing <em>none</em> of the provided results is a choice, just as picking any one of them would be.</p>
<p>This view of the process highlights that <em>if</em> the business could automatically choose a &#8220;best&#8221; result when searching returns multiple results, the business would avoid the risk of abandoned processes due to manual oversight.</p>
<p>With the current process, the business stakeholder acknowledged that the hidden business rule is &#8221; pick none of the results 100% of the time&#8221;.  With current project schedules, there is nothing that can be done about that in time for the immediate software release (of the software that embodies this process).</p>
<p>Before our meeting was over, the business stakeholder added determination of future-state business rules to define the &#8220;how do we pick one?&#8221; decision to the deliverables for the next release.</p>
<h2>A Smart (Enough) Decision</h2>
<p>James and Neil (I would guess) will tell you that ideally, the decision (should we pick one, and which one should we pick) should be informed by the process.  A feedback loop can be created where we identify the customers (the people who might abandon the process), and determine statistically which ones are most likely to abandon the process.  For those people, it is especially important that we be able to &#8220;pick one&#8221; from a set of search results, thus completely avoiding the opportunity to abandon the process.  For those people who are unlikely to abandon the process, the &#8220;pick one&#8221; decision is less important.</p>
<p>If it were easy to &#8220;pick one&#8221;, we would consider changing the way search is handled to never return multiple results.  In this real world example, that is not an option (I&#8217;m intentionally not sharing the reasons, to avoid disclosing too much).  The only option in this case is for the business to respond intelligently (enough) when presented with multiple search results.</p>
<h2>Conclusion</h2>
<p>This process flow example has two primary outcomes &#8211; generate profits, or don&#8217;t generate profits.  The first modification of the process flow makes that possibility explicit.  That allows for an analysis to determine if there are any hidden decisions in the flow (there are) that impact the outcomes of the flow.  There may be other hidden decisions, but they do not impact the profitability of this process, so they were not explored.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Hidden+Business+Rule+Example+http://bit.ly/1NACjf+" 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/09/23/hidden-business-rule-example/&amp;t=Hidden+Business+Rule+Example" 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/09/23/hidden-business-rule-example/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Market Driven Competitive Advantage</title>
		<link>http://tynerblain.com/blog/2008/08/26/market-driven-advantage/</link>
		<comments>http://tynerblain.com/blog/2008/08/26/market-driven-advantage/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 03:54:05 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[agile product management]]></category>
		<category><![CDATA[enthiosys]]></category>
		<category><![CDATA[market driven]]></category>
		<category><![CDATA[tuned in]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=697</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F08%2F26%2Fmarket-driven-advantage%2F", "style": "big", "title": "Market Driven Competitive Advantage" });

Your strategy should be driven by the needs of the market.  Becoming market-driven is critical to intentional product success.  But it is not enough to understand your market.  You have to sustain your understanding, and take advantage of it, competitively.

Markets Evolve Over Time
We all acknowledge [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F08%252F26%252Fmarket-driven-advantage%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Market%20Driven%20Competitive%20Advantage%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F08%2F26%2Fmarket-driven-advantage%2F", "style": "big", "title": "Market Driven Competitive Advantage" });</script></div>
<p><img src="http://www.smugmug.com/photos/359645395_oFcSZ-L.jpg" alt="mostly full glass" width="250" height="333" /></p>
<p>Your strategy should be driven by the needs of the market.  Becoming market-driven is critical to intentional product success.  But it is not enough to understand your market.  You have to sustain your understanding, and take advantage of it, competitively.</p>
<p><span id="more-697"></span></p>
<h2>Markets Evolve Over Time</h2>
<p>We all acknowledge that markets are not completely static.  If they were, there would be no impetus for innovation.  Customers change, their environment changes, and the competitive landscape changes.  All of these changes cause a market to change.  Even if a given market were static, you don&#8217;t have perfect information about it.  Your understanding of that market increases over time.</p>
<p><em>The market</em> is an abstract concept, and you have to make decisions about something tangible.  What is tangible is your <em>understanding of</em> the market.  And you make decisions based on your understanding of the market. You can visualize the market in a way that may cause you to rethink (or solidify) your approach to solving market problems.</p>
<p><img src="http://www.smugmug.com/photos/359586973_FCDye-L.gif" alt="market needs over time" width="450" height="297" /></p>
<p>In the chart above, we are showing that there is some amount of information (think of information as an understanding that we haven&#8217;t developed yet) about a market.  It represents the potential of what <em>could be</em> understood about the market.  Over time, the amount that can be understood increases.  Also note that there is already a non-zero amount of &#8220;understanding&#8221; at the start of the chart.  The market did not spontaneously spring forth from an oyster the moment you decided to look at it.</p>
<h2>You Affect Your Markets</h2>
<p>There is also an important dynamic to consider &#8211; you affect your markets by introducing solutions.</p>
<p><img src="http://www.smugmug.com/photos/359586979_LzGM9-L.gif" alt="influencing the market" width="450" height="384" /></p>
<p>Whenever someone introduces an innovative solution to a market problem, the market changes.  Solving that problem exposes another problem.  Or it may introduce another problem.</p>
<ul>
<li>When cars replaced horses, they introduced atmospheric polution problems.  Before that, we only had to worry about horse waste.</li>
<li>When airplanes solved the problem of traveling long distances in a short amount of time, more people began traveling further.  And those people discovered a need (desire) to stay connected (phone, internet, etc) while en-route.</li>
<li>When it became convenient to carry music around with you on a portable player, the problem of carrying <em>all of your music</em> around with you was discovered / created.</li>
</ul>
<p>You can argue that these problems were introduced because of innovative solutions, or that the problems were latent, and were only discovered because of the innovations.  It doesn&#8217;t matter.  What matters is that these problems were previously unaddressable, and now solutions to these problems have value.</p>
<h2>Your Knowledge of Your Markets</h2>
<p>Using the diagram above as a baseline of what <em>can be known</em>, and overlaying your knowledge looks like the following:</p>
<p><img src="http://www.smugmug.com/photos/359586988_coaQz-O.gif" alt="your knowledge of the market" width="450" height="385" /></p>
<p>At the moment when you decide to understand a market, you don&#8217;t know anything about it.  Your knowledge rapidly approaches what &#8220;can be known&#8221;, and assuming you have <a title="managing market data" href="http://tynerblain.com/blog/2008/08/19/managing-market-data/">perfect research, elicitation, and synthesis skills</a>, you eventually understand all that can be understood about the needs of the market.</p>
<p>So much advice has been written about <a title="buyer personas and user personas" href="http://tynerblain.com/blog/2008/07/22/buyers-and-users/">being market focused</a>, that it is easy to think that this is all you need.  <a title="converting from an mrd to a prd" href="http://tynerblain.com/blog/2006/02/09/mrd-to-prd-requirements-conversion/">As soon as you understand &#8220;everything&#8221; you define requirements</a> and start creating products.  <a title="study your market, not your customers" href="http://tynerblain.com/blog/2008/07/15/the-non-customer-is-always-right/">Being market focused</a> is extremely important.  But you have to sustain that focus.</p>
<h2>Competition in Your Market</h2>
<p>In the diagram above, you see the dynamics of your market.  You develop an understanding of your market, a competitor delivers an innovative solution to a problem, and you have to play catch-up.  Note &#8211; this is only talking about playing catch-up in <em>your understanding</em> of the market.  You also need to continue to develop new solutions for the market in order to capitalize on your understanding.</p>
<p>The next diagram shows what this will look like when there is active competition in the market.</p>
<p><img src="http://www.smugmug.com/photos/359586993_Nf6nZ-L.gif" alt="competitive market dynamics" width="450" height="394" /></p>
<p>The diagram above shows <a title="product differentiation is the key" href="http://tynerblain.com/blog/2006/05/24/differentiation-vs-improvement/">three disruptive events</a>.  <a title="ten tips for preventing innovation" href="http://tynerblain.com/blog/2006/03/06/top-ten-tips-for-preventing-innovation/">You innovate</a>, <a title="innovation magic square" href="http://tynerblain.com/blog/2006/03/28/magic-square-of-innovation/">someone else innovates</a>, and you innovate again.  Each time someone else innovates, they have an edge on understanding the market.  They just solved a problem, uncovering new problems that can be solved, and you have to gain that knowledge too &#8211; it wasn&#8217;t available (or didn&#8217;t exist) previously.</p>
<h2>Competitive Advantage</h2>
<p>Each time you innovate, you establish a temporary competitive advantage.</p>
<p><img src="http://www.smugmug.com/photos/359586997_xXG83-L.gif" alt="competitive advantage" width="416" height="378" /></p>
<p>When you introduce a novel solution to a problem, the market uncovers new problems.  Presumably, you have already thought about the next steps.  You have already engaged the market (through <a title="prototyping and iteration" href="http://tynerblain.com/blog/2006/02/21/software-requirements-specification-iteration-and-prototyping/">prototyping</a> and other <a title="active listening" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">elicitation activities</a>) to get feedback on your solution.  Hopefully, as part of that exercise, you&#8217;ve also explored &#8220;what&#8217;s next&#8221; and incorporated that into your plans.  This is the advantage you have created.  If you don&#8217;t explore &#8220;what&#8217;s next,&#8221; you waste that opportunity.</p>
<p>The opportunity won&#8217;t last forever.  Your competition will see your solution, talk to your customers, and otherwise explore &#8220;what&#8217;s next.&#8221;  It will take time, but they will catch up.  Over the long term, you benefit from exploiting a series of these opportunities.  Look at the iPod and the Zune.  Apple has delivered a series of disruptive changes, continually building on what they have learned.  Microsoft is playing catch-up with the Zune.  Each version of the Zune shares a lot of design cues and features with earlier iPods.  To Microsoft&#8217;s credit, they are trying to innovate too &#8211; like with the &#8220;squirt&#8221; technology that lets you share a song temporarily with another Zune user.  Either this is not a valuable problem, or the solution is not effective &#8211; because it has not taken off (in buzz, market share, or general clamoring for an iPod-based equivalent).</p>
<h2>Fast Follower Competition</h2>
<p>Some <a title="being effective as a second mover" href="http://tynerblain.com/blog/2006/02/28/second-mover-opportunities-bringing-a-gun-to-a-knife-fight/">competitors intentionally act as second movers</a>.  Instead of focusing their efforts on discovering problems or developing innovative solutions, they focus on playing catch-up very very well.</p>
<p><img src="http://www.smugmug.com/photos/359587004_nHRq5-O.gif" alt="fast follower" width="379" height="379" /></p>
<p>A fast-follower reduces (but does not eliminate) your temporary advantage.  At the same time, the fast follower creates their own advantage relative to every other competitor in the market.  This can be a very effective strategy, especially when there are multiple innovators in a single market.  The fast follower can follow the best ideas of each innovator, possibly even ending up with a better overall product than any of the innovators (who are slow followers of other companies).</p>
<p>Microsoft is clearly a follower of Mozilla when it comes to browsers.  The tabbed navigation concept introduced in Firefox was a game changer, at least for the tech-savvy who need to juggle multiple web pages at the same time.  Personally, I was thrilled to move from multiple Internet Explorer windows to a single Firefox window with multiple tabs.  IE7 has that capability now too.  I don&#8217;t know the browser market well enough to know if I would characterize Microsoft as a <em>fast</em> follower, but my guess is no.</p>
<p>After the post-World War 2 reconstruction in Japan, the Japanese automakers definitely acted as fast followers.  They did it with assistance from the US, and even moved past the US automakers by choosing to listen to Deming (a guru on efficiency and quality) instead of ignoring him like the US big 3 (automakers) did.  And it did indeed pay off for them &#8211; <a title="toyota unseats gm" href="http://www.usnews.com/blogs/flowchart/2008/6/9/how-toyota-could-become-the-us-sales-champ.html">Toyota is poised to unseat GM</a> as the number one automaker in the US for 2008.  There are certainly other factors at play, but the Japanese companies would never have had a chance if they had not been competitive in the first place.</p>
<h2>Business Agility</h2>
<p>Business agility is one of the hotter buzz-phrases these days.  The business-rules-automation market is thriving on the desire of businesses to become more agile.  Why does agility matter?  Because it can make you dramatically more competitive.</p>
<p><strong>Business Agility is not the same as agile development!</strong></p>
<p>Business Agility is a measure of the ability of a business to adapt to the changing needs of the market.  To adapt quickly, your company has to accomplish two things:</p>
<ul>
<li>Quickly identify and understand the changes in your market.</li>
<li>Quickly deliver new and improved solutions that address the changing needs of your markets.</li>
</ul>
<p>[How to quickly execute is covered in other articles in the <a title="business rules category" href="http://tynerblain.com/blog/category/business-rules/">business rules</a> (including their <a title="The impact of business rules on agility" href="http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/">impact on agility</a>) and <a title="agile articles" href="http://tynerblain.com/blog/category/software-development/agile/">agile development</a> categories on Tyner Blain.]</p>
<p><img src="http://www.smugmug.com/photos/359587014_yRG3q-O.gif" alt="business agility" width="450" height="394" /></p>
<p>In the diagram above, you (the red curve on the top) are innovating repeatedly.  You are also adapting to the changes in your market from other innovations (and other sources of change, not shown).  You are practicing agile product management.  Your competition (the green curve on the bottom) is not.  As this trend continues, you see that your <em>exploitable advantage</em> becomes a sustained advantage.  You will have an ever-increasing advantage as you stay tapped into your market.  If you are executing (to deliver product) and communicating (to educate), you will be able to leverage your insights into a position of thought leadership.  [Note: "thought leader" is a title that can <em>not</em> be self-annointed, it has to be earned and perceived within your market / community.]</p>
<p>The end result is that you will be consistently aware of unserved market needs that you can serve before your competitors can.  That translates into increased demand for your products, which you can use to grow share, grow profits, etc.</p>
<p>That&#8217;s why business agility matters.  It isn&#8217;t cost reduction that is important, its top-line growth.</p>
<h2>Agile Product Management</h2>
<p>Staying tapped into your market like this is a strategic component of agile product management.  While continuously staying tapped-in (or <a title="pragmatic marketing tuned in" href="http://www.pragmaticmarketing.com/tunedin">Tuned-In</a>), you regularly interact with your internal stakeholders to make agile development processes work.  Enthiosys has a great <a title="enthiosys whitepaper" href="http://www.enthiosys.com/apm-whitepaper/">introduction to agile product management</a> (free download with registration), if you&#8217;re getting frustrated with the many &#8220;empty presentations&#8221; about agile product management, then definitely check that one out &#8211; it has meat.  Relative to their <em>onion</em>, the topics in this article map to the <em>portfolio</em> and <em>product</em> layers.</p>
<p>If you aren&#8217;t already convinced of the value of a tight market focus, consider the following diagram, contrasting the impact of agile product management and traditional, <a title="waterfall and incremental processes" href="http://tynerblain.com/blog/2006/01/03/foundation-series-software-process-waterfall-process-versus-incremental-process/">waterfall</a> product management.</p>
<p><img src="http://www.smugmug.com/photos/359587019_SFibj-L.gif" alt="waterfall product management" width="450" height="303" /></p>
<ul>
<li>The red curve on the top (same as previous slides) represents an agile product manager staying tapped into her market.</li>
<li>The grey curve in the middle represents a product manager staying tapped into the market, but not as tightly.</li>
<li>The green curve on the bottom shows what happens when your organization is trapped in a waterfall delivery model.</li>
</ul>
<p>The green curve, instead of reflecting understanding, reflects the understanding <em>against which the team executes</em>.  When you lock in or &#8220;freeze&#8221; the requirements, then begin a sequential development process, you stop taking advantage of market insights.  You essentially decouple your implementation team from the market &#8211; &#8220;we know enough already.&#8221;  So even though your product manager may be learning more (the grey curve), you aren&#8217;t taking advantage of that knowledge, so it is adds no value.</p>
<p>As an agile product manager, working with an agile implementation team, you will run circles around your waterfall competition.  Not only will you establish thought leadership, but you will be creating a distinctive competence for your company.  Your ability to understand the market, and quickly respond to changes in the market with valuable solutions will differentiate your company.</p>
<p>You also effectively change the dynamics of your sales over time.  Your accelerated insights allow you to release products (or capabilities) earlier.  Here&#8217;s a diagram from an earlier article on the ROI of agile that highlights the impact of this:</p>
<blockquote><p>If we take the most conservative approach to modeling sales with an agile process, the graph would look like the following:</p>
<p><img title="agile product life cycle" src="http://sehlhorst.smugmug.com/photos/132613783-M.png" alt="agile product life cycle" /></p>
<p>The sales volume curve is shifted to the left without changing its shape. The exact same growth curve applies to the product (this is the conservative assumption). The <em>decline</em> in sales continues to decline. The difference is that our previous time horizon (which remains fixed) now includes additional sales.</p>
<p><a title="agile development roi" href="http://tynerblain.com/blog/2007/02/27/agile-development-roi-1/">Product Life Cycle and the ROI of Agile Development</a></p></blockquote>
<h2>Agile Without Product Management</h2>
<p>There are people who suggest that product management has no place in an agile environment.  Those people believe that markets <em>can&#8217;t</em> be understood until they are served.  They will argue that customers &#8220;don&#8217;t know what they want&#8221; based upon the feedback they get from prototypes.  Customers change their minds.  Yup.  But it isn&#8217;t that the customers don&#8217;t know what they want, nor is it that markets don&#8217;t have shared needs/problems/goals/requirements &#8211; they do.  Providing solutions to those problems drives next-level thinking, and the identification of new and different problems.</p>
<p>If you don&#8217;t have product management, <a title="product success by intentional design" href="http://tynerblain.com/blog/2008/05/19/successful-products/">you can only succeed through luck</a>.  Throw stuff against the wall and see what sticks.  If something sticks, you win.  This is better than a waterfall model that ignores the market (for long periods of time where release plans are &#8220;set in stone&#8221;).  But it falls well short of driving a very efficient, adaptable implementation team directly towards identifiable market needs.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Market+Driven+Competitive+Advantage+http://bit.ly/hTAtt+" 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/08/26/market-driven-advantage/&amp;t=Market+Driven+Competitive+Advantage" 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/08/26/market-driven-advantage/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>How Do You Manage Market Data?</title>
		<link>http://tynerblain.com/blog/2008/08/19/managing-market-data/</link>
		<comments>http://tynerblain.com/blog/2008/08/19/managing-market-data/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 05:35:28 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[feature requests]]></category>
		<category><![CDATA[market needs]]></category>
		<category><![CDATA[market segmentation]]></category>
		<category><![CDATA[personas]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=696</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F08%2F19%2Fmanaging-market-data%2F", "style": "big", "title": "How Do You Manage Market Data?" });

Great product management starts with an insightful understanding of your market.  Not just understanding a customer, and not even understanding all of your customers, but understanding your target market.  What works for you?

The Needs of The Many&#8230;

Mr. Spock was on the right track [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F08%252F19%252Fmanaging-market-data%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22How%20Do%20%3Ci%3EYou%3C%2Fi%3E%20Manage%20Market%20Data%3F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F08%2F19%2Fmanaging-market-data%2F", "style": "big", "title": "How Do <i>You</i> Manage Market Data?" });</script></div>
<p><img src="http://www.smugmug.com/photos/355387314_vRjSL-L.jpg" alt="bigfoot.  yes, really." width="200" height="241" /></p>
<p>Great product management starts with an insightful understanding of your market.  Not just understanding a customer, and not even understanding all of your customers, but understanding your target market.  What works for you?</p>
<p><span id="more-696"></span></p>
<h2>The Needs of The Many&#8230;</h2>
<p><img src="http://www.smugmug.com/photos/355241108_PwKrX-S.jpg" alt="spock" width="290" height="300" /></p>
<p>Mr. Spock was on the right track in <a title="wrath of khan quotes" href="http://www.imdb.com/title/tt0084726/quotes"><em>Wrath of Khan</em></a>, when he said &#8220;logic clearly dictates that the needs of the many outweigh the needs of the few.&#8221;  And Captain Kirk apparently took Pragmatic Marketing&#8217;s training, since he responded, &#8220;Or the one.&#8221;  [That was their original mantra circa 1982, before the more common "Your opinion, while interesting, is irrelevant."]</p>
<p>It isn&#8217;t just the crew of the starship Enterprise that believes an understanding of your target market is critical to product success.  I believe it, Pragmatic&#8217;s folks teach it, every good product manager I&#8217;ve run across embodies this belief.  [Note: Steve Yegge has <a title="business requirements are worthless" href="http://steve-yegge.blogspot.com/2008/08/business-requirements-are-bullshit.html">a very intense article</a> where (I think) he believes it too, but believes that it is futile to try and understand a market that doesn't include you.]</p>
<h2>Tools and Techniques</h2>
<p>We have a lot of articles here that help you communicate &#8216;an understanding of the market needs&#8217; with your implementation team &#8211; where implementation equals development AND testing.</p>
<ol>
<li> Documenting <a title="MRD" href="http://tynerblain.com/blog/2006/01/24/from-mrd-to-prd-the-key-to-defining-a-spec/">market needs</a> (existing and new markets)</li>
<li>Making <a title="stakeholder value matrix" href="http://tynerblain.com/blog/2007/10/25/stakeholder-value-matrix/">strategic decisions</a> to <a title="converting from an MRD to a PRD" href="http://tynerblain.com/blog/2006/02/09/mrd-to-prd-requirements-conversion/">address those needs</a></li>
<li><a title="managing stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">Engaging with stakeholders</a> to <a title="validate needs with stakeholders" href="http://tynerblain.com/blog/2006/07/06/requirement-completeness-validation-with-use-cases/">validate needs</a></li>
<li><a title="requirements prioritization articles" href="http://tynerblain.com/blog/category/requirements/prioritization/">Prioritizing</a> / <a title="using timeboxes to plan releases" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">planning product releases</a> / <a title="build a good product roadmap" href="http://tynerblain.com/blog/2008/04/28/dont-build-a-stupid-product-roadmap/">roadmaps</a> to <a title="release schedules and use cases" href="http://tynerblain.com/blog/2005/12/22/communicating-a-delivery-schedule-with-use-cases/">align a release schedule with targeted needs</a></li>
<li><a title="more on stakeholder goals" href="http://tynerblain.com/blog/2007/10/18/stakeholder-goals-2/">Engaging</a> with <a title="visualizing stakeholders" href="http://tynerblain.com/blog/2007/03/13/visualize-stakeholder-analysis/">stakeholders</a> to <a title="communicating intent with stakeholders" href="http://tynerblain.com/blog/2006/07/14/communicating-intent-with-stakeholders/">clarify needs</a></li>
<li><a title="five requirements gathering tips" href="http://tynerblain.com/blog/2006/01/14/top-five-requirements-gathering-tips/">Gathering </a>and <a title="writing good requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">documenting requirements</a> details and <a title="requirements traceability and the impact of change on use cases" href="http://tynerblain.com/blog/2006/07/24/the-impact-of-change-and-use-cases/">inter-dependencies</a></li>
<li><a title="verify requirements correctness" href="http://tynerblain.com/blog/2006/07/10/verify-correct-requirements/">Validating feasibility</a> / <a title="communicate intent with development and test" href="http://tynerblain.com/blog/2006/07/17/communicating-intent-with-implementers/">communication of intent with implementation</a> (development and test) teams</li>
<li><a title="prototyping" href="http://tynerblain.com/blog/2006/02/21/software-requirements-specification-iteration-and-prototyping/">Prototyping</a> and eliciting user feedback</li>
</ol>
<p>To name a few.  We&#8217;ve also written about several techniques you can use</p>
<ul>
<li><a title="how to interview when gathering requirements" href="http://tynerblain.com/blog/2006/01/15/how-to-interview-when-gathering-requirements/">Gathering requirements via interviews</a></li>
<li><a title="ten active listening skills" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">Applying (and improving) your active listening skills</a></li>
<li><a title="how to create personas" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">Persona development</a>, and differentiation of user goals from corporate goals (<a title="buyer personas and user personas" href="http://tynerblain.com/blog/2008/07/22/buyers-and-users/">and from buyer goals</a>)</li>
</ul>
<h2>The Missing Link</h2>
<p><img src="http://www.smugmug.com/photos/355387314_vRjSL-L.jpg" alt="bigfoot" width="200" height="241" /></p>
<p>With all the current hub-bub about the bigfoot hoax (&#8220;I think I&#8217;m going to have a heart attack and die from not surprise!&#8221; &#8211; <a title="aladdin quotes" href="http://www.imdb.com/title/tt0103639/quotes">Iago, Aladdin</a>), I couldn&#8217;t pass up this mug shot.</p>
<p>Collecting the customer-need data, with something more than anecdotal evidence, is tricky.  One of the premises of the agile movement is that you can&#8217;t, so don&#8217;t waste time trying.  I&#8217;ve always approached it by gathering anecdotal data, <a title="cause and effect" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">looking for root causes</a> to create <a title="bad problem statements" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">problem statements</a>, and then working to map back to personas &#8211; dangerously extrapolating trends from a handful of datapoints.  And it seems to work.  But it doesn&#8217;t scale.  There must be a better way.</p>
<p>I had a great conversation with someone who asked the Austin PMM yahoo group what tools they used for tracking &#8220;customer feature requests.&#8221;  [Thanks again, btw, if you're reading this.]  The requestor was looking for something <em>less</em> than Feature Plan.  Just a mechanism for tracking feature requests.</p>
<p>Here&#8217;s the problem.  <strong>A feature request is to a market requirement as a gorilla suit in a block of ice is to a frozen captured Bigfoot</strong>.  Tracking and managing feature requests isn&#8217;t what we actually need to do.  Tracking and managing market requirements is what we need to do.</p>
<h2>What Do You Do?</h2>
<p><img src="http://sehlhorst.smugmug.com/photos/51655408_DGhh2-L.jpg" alt="microphone" width="250" height="187" /></p>
<p>OK, so you manage a product that is sold by a sales team.  Those sales people, and account managers get feature requests all the time.  Or you have a SaaS product, and you built in a feedback mechanism.  A 2006 survey of SaaS vendors found that the ratio of feature requests to bug reports was on average, 5 to 1.  That&#8217;s a lot of feature requests.  Your process should look like the following:</p>
<ol>
<li>Review feature requests.</li>
<li>Do something, possibly using some tool(s).</li>
<li>Determine market needs, prioritize markets (or needs), and update your roadmap&#8230;</li>
</ol>
<p>Share what and how you do it.  Some questions I would ask if you were teaching me how:</p>
<ul>
<li>Assuming you map &#8216;features X, Y, and Z&#8217; to an actual &#8216;requirement A&#8217;, how do you chunk those inputs &#8211; by persona, by market segment, something else?</li>
<li>Do you have a way to automate any of the analysis (e.g. mapping a market need to a segment or persona)?</li>
<li>If you had a magic wand, what would make that job easier?</li>
<li>Any lessons-learned / advice for new product managers?</li>
<li>How do you close the feedback loop with the customers who originally submitted all of those feature requests?</li>
</ul>
<p>Thanks in advance for any responses!</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+How+Do+%3Ci%3EYou%3C%2Fi%3E+Manage+Market+Data...+http://bit.ly/2ReOdT+" 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/08/19/managing-market-data/&amp;t=How+Do+%3Ci%3EYou%3C%2Fi%3E+Manage+Market+Data..." 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/08/19/managing-market-data/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Successful Products: Lucky or Intentional?</title>
		<link>http://tynerblain.com/blog/2008/05/19/successful-products/</link>
		<comments>http://tynerblain.com/blog/2008/05/19/successful-products/#comments</comments>
		<pubDate>Tue, 20 May 2008 03:03:47 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></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 gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[empirical processes]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[market identification]]></category>
		<category><![CDATA[product roadmaps]]></category>
		<category><![CDATA[product success]]></category>
		<category><![CDATA[rolling wave planning]]></category>
		<category><![CDATA[software product success]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=681</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F05%2F19%2Fsuccessful-products%2F", "style": "big", "title": "Successful Products: Lucky or Intentional?" });

Is your product successful because you were lucky, or because you were methodical and intentional?
Do you want to build a plan where you are dependent on good fortune, or do you want to make your own &#8220;luck?&#8221;  Both approaches work, but only one [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F05%252F19%252Fsuccessful-products%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Successful%20Products%3A%20Lucky%20or%20Intentional%3F%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F05%2F19%2Fsuccessful-products%2F", "style": "big", "title": "Successful Products: Lucky or Intentional?" });</script></div>
<p><img src="http://sehlhorst.smugmug.com/photos/298153581_QJz2t-L.jpg" alt="heads" width="250" height="187" /><img src="http://sehlhorst.smugmug.com/photos/298153556_t7Vug-L.jpg" alt="tails" width="250" height="187" /></p>
<p>Is your product successful because you were lucky, or because you were methodical and intentional?</p>
<p>Do you want to build a plan where you are dependent on good fortune, or do you want to make your own &#8220;luck?&#8221;  Both approaches work, but only one makes sense as an intention.  Slide 3 of your presentation to a venture capitalist should not say &#8220;And then we get lucky!&#8221;</p>
<p><span id="more-681"></span></p>
<h2>Product Success Is Not Easy</h2>
<p>Saeed Khan wrote a critique recently, in <a title="product success at on product management" href="http://onproductmanagement.wordpress.com/2008/05/19/product_success/"><em>On Product Management</em></a>, of an article by Phil Meyers on the <a title="chasing outcomes" href="http://www.tunedinblog.com/blog/2008/03/chasing-outcome.html"><em>Tuned In</em></a> blog.  Phil&#8217;s article is an analysis of the pending re-organization at Starbucks, and the one quote that Saeed keyed in on was:</p>
<blockquote><p>At the end of the day, its simple.  Create a product or service that your buyers want to buy and the rest takes care of itself.</p></blockquote>
<p>Saeed&#8217;s point is that it is not that easy.  A lot of hard work goes into creating a successful product.  And Saeed&#8217;s right.</p>
<p>Maybe Phil&#8217;s point is that the <em>executive</em> should not worry about the details, and trust in his team to do all the hard work.  But he doesn&#8217;t really come out and say that, so we can&#8217;t really back him up on that front.  Let&#8217;s give him the benefit of the doubt anyway.  There&#8217;s another point that Phil makes that is potentially disturbing:</p>
<blockquote><p>Looking at metrics like average same day sales and products per square foot lead you down some strange paths. Schultz even admitted as much in a letter from the board about a year ago in which he worried about the company &#8216;losing its core&#8217;.</p></blockquote>
<p>Yes, abandoning your goals to pursue your metrics is bad.  But don&#8217;t abandon your metrics to pursue your goals &#8211; unless all you want to do is get lucky.</p>
<p>You might argue that a company like <a title="animoto" href="http://animoto.com/">Animoto </a>got lucky when their product spread virally within <a title="facebook" href="http://www.facebook.com/home.php">Facebook</a> and their user base jumped from 25,000 to 700,000 users.  But if you listen to the <a title="net@nite animoto interview" href="http://twit.tv/natn49">interview</a> that Amber MacArthur did with co-founder Brad Jefferson, you will realize that it was only when they <em>tweaked</em> their product offering &#8211; a response to empirical analysis of product adoption metrics &#8211; did their success explode.  I would argue that they <em>made their luck</em> by being intentional.</p>
<h2>Empirical Processes</h2>
<p>When you can perfectly model your business analytically, you can measure the inputs and know (with certainty) the outputs.  As a college engineering student, I learned this.  Real world processes can never be perfectly modeled analytically.  As a professional engineer, I learned this too.  Real world processes are empirical.  The secret to great engineering is to apply analytics to those empirical processes to create disruptive innovation, and combine it with empirical controls that help you statistically predict the likely outputs.  The answer is simply that neither analytics nor empiricism <em>alone</em> can help you achieve greatness.</p>
<p>Business processes are also empirical in nature.  Even when you can devise an analytical model for the behavior of an <em>isolated</em> system, you have to acknowledge that <em>no real world system</em> is isolated.  You have to expect unexpected inputs into the system.  As Saeed points out, you have to apply analyses to make smart decisions when developing your process (or business model, or product).  And what Phil appears to discount is that you also need to apply empirical measurements to your process (or business or product) to control the expected results.</p>
<h2>Creating Successful Products Intentionally</h2>
<p>This article proposes that there are two paths to product success.  The first path is simple.  Cross your fingers, then get lucky.  The second path is harder.  Be intentional.</p>
<ol>
<li>Identify your market (and therefore your customers and competition).</li>
<li>Identify their problems, and select the ones you will solve.</li>
<li>Create a product roadmap (aka a &#8220;plan&#8221;) to solve those problems.</li>
<li>Design and implement solutions to the most valuable problems.</li>
<li>Get feedback on your solutions.</li>
<li>Incorporate your feedback into your plan (step 3) and repeat.</li>
<li>Revisit your market (step 1) and the problems you choose to solve (step 2) and repeat.</li>
</ol>
<p>Note: Step 7 should occasionally replace step 6, so that you stay focused on your market, and not just an out-of-date snapshot of what used to be important to your customers.</p>
<h2>1. Identify Your Market</h2>
<p>There are a lot of ways to pick a market to focus on.  You can chase demographics &#8211; there sure will be a lot of retired people in the US thanks to the <a title="wikipedia baby boomers" href="http://en.wikipedia.org/wiki/Baby_boomer">baby-boomers</a>.  You can go with what you know &#8211; years of paying attention to an industry presents ample opportunities to understand the market.  You can create an entirely new &#8211; blue ocean &#8211; market by solving problems people don&#8217;t even realize they have until you offer a solution.  Choosing a market is the subject of many books, not just an item in a list.</p>
<p>Once you choose a market, you need to <a title="market segmentation" href="http://tynerblain.com/blog/2006/04/25/market-segmentation-or-senseless-mistake/">segment the market</a> into groups of people who share the same problems and who value solutions to those problems similarly.  You can <a title="improve your market segmentation" href="http://tynerblain.com/blog/2006/11/01/how-to-apply-market-research-better/">apply market research to improve your market segmentation</a>.</p>
<h2>2. Select The Problems You Will Solve</h2>
<p>You use <a title="elicitation techniques" href="http://tynerblain.com/blog/2006/01/14/top-five-requirements-gathering-tips/">elicitation skills</a> to <a title="writing good problem statements" href="http://tynerblain.com/blog/2008/05/12/your-problem-statement/">identify the problems that your customers face</a>.  And when you have to address multiple market segments, you can <a title="prioritization across market segments" href="http://tynerblain.com/blog/2008/04/09/improved-prioritization/">prioritize the problems across those market segments</a>.</p>
<h2>3. Create a Product Roadmap</h2>
<p>Once you&#8217;ve prioritized the problems you are going to solve, create a product roadmap.  <a title="product roadmaps should focus on problems" href="http://tynerblain.com/blog/2008/04/28/dont-build-a-stupid-product-roadmap/">Your product roadmap should show the problems you are solving</a>, and the order in which you will solve them.  When you define sequencing, you also must define your approach to <a title="scheduling product releases" href="http://tynerblain.com/blog/2007/03/01/scheduling-product-releases/">scheduling product releases</a>.</p>
<h2>4. Design and Implement Solutions</h2>
<p>There are two keys to successful execution of the plan you built with your product roadmap.  First &#8211; <a title="rolling wave planning" href="http://tynerblain.com/blog/2006/07/25/incremental-project-mgmt/">use rolling-wave planning to define near-term details</a> and long term vagaries.  Second &#8211; make sure you have <a title="intro to continuous integration" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">continuous integration</a> as a key component to managing quality throughout the process, instead of checking quality at the end (or even worse &#8211; <a title="The cost of ignoring quality" href="http://tynerblain.com/blog/2006/02/22/software-testing-series-measuring-the-cost-of-quality/">ignoring quality</a>).</p>
<h2>5. Get Feedback on Your Solutions</h2>
<p>This is half of why <a title="Is agile bad?" href="http://tynerblain.com/blog/2007/04/16/is-agile-bad-for-software/">agile (when done right) works</a> [Can you believe the discussion over the last year on this article is up to 27 comments?!].  Feedback is not just something you get when <a title="prototype feedback and other requirements gathering techniques" href="http://tynerblain.com/blog/2006/11/21/ten-requirements-gathering-techniques/">sharing a prototype with stakeholders</a>.  Feedback is also something you must get as part an <a title="incremental vs waterfall release processes" href="http://tynerblain.com/blog/2006/01/03/foundation-series-software-process-waterfall-process-versus-incremental-process/">incremental release methodology</a>.</p>
<p>You can even <a title="measuring the roi of design" href="http://tynerblain.com/blog/2007/07/30/measuring-the-roi-of-design/">measure the ROI of your designs</a>, and incorporate feedback at the design level.</p>
<h2>6. Incorporate Feedback Into Your Plan</h2>
<p>There&#8217;s no point in gathering feedback <a title="enabling and resisting change" href="http://http://tynerblain.com/blog/2007/07/09/enabling-and-resisting-change/">if your organization and your process are organized to resist changes to the plan</a>.  Contrary to what the Standish Group&#8217;s CHAOS study has always implied [and we've made this implicit mistake too], release schedules are not the primary measure of project success.  In <a title="defining success" href="http://www.ddj.com/architect/202800777?pgno=1">a fantastic article at <em>Dr. Dobb&#8217;s Journal</em></a>, Scott Ambler points out that in his survey results, almost two thirds of professionals find that doing the right thing is more important than meeting a project schedule.</p>
<blockquote><p>Schedule: 61.3 percent of respondents said that it is more important to deliver a system when it is ready to be shipped than to deliver it on time.</p></blockquote>
<p>Do the right thing.  If the right thing involves changing the schedule, that doesn&#8217;t make it wrong.  What makes this work is the fact that you are getting feedback early and often.  It is a risk mitigation strategy, designed to reduce the possibility that you will create an unsuccessful product.  It is not a strategy designed to keep your project on schedule no matter how mis-aligned you are to your market.</p>
<h2>7. Revisit What You Are Doing And Why</h2>
<p>If step 6 is small-scale course correction, this is large-scale course correction.  You may discover that solving a big problem for your customers exposes a new &#8220;biggest&#8221; problem that wasn&#8217;t there before.  By revisiting step 2, you can choose to tackle or ignore those newly discovered problems.</p>
<p>You may also discover that by leveraging your investments to date, you <a title="value maximization" href="http://tynerblain.com/blog/2007/07/31/prioritization-and-value-maximization/">dramatically improve the ROI</a> of solving problems in another valuable market segment.  This is because even if solutions to those problems have the same value, solutions to those problems now have <a title="5 tips for calculating costs and ROI" href="http://tynerblain.com/blog/2007/02/08/five-roi-calculation-tips/">much lower costs</a> (for you).  By revisiting step 1, you give yourself the opportunity to best manage your strategy, your resources, and your plans.</p>
<h2>Conclusion</h2>
<p>Product Success may have an element of luck, but you should never plan to hit the lottery.  Be intentional in what you will do, and a good plan, executed well and adapting to change, will get you there.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Successful+Products%3A+Lucky+or+Intentional...+http://bit.ly/z2rCw+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/05/19/successful-products/&amp;t=Successful+Products%3A+Lucky+or+Intentional..." title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/05/19/successful-products/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Recycling An Active Listening Article</title>
		<link>http://tynerblain.com/blog/2008/03/31/active-listening-redux/</link>
		<comments>http://tynerblain.com/blog/2008/03/31/active-listening-redux/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 02:04:24 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Administrivia]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[active listening]]></category>
		<category><![CDATA[active listening skills]]></category>
		<category><![CDATA[active listening tips]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[supercharged active listening]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/31/active-listening-redux/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F03%2F31%2Factive-listening-redux%2F", "style": "big", "title": "Recycling An Active Listening Article" });

We&#8217;re dedicating our &#8220;blogging time&#8221; this week to doing some infrastructure upgrades &#8211; we have to address some security issues on the site.  Until we get through these changes, we&#8217;ll be recycling some of our existing content.  For our recent readers, it [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F03%252F31%252Factive-listening-redux%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Recycling%20An%20Active%20Listening%20Article%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F03%2F31%2Factive-listening-redux%2F", "style": "big", "title": "Recycling An Active Listening Article" });</script></div>
<p><img title="recycling" alt="recycling" src="http://sehlhorst.smugmug.com/photos/174257363_XH3Ya-L.jpg" /></p>
<p>We&#8217;re dedicating our &#8220;blogging time&#8221; this week to doing some infrastructure upgrades &#8211; we have to address some security issues on the site.  Until we get through these changes, we&#8217;ll be recycling some of our existing content.  For our recent readers, it will be &#8220;new to you&#8221; and for our long time readers, we appreciate your patience.  Today we look at one of our better received articles on active listening.</p>
<p><span id="more-655"></span></p>
<h3><a title="active listening tips" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">Ten Supercharged Active Listening Skills To Make You More Successful</a> [15 Mar 2007]</h3>
<p><img title="listening attentively" alt="listening attentively" src="http://sehlhorst.smugmug.com/photos/60941547-S.jpg" /></p>
<p>Active listening is about more than gaining understanding. Active listening is about giving. Giving assurance that you understand someone’s needs. Giving confidence that you will address those needs. Giving feedback and acknowledgement that someone’s input is valuable. If you haven’t tried active listening, you may think it is a passive, receptive activity. Here are ten active listening skills that will help you, your customers and your team.</p>
<p>Our <a title="active listening skills" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">active listening article</a> goes into details on the following 10 Active Listening Tips:</p>
<ol>
<li>Acknowledging</li>
<li>Restating</li>
<li>Reflecting</li>
<li>Interpreting</li>
<li>Summarizing</li>
<li>Probing</li>
<li>Giving Feedback</li>
<li>Supporting</li>
<li>Checking Perceptions</li>
<li>Being Quiet</li>
<li>[Bonus] Extending</li>
</ol>
<p>I hope you enjoy them and put them to good use &#8211; they really do make a difference</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Recycling+An+Active+Listening+Article+http://bit.ly/rPekb+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/03/31/active-listening-redux/&amp;t=Recycling+An+Active+Listening+Article" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/31/active-listening-redux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 5</title>
		<link>http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/</link>
		<comments>http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 03:16:20 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F03%2F19%2Frequirements-class-diagrams-5%2F", "style": "big", "title": "Uncovering Requirements With UML Class Diagrams Part 5" });

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

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+5+http://bit.ly/167eF2+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+5" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/19/requirements-class-diagrams-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 4</title>
		<link>http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/</link>
		<comments>http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 02:00:59 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F03%2F17%2Frequirements-class-diagrams-4%2F", "style": "big", "title": "Uncovering Requirements With UML Class Diagrams Part 4" });

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

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+4+http://bit.ly/2VYFXp+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+4" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/17/requirements-class-diagrams-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 3</title>
		<link>http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/</link>
		<comments>http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 03:40:47 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F03%2F13%2Frequirements-class-diagrams-3%2F", "style": "big", "title": "Uncovering Requirements With UML Class Diagrams Part 3" });

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

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+3+http://bit.ly/41Djpk+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+3" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/13/requirements-class-diagrams-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 2</title>
		<link>http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/</link>
		<comments>http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 04:26:32 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>
		<category><![CDATA[visio]]></category>
		<category><![CDATA[visio uml]]></category>
		<category><![CDATA[visio uml stencil]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F03%2F10%2Frequirements-class-diagrams-2%2F", "style": "big", "title": "Uncovering Requirements With UML Class Diagrams Part 2" });

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

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+2+http://bit.ly/lK0CC+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+2" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Uncovering Requirements With UML Class Diagrams Part 1</title>
		<link>http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/</link>
		<comments>http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 04:23:41 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[modeling requirements]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[requirements class diagram]]></category>
		<category><![CDATA[uml class diagram for analysis]]></category>
		<category><![CDATA[uml class diagrams]]></category>
		<category><![CDATA[uml requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F03%2F06%2Frequirements-class-diagrams-1%2F", "style": "big", "title": "Uncovering Requirements With UML Class Diagrams Part 1" });

UML Class Diagrams can be used not only for documenting software design, but for documenting software requirements.  One of the challenges in writing clear, unambiguous requirements is being precise about what a particular word means.  This is especially true [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F03%252F06%252Frequirements-class-diagrams-1%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Uncovering%20Requirements%20With%20UML%20Class%20Diagrams%20Part%201%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F03%2F06%2Frequirements-class-diagrams-1%2F", "style": "big", "title": "Uncovering Requirements With UML Class Diagrams Part 1" });</script></div>
<p><img title="digger" alt="digger" src="http://sehlhorst.smugmug.com/photos/262810530_eFAkk-L.jpg" /></p>
<p>UML Class Diagrams can be used not only for documenting software design, but for documenting software requirements.  One of the challenges in writing clear, unambiguous requirements is being precise about what a particular word means.  This is especially true with <a title="symbolism and communication" href="http://tynerblain.com/blog/2006/02/12/symbolism-and-communication/"><em>symbolic</em> terms</a> like &#8220;quote&#8221; or &#8220;customer&#8221; &#8211; where everyone <em>knows</em> what they mean &#8211; but they mean different things to different people.</p>
<p><span id="more-644"></span></p>
<h2>Why Create UML Class Diagrams for Requirements?</h2>
<p>One of the first articles we wrote in 2005 provides <a title="diagrams simplify requirements" href="http://tynerblain.com/blog/2005/12/09/a-picture-is-worth-a-thousand-requirements/">a very simple class diagram example</a>, and an explanation of why you should use class diagrams to clarify your documents.</p>
<blockquote><p><img style="width: 396px; height: 213px" src="http://sehlhorst.smugmug.com/photos/47711990-M.png" /></p>
<p>In prose, we could also capture the same information as follows:</p>
<ol>
<li>The      system shall include a representation of customer orders.</li>
<li>Each order will have a single associated customer, and each customer can have multiple orders. Note that a customer is not required to have any orders.</li>
<li>Each order will have at least one, and possibly multiple line items. Each line item is uniquely associated with a single order.</li>
<li>Each line item represents a single product. Note that a product is not required to be represented in a line item. A product can be represented in multiple line items (even within the same quote).</li>
</ol>
<p><strong>OOA is compellingly powerful as a descriptive tool</strong> – it took less time to draw the diagram, and it <em>can be</em> easier to read than the prose.</p>
<p><cite><a title="using class diagrams" href="http://tynerblain.com/blog/2005/12/09/a-picture-is-worth-a-thousand-requirements/">A Picture is Worth A Thousand Requirements</a></cite></p></blockquote>
<p>UML class diagrams, in addition to being potent for communication, can also help with requirements discovery.  They provide a clarity and explicitness of understanding that helps you gain insight into the topics being explored.</p>
<h2>Getting Started or Getting Refreshed</h2>
<p>If you already know UML, or generally know how to draw UML 2 Class Diagrams, you can &#8220;test out&#8221; of this article, and go to the best, most thorough explanations we know of, courtesy of Scott Ambler.</p>
<ul>
<li><a title="uml class diagrams" href="http://www.agilemodeling.com/artifacts/classDiagram.htm">UML 2 Class Diagrams</a> &#8211; an explanation, in detail, of how and what and why to draw things a particular way</li>
<li><a title="styling your class diagrams" href="http://www.agilemodeling.com/style/classDiagram.htm">UML 2 Class Diagram Guidelines</a> &#8211; advice on how to make your diagrams consumable and appealing</li>
</ul>
<p>If your eyes glazed over, that&#8217;s ok.  There is a lot to absorb.  There are a lot of advanced concepts that can be represented in class diagrams, and Scott provides explanations and examples of how to do most of them.  If you are new to modeling with UML, or are only interested in what you need to know to document <em>requirements</em>, those articles may be too advanced for now.  We&#8217;ll try and close the gap.  Keep those links handy, both for reference, and for deeper explanations than we cover here.  If Ambler&#8217;s articles are written to help you be a master craftsman, we want to help you become a journeyman first.</p>
<p>Class diagrams are incredibly powerful tools for anyone doing requirements work.  I never wrote about them before, because Ambler already did.  And he didn&#8217;t leave me wanting more, so I never knew what to write.  After a recent conversation with someone new to modeling, I discovered that he did leave a gap.  There&#8217;s a fair amount of learning you need to do before you can really get the value from his articles. Ambler also addresses both the analysis and design uses of class diagrams.</p>
<p>We will focus exclusively on using UML class diagrams for analysis.  So if you are a business analyst or requirements analyst, this will help.  If you are a developer, this will help you read the diagrams that analysts create.  If you are a product manager, this will help too, but I think you&#8217;ll need to do this less frequently than a business analyst would.</p>
<p>We do assume that you are already comfortable using Microsoft Visio, but have not used it for creating class diagrams.  You don&#8217;t have to use Visio, but the tools in Visio are good ones for creating class diagrams.</p>
<h2>Visio Template for UML Class Diagrams</h2>
<p>The easiest way to get started is with the default drawing type already available in Visio.</p>
<p><img title="new visio file" alt="new visio file" src="http://sehlhorst.smugmug.com/photos/262810541_NDfPN-L.jpg" /></p>
<p>Create a new file, and select the Software category, then scroll down and select &#8220;UML Model Diagram&#8221; in either US or Metric units.  When you do, a number of stencils will automatically load for you.  You want to use the UML Static Structure stencil.</p>
<p><img title="static structure stencil" alt="static structure stencil" src="http://sehlhorst.smugmug.com/photos/262810538_c8hY9-L.jpg" /></p>
<p>These are the shapes that you use to represent objects in a class diagram.  You can safely ignore all of the other stuff that Visio provides in the other templates.</p>
<h2>The Class</h2>
<p><img alt="empty class" title="empty class" src="http://www.smugmug.com/photos/262839662_rnBFu-L.gif" /></p>
<p>When you drag the &#8220;Class&#8221; shape onto the page, you get the empty looking box on the left.  Visio automatically names it for you as &#8220;Class1.&#8221;  The class represents a concept, entity, item, or object.  It is important for analysts to remember that what you are drawing is &#8220;how the business thinks about these objects&#8221; &#8211; <em>not</em> &#8220;how developers will implement a representation of the objects.&#8221;</p>
<p>There are three areas in each &#8220;class&#8221; shape.  The shape on the right shows that the top area is where the name of the class appears (in bold), the middle section represents attributes, and the lower section captures operations that can be performed by the shape.  This feels like describing an implementation or design.  The terms <em>attribute</em> and <em>operation</em> certainly sound like programming.  UML Class Diagrams may have initially been created to help developers design solutions, that would certainly explain the names.  There is still a lot of power to be unleashed &#8211; so take it on faith for now &#8211; we&#8217;ll present some examples that demonstrate the value of class diagrams for analysis.</p>
<p><img alt="lamp class" title="lamp class" src="http://www.smugmug.com/photos/262839667_A4gjs-L.gif" /></p>
<p>Imagine that you are thinking about a lamp.  Perhaps you are designing an emergency battery backup system, and one of the things you need to think about is how much wattage a lamp requires to operate.  The wattage of the lamp, in English, is a <em>characteristic</em> of the lamp.  Programmers call it an attribute.  For our purposes, the terms are interchangeable.</p>
<p>A lamp can be turned on.  That is pretty intuitive.  We imagine ourselves turning on a lamp.  Actually, all we do is turn a dial (or flip a switch).  When we turn the dial, <em>the lamp turns itself on</em>.  If we were really playing with language, we might say &#8220;When the user requests illumination, the lamp turns on.&#8221;  We would never use that phrasing for a concept as simple as a lamp, but you get the idea.  The <em>operation</em> is something that the object can do.  Dogs bark, cats meow, lamps turn on.</p>
<p>When we are creating class diagrams for requirements discovery, we will <em>always</em> use class names, <em>almost always</em> use attributes, and <em>almost never</em> use operations.</p>
<p><img title="customer" alt="customer" src="http://www.smugmug.com/photos/262849856_uMzVU-L.gif" /></p>
<p>A customer, in the diagram element above has an address.  The customer also has a credit rating.</p>
<p><img title="product" alt="product" src="http://www.smugmug.com/photos/262849859_5qqyh-L.gif" /></p>
<p>The two elements above represent the same information.  A product has both price and weight.  We also find, during our requirements exploration, that we need to know if a product is available.  Perhaps our users need to know if a product is available right now before suggesting it as an <em>up-sell</em> item to a customer.  If that is our requirement, we realize that we need to know the availability of the product.  You can either include the question &#8220;Is it available?&#8221; or a single name for the attibute &#8211; &#8220;Availability.&#8221;</p>
<p>It is better to use the word &#8220;Availability&#8221; for two reasons.  First, it is consistent to say &#8220;price, weight and availability.&#8221;   You could achieve consistency with all questions &#8211; &#8220;What is the price?&#8221; &#8220;How much does it weigh?&#8221; and &#8220;Is it available?&#8221;  But that becomes overly wordy.  The second reason for using a single word is to <a title="separate rules from requirements" href="http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/">avoid embedding rules in your requirements</a>.</p>
<p><img title="customer again" alt="customer again" src="http://www.smugmug.com/photos/262849856_uMzVU-L.gif" /></p>
<p>Consider the &#8220;Credit Rating&#8221; attribute for the Customer object.  What we really want to know is if the customer&#8217;s credit is good.  The definition of &#8220;good&#8221; will change over time, or may become complex.  &#8220;Good enough for small purchases&#8221;, &#8220;Good when putting 20% down&#8221; are examples of the definition of &#8220;good&#8221; becoming complex.  Or maybe you&#8217;re loaning money, and you can improve your profits with notions of &#8220;pretty good&#8221; and &#8220;really good.&#8221;  You will <a title="business rules and business requirements" href="http://tynerblain.com/blog/2006/10/18/business-rules-and-requirements/">create business rules</a> to define what you mean by good.  You happen to know that those rules will reason about the customer&#8217;s <em>credit rating</em>, so you should capture that value.</p>
<p>You <em>could</em> but <em>should not</em> represent the notion of &#8220;Is Credit Good?&#8221; with an operation:</p>
<p><img title="credit operation" alt="credit operation" src="http://www.smugmug.com/photos/262852476_iV2ma-L.gif" /></p>
<p>You end up specifying design here &#8211; however unintentionally.  Depending on how you interpret this, you are either saying &#8220;Customers are responsible for determining if their credit is good&#8221; or &#8220;The credit worthiness of a customer is determined without considering anything other than the customer.&#8221;  While precise for programmers doing design, this is a pretty ambiguous thing to document in an analysis.  By adding this operation, you are not providing unambiguous insight into how the business thinks about customers.  <strong>So don&#8217;t do it</strong>.</p>
<h2>Next Up</h2>
<p>In our next article on <a title="class diagrams and requirements relationships" href="http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/">UML Class Diagrams for analysis, we&#8217;ll look at relationships between classes</a>.</p>
<p>If there&#8217;s something in particular you&#8217;d like to see explained, add a comment below and we&#8217;ll either fold it into the series or answer in the comments.  And remember &#8211; you can subscribe to the comments for any article, just click the link.</p>
<p><a title="simple relationships in uml class diagrams" href="http://tynerblain.com/blog/2008/03/10/requirements-class-diagrams-2/">Uncovering Requirements With UML Class Diagrams Part 2</a>: Simple relationships between objects or entities.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Uncovering+Requirements+With+UML+Class+Diagrams+Part+1+http://bit.ly/461efs+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/&amp;t=Uncovering+Requirements+With+UML+Class+Diagrams+Part+1" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/03/06/requirements-class-diagrams-1/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>C.R.A.C.K. Users Are Addictive</title>
		<link>http://tynerblain.com/blog/2008/02/20/crack-users-are-addictive/</link>
		<comments>http://tynerblain.com/blog/2008/02/20/crack-users-are-addictive/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 03:03:56 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[crack users]]></category>
		<category><![CDATA[engaging users]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[stakeholders]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/02/20/crack-users-are-addictive/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F02%2F20%2Fcrack-users-are-addictive%2F", "style": "big", "title": "C.R.A.C.K. Users Are Addictive" });

Barry Boehm, inventor of the spiral model of software development, may also be the originator of the CRACK acronym for the type of users we want on our projects.  When defining (and executing on) projects, we don&#8217;t just want CRACK users, we want CRACK [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F02%252F20%252Fcrack-users-are-addictive%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22C.R.A.C.K.%20Users%20Are%20Addictive%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F02%2F20%2Fcrack-users-are-addictive%2F", "style": "big", "title": "C.R.A.C.K. Users Are Addictive" });</script></div>
<p><img title="crack" alt="crack" src="http://sehlhorst.smugmug.com/photos/256622452_ay3QA-L.jpg" /></p>
<p>Barry Boehm, <a title="Barry Boehm" href="http://en.wikipedia.org/wiki/Barry_Boehm">inventor of the spiral model of software development</a>, may also be the originator of the CRACK acronym for the type of users we want on our projects.  When defining (and executing on) projects, we don&#8217;t just want CRACK users, we want CRACK stakeholders.  And we want them to stick around.  In fact, we&#8217;re addicted to them.<br />
<span id="more-638"></span></p>
<h2>What Are CRACK Users?</h2>
<p>We are not talking about substance abusers here.  We are talking about users, and stakeholders in general, who have the following characteristics:</p>
<ul>
<li><strong>Collaborative </strong>- <a title="stakeholder goals" href="http://tynerblain.com/blog/2007/10/11/stakeholder-goals/">stakeholders define goals</a> and provide feedback and are available to work together</li>
<li><strong>Representative </strong>- they characterize (or <a title="persona development" href="http://tynerblain.com/blog/2006/04/17/persona-grata/">embody the personas</a>) who make up our key users</li>
<li><strong>Accountable </strong>- along with collaboration comes <a title="agile means ownership" href="http://tynerblain.com/blog/2008/01/06/agile-absolves-developers/">a sense of ownership</a>: we succeed or fail together</li>
<li><strong>Committed </strong>- not just in percentage of time dedicated to the project, but also continuity of involvement over time</li>
<li><strong>Knowledgeable </strong>- <a title="understanding vs knowledge" href="http://tynerblain.com/blog/2008/01/28/requirements-knowledge-and-understanding/">understanding more so than knowledge</a> leads to insights but both improve our deliverables</li>
</ul>
<p>Thanks, Mike Griffiths, of <a title="leading answers" href="http://leadinganswers.typepad.com/leading_answers/"><em>Leading Answers</em></a>, who points out <a title="user inputs for agile teams" href="http://leadinganswers.typepad.com/leading_answers/2008/01/we-dont-want-us.html">the value to agile teams of having CRACK users</a>.  His article is actually focused on what to do when you can&#8217;t get users &#8211; and I <em>love</em> suggestion number three.  Thanks Mike, and keep it up!</p>
<p>Before giving Mike <em>all</em> the credit, I wanted to see if anyone else was writing about CRACK users.  Several of the top search results pointed to articles or presentations by Barry Boehm, who, due to his significant software engineering contributions, gets our &#8220;he must have invented it&#8221; accreditation.</p>
<p>As a quick tangent &#8211; during the search, I found a couple presentations by Barry were awesome.</p>
<ul>
<li><a title="keynote presentation" href="http://www.google.com/url?sa=t&#038;ct=res&#038;cd=2&#038;url=http%3A%2F%2Fwww.acisinternational.org%2Fconference%2FICSERA_03%2FBarryBoehm.ppt&#038;ei=SpK7R-veIo60gQTamKisCA&#038;usg=AFQjCNER_539dFBuYJIaSPkNQX03nqwGDQ&#038;sig2=uj2qUct-KaDPjuxyCYIxXQ">2003 SERA Keynote Address</a> &#8211; talking about agile and deliberate (non-agile) project approaches</li>
<li><a title="enterprise architecture" href="http://www.google.com/url?sa=t&#038;ct=res&#038;cd=4&#038;url=http%3A%2F%2Fsunset.usc.edu%2Fevents%2F2006%2FCSSE_Convocation%2Fpresentations%2FBoehmSOSChallanges.ppt&#038;ei=SpK7R-veIo60gQTamKisCA&#038;usg=AFQjCNG7yjCBQEA193moiLElR8WKXkIQiA&#038;sig2=pqaZ2XGyvQLkkrLtM_01RQ">Systems of Systems: Characteristics and Challenges</a> &#8211; dealing with enterprise architectures and projects in the <em>tens of millions of lines of code</em> arena.</li>
</ul>
<p>This is a short one, but the idea is strong, and the linked presentations give you plenty of good stuff!  Thanks Barry and Mike!</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+C.R.A.C.K.+Users+Are+Addictive+http://bit.ly/KlTwY+" 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/20/crack-users-are-addictive/&amp;t=C.R.A.C.K.+Users+Are+Addictive" 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/20/crack-users-are-addictive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SRS Plan of Attack</title>
		<link>http://tynerblain.com/blog/2008/02/06/srs-plan-of-attack/</link>
		<comments>http://tynerblain.com/blog/2008/02/06/srs-plan-of-attack/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 03:51:18 +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[Requirements gathering]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[actor hierarchy]]></category>
		<category><![CDATA[brd]]></category>
		<category><![CDATA[enterprise requirements]]></category>
		<category><![CDATA[enterprise software requirements]]></category>
		<category><![CDATA[estimation]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[scoping]]></category>
		<category><![CDATA[software requirements specification]]></category>
		<category><![CDATA[SRS]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/02/06/srs-plan-of-attack/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F02%2F06%2Fsrs-plan-of-attack%2F", "style": "big", "title": "SRS Plan of Attack" });

How do you approach starting a small requirements project as part of a large initiative within a massive enterprise?  Do you boil the ocean?  Your customer knows she needs &#8220;requirements&#8221; to give to her development team.  She asks you &#8211; what will [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F02%252F06%252Fsrs-plan-of-attack%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22SRS%20Plan%20of%20Attack%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F02%2F06%2Fsrs-plan-of-attack%2F", "style": "big", "title": "SRS Plan of Attack" });</script></div>
<p><img alt="boiling water" title="boiling water" src="http://www.smugmug.com/photos/251702481-L.jpg" /></p>
<p>How do you approach starting a small requirements project as part of a large initiative within a massive enterprise?  Do you boil the ocean?  Your customer knows she needs &#8220;requirements&#8221; to give to her development team.  She asks you &#8211; what will you deliver, and how long will it take?  Great questions.  If you have to write a statement of work, with time/cost estimates, and a list of deliverables &#8211; what would you do?</p>
<p><span id="more-632"></span></p>
<h2>The Lay of the Land</h2>
<p>Your IT director knows she needs <em>something</em> to give to her development and test teams.  She&#8217;s looking to you to tell her what it is you need to deliver.  Oh &#8211; and while it isn&#8217;t explicitly a constraint, her expectation is that you&#8217;re looking at something less than a couple of months of effort.  To increase the pressure a little, she also tells you that her program will likely have a steady, ongoing need for requirements development &#8211; for now, she needs a &#8220;single capability&#8221; defined.</p>
<p>Her approach is really pretty rational.  She&#8217;s rolling out a brand new initiative for the company.   The initiative will drive tens of millions in profits for the company.   There is a huge user base, there are stakeholders all over the globe, it is a &#8220;high pressure&#8221; environment &#8211; very visible internally, high external pressures, and there&#8217;s a palpable sense that continued employment is dependent on the success of the initiative.</p>
<p>There is an ocean of work involved in this particular initiative.  Your director&#8217;s initiative needs to demonstrate momentum, so instead of boiling the ocean, she&#8217;s releasing new business capabilities incrementally.  She&#8217;s working with the business stakeholders and customers to define &#8220;what first&#8221;, and then she&#8217;s working with internal teams to enable those capabilities one at a time.  Each business capability is being treated as a distinct program &#8211; distinct funding, staffing, and timing.  Sort of an &#8220;enterprise agile&#8221; &#8211; certainly an incremental approach.</p>
<p>The capability that she needs next (she has already prioritized it as &#8220;next&#8221; for the initiative) is also needed by other directors, for other initiatives.  The enterprise IT folks intend to leverage the capability across many different programs and areas of the business.  Each program has common and distinct needs, and different timing objectives.  There are many moving parts involved in defining this capability across a multi-billion dollar enterprise.</p>
<p>Your mission is to figure out how best to validate your customer&#8217;s approach, identify what she needs, and estimate what it will take to make it happen &#8211; given the above environment.  Do you try and boil the ocean, defining the requirements for the business capability across all the initiatives?  If not, how do you define and manage deliverables for this one program?</p>
<h2>One At A Time</h2>
<p><img alt="domino" title="domino" src="http://www.smugmug.com/photos/251731112-L.jpg" /></p>
<p>There&#8217;s an interesting dynamic that comes into play when working with teams across and within an enterprise architecture.  You have to think about the big picture (the ocean) in order to really understand things.  At the same time, if you try to accomplish all of the needs of the disparate teams (boiling the ocean) at the same time, you will fail.  Each group has its own dynamics, politics, deliverables, hangups, issues, and pet &#8220;favorite features.&#8221;  If you try and tackle all of them at once, you will get mired in the bog of analysis paralysis and never make forward progress.</p>
<p>The best way to knock down all the dominoes in this case is to knock them down one at a time.  Think of it as sequential product releases, each one targeted at a different market segment.  Because that&#8217;s really what it is.  As you build out a business capability (like &#8220;provide hosted service X&#8221;, or &#8220;sell products online&#8221;) for each program you are identifying a different set of internal stakeholders, end users, and often, delivery and test teams.  They are independent projects that happen to share a lot of goals.</p>
<p>Dominoes make for a great analogy, because although you start out by knocking down the first one, you knock it <em>towards</em> the second one, with the <em>intent</em> of knocking them all down eventually.  The more you understand about the other dominoes, the better a job you will do in knocking down the first one.  But you have to focus on the first one first.  The other knowledge provides context, and hopefully <a title="knowledge and understanding" href="http://tynerblain.com/blog/2008/01/28/requirements-knowledge-and-understanding/">understanding that leads to insights</a>.</p>
<p>Knock down the first one first.</p>
<h2>How Much to Do?</h2>
<p>You can approach this top-down (as we normally do with <a title="structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements</a>), or bottoms-up.  Either way, you end up with the same answer.  We&#8217;ll work backwards in this article &#8211; since we&#8217;re identifying the deliverables, not creating them.</p>
<ul>
<li>Software Requirements Specification (SRS).  We already know we need this &#8211; because the development and test teams at the company expect to work against an SRS.  If your company <a title="multiple requirements documents" href="http://tynerblain.com/blog/2006/01/20/document-proliferation/">uses something else to communicate requirements</a> to development and test, substitute that artifact here.</li>
<li>Fact Model and <a title="glossary of terms for requirements" href="http://tynerblain.com/blog/2007/10/29/glossary-of-terms/">Glossary of terms</a>.  Explicit agreement about language and terms is critical to avoiding confusion and ambiguity.</li>
<li>Use Cases.  The requirements in the SRS are defined to <a title="use case management" href="http://tynerblain.com/blog/2008/02/04/balancing-use-cases/">support use cases </a>and goals.  So we need <a title="use case articles" href="http://tynerblain.com/blog/category/requirements/requirements-models/use-case/">use cases</a>.  The team you are working with, and the complexity of the business needs / processes will influence the format that works best.</li>
<li>Actor Hierarchy and Personas.  You have to <a title="actors and roles" href="http://tynerblain.com/blog/2007/07/23/elastic-users/">identify the actors by role</a>, and the <a title="personas for goal-driven development" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">personas</a> that describe them.</li>
<li>Business Requirements Document (BRD).  Describes the goals of the business stakeholders.</li>
<li>Vision &#038; Scope Document.  Describe the vision for your program, and its scope.  Especially valuable in avoiding ratholes in this environment &#8211; be articulate about what you are <em>not</em> doing.  Set expectations that the second domino is second &#8211; only the first domino is first.</li>
</ul>
<p>You can reverse this list to create a top-down set of deliverables: Vision &#038; Scope Doc, BRD, Actor &#038; Persona definitions, Use Cases and SRS.</p>
<h2>And Estimating&#8230;</h2>
<p><img alt="devil" title="devil" src="http://www.smugmug.com/photos/251751339-L.jpg" /></p>
<p>The devil is always in the details when it comes to estimating.  How long will use cases take?  How many interviews will you have to do, and do you need to travel to do them? And a hundred more questions.<br />
We aren&#8217;t trying to tackle the estimation details here &#8211; too many project specific variables, and as I just read somewhere, &#8220;estimating is more of an art than a science.&#8221;  Although you can apply some science to expose and <a title="pert estimates reduce risk" href="http://tynerblain.com/blog/2006/04/13/foundation-series-basic-pert-estimate-tutorial/">mitigate the risks around your estimates by using PERT analysis</a>.</p>
<p>But now you know what you should deliver, and what you now have to go estimate.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+SRS+Plan+of+Attack+http://bit.ly/mRZnH+" 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/06/srs-plan-of-attack/&amp;t=SRS+Plan+of+Attack" 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/06/srs-plan-of-attack/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Requirements: Knowledge and Understanding</title>
		<link>http://tynerblain.com/blog/2008/01/28/requirements-knowledge-and-understanding/</link>
		<comments>http://tynerblain.com/blog/2008/01/28/requirements-knowledge-and-understanding/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 02:10:54 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[associative thinking]]></category>
		<category><![CDATA[autism]]></category>
		<category><![CDATA[concept maps]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[knowledge]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[requirements context]]></category>
		<category><![CDATA[structured requirements]]></category>
		<category><![CDATA[understanding]]></category>
		<category><![CDATA[understanding requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/01/28/requirements-knowledge-and-understanding/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F01%2F28%2Frequirements-knowledge-and-understanding%2F", "style": "big", "title": "Requirements: Knowledge and Understanding" });
 [photo by Henkster]
Writing good requirements is more than just about following a set of rules.  You can capture knowledge about your goals and your product with a set of well crafted requirements.  But to truly write good requirements, you have to gain [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F01%252F28%252Frequirements-knowledge-and-understanding%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Requirements%3A%20Knowledge%20and%20Understanding%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F01%2F28%2Frequirements-knowledge-and-understanding%2F", "style": "big", "title": "Requirements: Knowledge and Understanding" });</script></div>
<p><img alt="the thinker, by henkster" title="the thinker, by henkster" src="http://www.smugmug.com/photos/247525752-L.jpg" /> [photo by <a title="Henkster's profile at stock xchange" href="http://www.sxc.hu/profile/Henkster">Henkster</a>]</p>
<p>Writing good requirements is more than just about <a title="rules of writing requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">following a set of rules</a>.  You can capture knowledge about your goals and your product with a set of well crafted requirements.  But to truly write good requirements, you have to gain a level of understanding that surpasses knowledge.  Insight springs from understanding, and insight leads to great requirements and ultimately great products.</p>
<p><span id="more-628"></span></p>
<h2>Knowledge and Understanding</h2>
<p>Holly Buchanan recently wrote a thought-provoking <a title="knowledge and understanding" href="http://www.grokdotcom.com/2008/01/17/genchi-genbutsu/">article about knowledge and understanding</a> at Future Now.  In her article, she tells us the story of how a Toyota engineer &#8220;got in the heads&#8221; of users by logging tons of hours driving a minivan all over the US.  Her article stresses the importance of understanding users when it comes to <a title="how to create personas" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">persona development</a>.  And she&#8217;s right.  It got us to thinking about the importance of knowledge and understanding from a broader perspective as well.</p>
<blockquote><p>In other words, you can&#8217;t just <em>know</em> the facts; you must be able to <em>interpret</em> them.</p>
<p>I believe that in order to go from knowledge to understanding, one must have real-world insight into one&#8217;s customers. You have to dig deeper, ask better questions, and yes, put yourself directly into your customers&#8217; shoes.</p>
<p><cite>Holly Buckanan</cite></p></blockquote>
<p>Holly gets to the crux of things with that quote.  <em>Interpretation</em> of knowledge is what leads to insights, and therefore understanding.  This is critical to developing the right interactions for your products &#8211; but it is also critical to developing the right products.</p>
<p>Knowledge is something you can be taught.  You can gather knowledge, someone can pass knowledge on to you.  Someone who <em>understands</em> something can even pass along their insights &#8211; but when you receive them, they are merely additional knowledge.  When you <a title="requirements gathering tips" href="http://tynerblain.com/blog/2006/01/14/top-five-requirements-gathering-tips/">elicit requirements</a>, you are really just collecting knowledge.  There are many tips you can apply when <a title="requirements interviewing tips" href="http://tynerblain.com/blog/2006/01/15/how-to-interview-when-gathering-requirements/">interviewing to gather requirements</a>, and you can even focus on making sure you <a title="requirements interviewing the right people" href="http://tynerblain.com/blog/2006/05/18/requirements-gathering-interviewing-the-right-people/">interview the right people</a>.  All of this helps you to get the <em>right</em> knowledge, but it is still only knowledge.</p>
<p>Knowledge can also come from lateral thinking processes, like associative thinking.</p>
<p>Understanding, however requires more than just associations.  Understanding requires incorporating contextual information into your data, and generalizing and abstracting from the data you have to form concepts, ideas and principles.  Neither associations nor gathered data alone can get you to understanding.</p>
<h2>Associative Thinking</h2>
<p>Apparently, one of the impacts of (or descriptions of) autism is that people afflicted with autism think primarily in terms of associations.  This very interesting article by Temple Grandin &#8211; a mildly autistic professor, <a title="autism and associative thinking" href="http://www.grandin.com/references/thinking.animals.html"><em>Thinking the Way Animals Do</em></a>, highlights the inadequacy of associations alone in achieving understanding.</p>
<blockquote><p>People with autism and animals both think by making visual associations. These associations are like snapshots of events and tend to be very specific. For example, a horse might fear bearded men when it sees one in the barn, but bearded men might be tolerated in the riding arena.</p>
<p><cite>Temple Grandin, PhD</cite></p></blockquote>
<p><img title="scout" alt="scout" src="http://sehlhorst.smugmug.com/photos/65831449-S.jpg" /></p>
<p>We added a yellow Labrador to our family a couple years ago, and we took <a title="fuel shortage" href="http://tynerblain.com/blog/2006/04/26/fuel-shortage/">Scout</a> to a trainer once a week for several months.  As any dog owner will tell you, the trainer was there to teach us, not him.  She made a very interesting statement at the time.  She told us that dogs are great at making specific associations, but miserably bad at generalizing.  Her example was that teaching Scout to sit in the living room when we have food would not help him to know to sit (with the same command) when we&#8217;re walking outside at night and he&#8217;s on a leash.  Scout has no reason to associate the desire to sit with the command &#8220;sit&#8221; &#8211; he has to process many inputs, and makes a compound association, not a general one.</p>
<p>Her advice has proven out to be true over and over again.  We taught Scout to not chew on the edge of his dog bed.  He didn&#8217;t chew on that spot again after we said &#8220;No!&#8221;  But he moved to a new spot 6 inches away and started chewing.  We said &#8220;No!&#8221; again, and he moved again.  This lasted for about an hour, as he gradually learned that chewing on any part of his dog bed was unacceptable.  He couldn&#8217;t generalize that <em>dog bed chewing</em> was bad &#8211; he had to build up a list of <em>don&#8217;t chew on this part of the dog bed</em> and <em>don&#8217;t chew on <u>this</u> part either</em>, until we had the whole bed covered.  He doesn&#8217;t chew on it at all, now.</p>
<p>With purely associative thinking, Scout didn&#8217;t develop an understanding &#8211; he only gained knowledge.</p>
<h2>Context As a Framework</h2>
<p>When we talk about best practices for defining requirements and managing them, we regularly refer back to the notion of <a title="structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/"><em>structured</em> requirements</a>.</p>
<p><img alt="structured requirements" title="structured requirements" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" /></p>
<p>In earlier articles, we&#8217;ve pointed out that this technique helps primarily because it helps answer the question &#8220;<a title="another use for why" href="http://tynerblain.com/blog/2006/10/24/another-use-for-why/"><em>Why?</em></a>&#8221;  &#8220;Why&#8221; becomes the context in which we make decisions.  Throughout the software creation team, there are several roles with different perspectives.</p>
<blockquote><p><img alt="why diagram" title="why diagram" src="http://sehlhorst.smugmug.com/photos/69105260-M.png" /></p>
<p><cite><a title="one man's trash" href="http://tynerblain.com/blog/2006/05/11/requirements-documents-one-mans-trash/">Requirements Documents &#8211; One Man&#8217;s Trash</a></cite></p></blockquote>
<p>Different members of the team rely on different levels of decomposition of the problem to make their individual work (the &#8220;What&#8221;) actionable (the &#8220;How&#8221;).</p>
<p>We had a client who is facing a multi-national IT initiative, designed to support the sales process globally and regionally.  In our role, we have to deliver requirements.  To define those requirements, <a title="the reason why" href="http://tynerblain.com/blog/2006/02/21/the-reason-why/">we have to understand</a> our <a title="communicating intent with stakeholders" href="http://tynerblain.com/blog/2006/07/14/communicating-intent-with-stakeholders/">customer&#8217;s needs</a>.  Our challenge is to gain insights and understanding.  If we just interview people and ask &#8220;what do you need?&#8221; they will give us knowledge, and we&#8217;ll capture it.</p>
<p>From that point forward, each person on <a title="communicating intent with implementation teams" href="http://tynerblain.com/blog/2006/07/17/communicating-intent-with-implementers/">the team has the opportunity to <em>understand</em> their work</a> in the context of the requirements &#8211; but we are at risk, if the knowledge we capture in the requirements is incorrect or inadequate.  To reduce the risk of making those mistakes, we have to gain understanding.</p>
<p>One thing I did was review McKinsey&#8217;s latest research on how the Indian economy is evolving.  Their report proposes a (likely) view of how market forces and individual behaviors have shifted and are likely to shift.  Understanding those market dynamics helps us validate or model a proposed growth rate for sales of a particular product in that market.  This expectation, combined with an understanding of which sales-models work best in India helps us prioritize <em>Indian</em> requirements relative to those of other regions.  This level of understanding helps us impart better knowledge to the rest of the team.</p>
<p>McKinsey&#8217;s report describes trends.  We can generalize and gain insights into behavior (and likely behavior) from them and apply to the context of our particular analysis.  And we can hypothesize and model financial forecasts based on their research &#8211; and that data impacts prioritization discussions.  Ultimately, we will end up with better requirements, and better products.</p>
<p>A great way to organize this type of &#8220;contextual exploration&#8221; is through the use of concept maps.  Each concept map provides a way for you to relate information that you&#8217;ve discovered with decisions you&#8217;re making.  You create associations.  This technique is usually applied to brainstorming, but it is even more powerful when <a title="braistorming with concept maps" href="http://tynerblain.com/blog/2005/11/25/concept-maps-great-tool-for-eating-the-elephant-brainstorming-ideas-for-a-new-product/">documenting free-form associations of ideas</a>.</p>
<h2>Conclusion</h2>
<p>Understanding of any topic comes from combining knowledge with context via associative thinking.  We gain knowledge empirically.  We gain context through organization of information.  We apply associative thinking to interrelate that knowledge into a web of (scoped) understanding.  Then, by gaining knowledge that is <em>relevant to</em> but not necessarily <em>part of</em> our scope, we can develop associations to what we already know, thereby improving our <em>understanding</em>.</p>
<p>This understanding leads to better decisions, better prioritization, better requirements.  And ultimately, better software.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Requirements%3A+Knowledge+and+Understanding+http://bit.ly/tkVQn+" 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/01/28/requirements-knowledge-and-understanding/&amp;t=Requirements%3A+Knowledge+and+Understanding" 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/01/28/requirements-knowledge-and-understanding/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>You Are Creating Bugs In Your Software</title>
		<link>http://tynerblain.com/blog/2008/01/14/you-are-creating-bugs/</link>
		<comments>http://tynerblain.com/blog/2008/01/14/you-are-creating-bugs/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 03:19:16 +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 gathering]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[good requirements techniques]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[reducing bugs]]></category>
		<category><![CDATA[requirements prevent bugs]]></category>
		<category><![CDATA[sdlc]]></category>
		<category><![CDATA[software development lifecycle]]></category>
		<category><![CDATA[source of bugs]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2008/01/14/you-are-creating-bugs/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F01%2F14%2Fyou-are-creating-bugs%2F", "style": "big", "title": "You Are Creating Bugs In Your Software" });

No matter how good your quality process is, you are introducing bugs.  This article reviews the places where bugs are introduced in the software development process (from stakeholders to users), and reviews ways to address those bugs.

One way to identify the [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F01%252F14%252Fyou-are-creating-bugs%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22You%20Are%20Creating%20Bugs%20In%20Your%20Software%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F01%2F14%2Fyou-are-creating-bugs%2F", "style": "big", "title": "You Are Creating Bugs In Your Software" });</script></div>
<p><img title="bug killer" alt="bug killer" src="http://www.smugmug.com/photos/243520519-L.jpg" /></p>
<p>No matter how good your quality process is, you are introducing bugs.  This article reviews the places where bugs are introduced in the software development process (from stakeholders to users), and reviews ways to address those bugs.</p>
<p><span id="more-623"></span></p>
<p>One way to identify the sources of bugs is by listening to how people tell you about the bugs.</p>
<ol>
<li>&#8220;That is not what I want&#8221;</li>
<li>&#8220;That is not what I said&#8221;</li>
<li>&#8220;That is not what I meant&#8221;</li>
<li>&#8220;That is not how it is supposed to work&#8221;</li>
<li>&#8220;That is not what they meant&#8221;</li>
<li>&#8220;That is not what I want it to do&#8221;</li>
</ol>
<p>Visually, you can think of the development process (regardless of methodology) like the following flow</p>
<p><img alt="where bugs enter the process" title="where bugs enter the process" src="http://sehlhorst.smugmug.com/photos/45965627-L.png" /></p>
<p>Each of the six sources of bugs is labeled in the above flow.  The article, <cite><a title="Where bugs come from" href="http://tynerblain.com/blog/2006/01/22/where-bugs-come-from/">Where Bugs Come From</a></cite>, goes into a detailed explanation of each source of bugs.  This article looks at what you can do to improve the ability of your process to reduce these bugs.  I have been a stakeholder, a product manager, a business analyst, a developer and a tester.  And I&#8217;ve been guilty of all of these offenses at one time or another.  When I say <em>you</em>, I also mean <em>me</em>.  So chill.</p>
<h2>&#8220;That is not what I want&#8221;</h2>
<p>Stakeholders introduce bugs into the process by being unable to define what they want.  Some agile methodology proponents argue that as a stakeholder, you <em>can&#8217;t</em> know what you want until you have something you<em> don&#8217;t want</em> in front of you.  In other words, those agilists are giving up on trying to prevent these errors &#8211; they claim it is futile.</p>
<p>You can change your mind.  The team could be dealing with &#8220;That is not what I want <em>now</em>&#8221; &#8211; and change is something that can not be prevented &#8211; although the impact of change can be mitigated.  <a title="11 iterative development models" href="http://tynerblain.com/blog/2007/03/09/agile-software-development-methods/">Iterative development</a> and course-correction through getting immediate feedback is one way to do that.  <a title="iterative specification and prototypes" href="http://tynerblain.com/blog/2006/02/21/software-requirements-specification-iteration-and-prototyping/">Prototyping</a> is another method of course correction.  Prototypes can also be used to<a title="implicit requirements" href="http://tynerblain.com/blog/2006/11/17/gathering-implicit-requirements/"> elicit <em>implicit</em> requirements</a>.</p>
<p>But that still avoids trying to directly address the issue of <em>you </em>not effectively describing what you actually want.  There are ways to improve your team&#8217;s engagement with you, so that you actually say what you want.  First, an emphasis on <a title="writing valuable requirements" href="http://tynerblain.com/blog/2006/05/30/writing-valuable-requirements/"><em>valuable</em> requirements</a> drives critical thinking about <em>why</em> you need a particular capability or feature.  One approach to achieve valuable requirements is to <a title="The reason why" href="http://tynerblain.com/blog/2006/02/21/the-reason-why/">question their justification</a>.</p>
<p>The key to making this work is to make sure you <a title="getting approval for your requirements" href="http://tynerblain.com/blog/2007/01/09/requirements-approval/">are approving your requirements</a>.  And watch out for the <a title="approval anti-patterns" href="http://tynerblain.com/blog/2007/01/09/requirements-approval/"><em>anti-patterns</em></a> in the article.</p>
<h2>&#8220;That is not what I said&#8221;</h2>
<p>Business analysts, product managers, and requirements analysts introduce bugs into the process through misunderstanding the stakeholders.  Using the techniques above to stay on top of changes in stakeholder needs is not enough.  Even when you effectively engage your stakeholders so that they are <em>self-aware</em> and can articulate exactly <a title="another use for why" href="http://tynerblain.com/2006/10/24/another-use-for-why/">what they need and why</a>, you still have a problem.</p>
<p>You can improve <a title="Ten active listening skills" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">how you listen</a>, and you can improve how you document what you heard.  Make sure that you write <a title="complete requirements" href="http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/">complete</a>, <a title="consistent requirements" href="http://tynerblain.com/blog/2006/06/09/big-ten-rules-writing-consistent-requirements/">consistent</a> and <a title="unambiguous requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">unambiguous </a>requirements.  While you&#8217;re at it &#8211; make sure you are <a title="correct requirements" href="http://tynerblain.com/blog/2006/10/30/writing-correct-requirements/">writing your requirements correctly</a>.</p>
<h2>&#8220;That is not what I meant&#8221;</h2>
<p>Developers can misinterpret requirements.  While there are situations where a requirement is adequately expressed, but the developer is not capable of understanding, that is not the norm.  Developers are smart.  The onus is on the person writing requirements to make sure that they are <a title="writing for the purpose of reading" href="http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/">written for the audience</a>.  So, even though the source of these bugs appears to be the developers, it is actually your documentation.  If your documents need to <a title="Active listening and cultural cues" href="http://tynerblain.com/blog/2005/12/11/when-%E2%80%98no%E2%80%99-means-%E2%80%98yes%E2%80%99/">span cultural chasms</a>, then that&#8217;s your reality.</p>
<p>Make sure you write your requirements <a title="ambiguous requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">unambiguously</a>, so that they are not misinterpreted.  Make sure that they are feasible<a title="attainable requirements" href="http://tynerblain.com/blog/2006/06/07/writing-attainable-requirements/"> requirements</a>, and that they do not <a title="don't specify design in your requirements" href="http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/">specify design</a>.  The <a title="concise requirements" href="http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/">requirements also need to be concise</a> without being overly terse.</p>
<h2>&#8220;That is not how it is supposed to work&#8221;"</h2>
<p>Developers should test what they create.  Given an understanding of what you believe the code is supposed to do, you should test that it actually does it.  This is the stereotypical bug &#8211; we asked for X, and it doesn&#8217;t work.  <a title="continuous integration" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">Continuous integration</a> is the most effective technique for addressing bugs that are introduced at this point in the process.</p>
<p>In more complex situations, you can apply <a title="test smarter not harder part 1" href="http://tynerblain.com/blog/2007/12/25/test-smarter-not-harder-1/">more</a> <a title="test smarter not harder part 2" href="http://tynerblain.com/blog/2007/12/27/test-smarter-not-harder-2/">advanced</a> <a title="test smarter not harder part 3" href="http://tynerblain.com/blog/2008/01/02/test-smarter-not-harder-3/">techniques</a> to assure that your testing is complete.</p>
<h2>&#8220;That is not what they meant&#8221;</h2>
<p>The testing team can also misinterpret requirements.  This is a source of <em>false positive</em> bugs &#8211; even when the developers properly interpret the requirements, a bug may be lodged against their code when there is no bug.  That&#8217;s why we have the ability to mark issues as &#8220;not a bug&#8221; when closing them.  Apply the same rules for well-written requirements and you will also address this issue.  Further, make sure that your requirements can be <a title="testable requirements" href="http://tynerblain.com/blog/2005/11/30/how-to-deal-with-untestable-requirements-rewrite-them/">measurable</a>, or <a title="verifiable requirements" href="http://tynerblain.com/blog/2006/06/13/writing-verifiable-requirements/">verifiable</a>.  We recently wrote more about <a title="testing your requirements" href="http://tynerblain.com/blog/2008/01/09/testing-your-requirements/">why you should make requirements testable</a>.</p>
<h2>&#8220;That is not what I want it to do&#8221;</h2>
<p>User education is the key here.  Users should be encouraged to provide feedback about your product.  You don&#8217;t want to discourage feedback, you want to minimize the number of false positives.  False positives come from users misinterpreting how the application is behaving &#8211; a sign of poor design.  False positives also come from users not understanding what the application can (or should) do.</p>
<p>You can address design issues by focusing on <a title="designing for users" href="http://tynerblain.com/blog/2005/12/01/user-centric-design-yields-not-so-obvious-features/">design with the user in mind</a>.  And you can educate the users through a combination of training and with a novel approach to documentation.  Document the product in terms of <a title="goal driven documentation" href="http://tynerblain.com/blog/2006/10/09/goal-driven-documentation/">what users are trying to accomplish</a>, in the context of <a title="use case driven documentation" href="http://tynerblain.com/blog/2006/10/10/use-case-driven-documentation/">how they are trying to do it</a>.</p>
<ol />
<h2>Conclusion</h2>
<p>There are a lot of people involved in the software development lifecycle.  As people, we introduce bugs.  As informed software professionals, we also know how to address many of them.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+You+Are+Creating+Bugs+In+Your+Software+http://bit.ly/Cu2L2+" 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/01/14/you-are-creating-bugs/&amp;t=You+Are+Creating+Bugs+In+Your+Software" 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/01/14/you-are-creating-bugs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Avoid the Abilene Paradox</title>
		<link>http://tynerblain.com/blog/2007/11/08/abilene-paradox/</link>
		<comments>http://tynerblain.com/blog/2007/11/08/abilene-paradox/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 05:16:42 +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 gathering]]></category>
		<category><![CDATA[abilene]]></category>
		<category><![CDATA[abilene paradox]]></category>
		<category><![CDATA[constraints]]></category>
		<category><![CDATA[design constraint]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[jerry harvey]]></category>
		<category><![CDATA[jonathan babcock]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/11/08/abilene-paradox/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F11%2F08%2Fabilene-paradox%2F", "style": "big", "title": "Avoid the Abilene Paradox" });

An excellent article by Jonathan Babcock raises a thought provoking idea.  When gathering requirements, we can end up with requirements that no one actually wants, because everyone thought someone else wanted it.  This is apparently known as the Abilene Paradox, a term coined [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2007%252F11%252F08%252Fabilene-paradox%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Avoid%20the%20Abilene%20Paradox%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F11%2F08%2Fabilene-paradox%2F", "style": "big", "title": "Avoid the Abilene Paradox" });</script></div>
<p><img alt="texas windmill" title="texas windmill" src="http://sehlhorst.smugmug.com/photos/219198148-M.jpg" /></p>
<p>An excellent article by Jonathan Babcock raises a thought provoking idea.  When gathering requirements, we can end up with requirements that no one actually wants, because everyone thought someone else wanted it.  This is apparently known as the Abilene Paradox, a term coined by Jerry Harvey.  We can apply our insights into stakeholders and traceability to prevent it.<br />
<span id="more-593"></span></p>
<h2>The Abilene Paradox</h2>
<p>Jonathan quotes Harvey <a title="been to abilene" href="http://jonathanbabcock.com/2007/10/23/been-to-abilene-lately/">in his article</a>.  Go check it out, we&#8217;ll wait here for you.</p>
<p>What?  You didn&#8217;t go check it out?  Here&#8217;s how Jonathan sums it up:</p>
<blockquote><p>The heart of Harvey’s message, in my view, may be summed up in the following points:</p>
<ol>
<li>While the benefit of coming to decisions as a group is that more points of view will filter out the weakest options, <strong>groups sometimes reach incorrect decisions because of false consensus</strong>.</li>
<li>People will go along with what they perceive to be “the crowd” even if, in reality, there is no “crowd.”</li>
<li>People tend to have an impression &#8211; either warranted or unwarranted &#8211; that there will be repercussions to speaking out against ideas with which they don’t agree.</li>
<li><strong>If we acknowledge that the paradox exists, we can be more conscious of it, and strive to avoid it.</strong></li>
</ol>
<p><cite><a title="abilene paradox" href="http://jonathanbabcock.com/2007/10/23/been-to-abilene-lately/">Jonathan Babcock</a> (bold is ours)</cite></p></blockquote>
<p>OK, now we&#8217;ve got your attention.  Go check it out.</p>
<h2>Eliciting Unowned Requirements</h2>
<p>The other point we walked away from the paradox with is that somehow, the group &#8220;manufactured&#8221; a requirement (or desire) to go to Abilene, even though no one actually wanted to go.  This can be a real challenge with elicitation.  The &#8220;requirements analyst&#8221; believes he has discovered a requirement to go to Abilene when there really wasn&#8217;t one.</p>
<p>The problem manifested partly because the people in the story jumped immediately to a solution, and then made assumptions, and then <em>group think</em>&#8216; ed themselves into a horrible experience.  Once they were considering a solution, and failing to communicate, they ended up  manufacturing the requirement to go to Abilene.</p>
<h2>Context And the Ownership of Goals</h2>
<p>Had the people validated those assumptions, with a simple question, &#8220;Why do you want to go to Abilene?&#8221;, they would have avoided the dreaded trip entirely.  If you walk away with the &#8220;solution&#8221; of &#8220;always ask why&#8221; you&#8217;ll do ok.  But you could do better.</p>
<p>&#8220;Why?&#8221; is certainly a good question &#8211; but ultimately, you need to understand the rationale and ownership of goals.  In the story, the father-in-law proposes the trip to Abilene as a cure for (perceived) boredom.  The rest of the family assumes that he, and each other person (progressively) actually wants to go to Abilene.  In reality, the father-in-law wants to cure family boredom, and the other family members want to make each other happy.  The long drive through the Texas desert to eat bad food in Abilene achieves none of those goals.  Why someone would think that driving through the Texas desert is a cure for boredom, I&#8217;ll never know.  Perhaps when you live 53 miles outside of Abilene, you have different standards.</p>
<p>Imagine that the father-in-law had expressed his goal (requirement) &#8211; &#8220;We need a cure for our boredom!&#8221; and then proposed a solution &#8220;Let&#8217;s drive through the desert.&#8221;</p>
<p>The family would have had the opportunity to dispute the need for a cure for boredom.  At a minimum, we would hope that they would propose an alternative solution, like staying home and seeing how high they could stack some rocks.</p>
<h2>In the World of Software Development</h2>
<p>Cute as the story is, there are unfortunately too many examples of this happening in our companies or with our clients.  Someone proposes a solution, without defining the problem.  It could be an executive, forbidding all employees from using instant messaging tools, instead of identifying low worker productivity as a problem to be solved.  It could be someone from the IT department mandating that all employees may only use Internet Explorer, instead of identifying that the human resources <em>self-enrollment</em> website does not support other browsers.</p>
<p>Or it could be an example I saw recently in a use case.  Paraphrasing to protect the innocent:</p>
<ol>
<li>User adjusts price discount on product.</li>
<li>System updates product price on quote.</li>
<li>System updates subtotal price (for all products) on quote.</li>
<li>User requests recalculation of shipping and taxes.</li>
<li>System updates total price (for all products, including shipping and taxes) on quote.</li>
</ol>
<p>Discussions with the product manager reveal that the existing system (being modified) was implemented such that the server that recalculates taxes can not handle the volume of tax-calculation requests that would be created if taxes were recalculated with every price change (step 1) on every quote.  By asking users to make multiple price changes, and then just recalculate taxes <em>once</em> per quote, the load on the tax-calculation system was dramatically reduced.</p>
<p>A use case represents what the <em>user is trying to accomplish</em> &#8211; it should neither <a title="Write design free requirements" href="http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/">incorporate design elements</a>, nor articulate system constraints.</p>
<p>There&#8217;s a very real possibility that the tax-calculation server has been updated to handle all the traffic for all of the users.  If the use case is written such that it implies that the user <em>desires</em> to manually recalculate taxes, then the user is very likely to get stuck recalculating taxes manually.</p>
<p>Expressing this procedural artifact within the use case is forcing the user to go to Abilene for dinner.</p>
<h2>Conclusion</h2>
<p>When you gather and write requirements, find out the source of the requirements &#8211; and trace those requirements to the source.  Don&#8217;t mix them up.  Don&#8217;t enforce constraints / requirements within a use case that are unrelated to what the user is trying to accomplish (reducing the price on a quote to close a sale).  Validate and document the system constraints (tax-calculator can only handle X quotes per hour), separately.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Avoid+the+Abilene+Paradox+http://bit.ly/asfAx+" 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/11/08/abilene-paradox/&amp;t=Avoid+the+Abilene+Paradox" 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/11/08/abilene-paradox/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Elicitation Techniques for Processes, Rules, and Requirements</title>
		<link>http://tynerblain.com/blog/2007/09/13/elicitation-techniques-2/</link>
		<comments>http://tynerblain.com/blog/2007/09/13/elicitation-techniques-2/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 04:17:49 +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 gathering]]></category>
		<category><![CDATA[business rules elicitation]]></category>
		<category><![CDATA[effectiveness of elicitation]]></category>
		<category><![CDATA[elicitation techniques]]></category>
		<category><![CDATA[gathering business rules]]></category>
		<category><![CDATA[gathering requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[process definition]]></category>
		<category><![CDATA[process definition techniques]]></category>
		<category><![CDATA[requirements elicitation]]></category>
		<category><![CDATA[requirements gathering techniques]]></category>
		<category><![CDATA[rules elicitation]]></category>
		<category><![CDATA[rules gathering techniques]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/09/13/elicitation-techniques-2/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F09%2F13%2Felicitation-techniques-2%2F", "style": "big", "title": "Elicitation Techniques for Processes, Rules, and Requirements" });

Each elicitation technique we have in our toolbox is a tool.  But not every elicitation job is the same.  If we have a hammer, we might be working with nails, or screws, or even an egg.  In our analysis, [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2007%252F09%252F13%252Felicitation-techniques-2%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Elicitation%20Techniques%20for%20Processes%2C%20Rules%2C%20and%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F09%2F13%2Felicitation-techniques-2%2F", "style": "big", "title": "Elicitation Techniques for Processes, Rules, and Requirements" });</script></div>
<p><img title="hammer and egg" alt="hammer and egg" src="http://sehlhorst.smugmug.com/photos/195382781-M.jpg" /></p>
<p>Each elicitation technique we have in our toolbox is a tool.  But not every elicitation job is the same.  If we have a hammer, we might be working with nails, or screws, or even an egg.  In our analysis, we have to develop a deep understanding of our customer&#8217;s business(es).  And that means we need to understand not only the goals and ROI, but the processes, rules, and requirements.  Which is the right tool for each job?</p>
<p><span id="more-569"></span></p>
<h3>Elicitation Techniques</h3>
<p>The BABoK (Business Analyst Body of Knowledge) identifies ten different methods of gathering information.  That list is a good one for describing the <em>complete</em> tool set that business analysts should have for elicitation.  The same techniques are valuable for product managers too.</p>
<p>We wrote about those techniques almost a year ago, from a <a title="Techniques for gathering requirements" href="http://tynerblain.com/blog/2006/11/21/ten-requirements-gathering-techniques/">requirements gathering perspective</a>.  Check out that article for more details, but here&#8217;s the short list:</p>
<ol type="1" start="1" style="margin-top: 0in">
<li class="MsoNormal">Brainstorming</li>
<li class="MsoNormal">Document      Analysis</li>
<li class="MsoNormal">Focus      Group</li>
<li class="MsoNormal">Interface      Analysis</li>
<li class="MsoNormal">Interview</li>
<li class="MsoNormal">Observation</li>
<li class="MsoNormal">Prototyping</li>
<li class="MsoNormal">Requirements      Workshop</li>
<li class="MsoNormal">Reverse      Engineering</li>
<li class="MsoNormal">Survey</li>
</ol>
<h2>Different Views of the Business</h2>
<p>Processes, requirements, and rules all represent <a title="Why separate rules from requirements" href="http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/">different elements of how the business works</a>, or how software must work to support the business.  The most obvious distinction is one of perspective.<br />
To oversimplify a little, some rules define the regulations and policies that constrain how a business operates.  Some rules represent calculations, inferences, or enable actions that provide some precision about the business operates at a greater level of precision.</p>
<p>Processes represent a <em>business</em> design decision by the company.  Given a set of goals and constraints (both &#8220;rule constraints&#8221; and practical ones &#8211; resources, costs, market forces, etc), processes are <em>designed</em> to achieve business objectives.  They generally manifest as procedural instructions for the business.  Note that they should be modeled at a higher level of detail than &#8220;open this file, walk down to purchasing&#8230;&#8221;</p>
<p>Requirements are an articulation of what a tool (in our case, a software product) must do when it is used in one of the business processes.  The <em>design</em> of those processes has an impact on the requirements of the software.  The rules that constrain the business (and by extension, the processes) must be enforced within the software.</p>
<p>Ultimately, we have to understand all three to create successful software.</p>
<h2>Different Drivers of Change</h2>
<p>A more subtle difference is in recognizing that processes, rules, and requirements change differently.  Each class of artifacts changes for different reasons, on a different time scale.</p>
<p><em>Policy</em> rules generally change as top-down mandates, or external forces.  State or federal regulation changes can affect how a company does business.  The Sarbanes-Oxley act has driven massive changes in how companies operate.  These are relatively infrequent, but sweeping changes.  Their effects cascade through everything the business does (and therefore everything that is required of the tools used to operate the business).</p>
<p><em>Decision</em> rules generally change as part of feedback loops in processes.  Consider the set of rules that an insurance provider uses for determining what premium to charge for a given policy.  These rules are so extensive that they are maintained in rate tables, or other complex rules-calculation systems.  An insurance company will have a department who&#8217;s responsibility is to maximize the profits that come from setting premiums.  That means that they will tweak the rules in their rate table on a regular basis &#8211; like an ongoing science experiment.  Predict, modify, inspect, repeat.</p>
<p>Process changes can happen as a result of policy changes, but more likely, they happen because of business re-engineering.  This is the same feedback loop that affects low level rules, but on a grander scale.  The big business consulting companies make <em>very</em> good money providing business consulting services.  Part of that is strategic guidance, and part of it is process re-engineering.  They look for inefficiencies and missed opportunities in processes.  The predict the ROI of changing the processes, propose changes (maybe even help manage those changes), and repeat.  These larger changes take more time than changing low-level rules.</p>
<p>Requirements articulate how the software must support the given processes, while implementing or enforcing the company&#8217;s rules.  Requirements can change because of process changes, and policy rules changes.  As long as you separate rules from requirements, then changes to low-level rules will not force changes in requirements.  And ideally, for volatile rules, will not require you to modify (and test and re-release) your software.  Requirements also change because they represent <em>our understanding</em> of the business&#8217; <em>understanding</em> of what they wanted when we gathered them.  And the business can change it&#8217;s mind, as it gets new data.  One of the arguments for iterative development is that people don&#8217;t know what they want until you&#8217;ve given them what they don&#8217;t want.  There&#8217;s some truth in that.</p>
<h3>Effectiveness of Different Techniques</h3>
<p>We&#8217;ve mentioned before that the same elicitation activities, and people, generally gather process data, rules, and requirements.  And that presents one of the challenges in managing them independently.  Here&#8217;s a table that summarizes the effectiveness of different elicitation techniques for uncovering and defining a business&#8217; processes, rules, and requirements.</p>
<p><img title="elicitation technique comparison table" alt="elicitation technique comparison table" src="http://sehlhorst.smugmug.com/photos/195381967-O.gif" /></p>
<p>Each technique has a row, and is graded <em>Consumer Reports</em> style.  Each type of artifact has a column.  A full green circle means that the technique is well suited to eliciting that information.  A half-filled circle means that you can use that technique to gather the data, but it is not as effective as the full-green-circle techniques.  An empty circle means it isn&#8217;t impossible, but you should avoid it if you can.</p>
<p>As an example, reverse engineering is ineffective at defining any of the above.  Reverse engineering can tell you what you have, but in no way can you assume that what you have is what you need.  In fact, if it were, then your customer wouldn&#8217;t need to do the new project at all.  Reverse engineering is a last resort that we sometimes have to rely on, but you should always treat it as a &#8220;starting point&#8221; &#8211; a baseline to be corrected and validated.  It is certainly going to paint an incomplete picture &#8211; and often an inaccurate one.</p>
<h2>And You?</h2>
<p>These effectiveness assessments are based on experiences with dozens of clients in the enterprise software space, over a decade of elicitation.  That means they are anecdotal.  Thousands of people will read this article [Really.  How cool is that?!].  So if you can confirm the above, or even better &#8211; correct it and share your experiences, we&#8217;ll be able to paint a much better picture.  So &#8211; join in the discussion and let us all know.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Elicitation+Techniques+for+Processes%2C+Rules%2C+and+Requirements+http://bit.ly/WKlqV+" 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/13/elicitation-techniques-2/&amp;t=Elicitation+Techniques+for+Processes%2C+Rules%2C+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/09/13/elicitation-techniques-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
