<?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; Business Rules</title>
	<atom:link href="http://tynerblain.com/blog/category/business-rules/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Sun, 26 Feb 2012 15:00:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>A Prototype is Worth a Thousand Lines of Code</title>
		<link>http://tynerblain.com/blog/2010/10/25/a-prototype-is-worth-a-kloc/</link>
		<comments>http://tynerblain.com/blog/2010/10/25/a-prototype-is-worth-a-kloc/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 15:09:35 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile interaction]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[process prototyping]]></category>
		<category><![CDATA[prototypes]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[uml as prototype]]></category>

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

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+A+Prototype+is+Worth+a+Thousand+Lines+of+Code+http%3A%2F%2Fbit.ly%2FaMAQo4+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2010/10/25/a-prototype-is-worth-a-kloc/&amp;t=A+Prototype+is+Worth+a+Thousand+Lines+of+Code" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/10/25/a-prototype-is-worth-a-kloc/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Simple Agile Model Example</title>
		<link>http://tynerblain.com/blog/2008/12/03/simple-agile-model-example/</link>
		<comments>http://tynerblain.com/blog/2008/12/03/simple-agile-model-example/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 03:40:13 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[agile product management]]></category>
		<category><![CDATA[modeling business rules]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[uml state transition diagram]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=774</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F12%2F03%2Fsimple-agile-model-example%2F", "style": "big", "title": "Simple Agile Model Example" }); A picture is worth a thousand words.  Agile values working software over comprehensive documentation, and it values customer collaboration over contract negotiation.  With that in mind, how much is a picture of a model worth?  Check out a simple example, how it helped, and [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F12%252F03%252Fsimple-agile-model-example%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Simple%20Agile%20Model%20Example%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F12%2F03%2Fsimple-agile-model-example%2F", "style": "big", "title": "Simple Agile Model Example" });</script></div>
<p><img class="alignnone" title="nick jonas model picture" src="http://sehlhorst.smugmug.com/photos/429885890_yjtQS-M.jpg" alt="" width="250" height="187" /></p>
<p>A picture is worth a thousand words.  Agile <a title="agile manifesto" href="http://agilemanifesto.org/">values</a> working software over comprehensive documentation, and it values customer collaboration over contract negotiation.  With that in mind, how much is <em>a picture of a model</em> worth?  Check out a simple example, how it helped, and what we didn&#8217;t do.</p>
<p><span id="more-774"></span></p>
<h2>A Complex Conversation</h2>
<p>I was working with a client on an eCommerce website, where one of the things that was important to the client was having and managing an affiliate network that refers visitors (and ultimately customers) to the website. The conversations around exactly what the stakeholders of the eCommerce site wanted were pretty convoluted, and different <a title="writing clear requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">stakeholders described the &#8220;requirements&#8221; differently</a>.</p>
<p><strong>Affiliate Network Background</strong></p>
<p>An affiliate network can work in the following way:</p>
<ol>
<li>When someone visits a website, and does so by directly clicking on a link on an affiliate partner&#8217;s page, the website is able to identify the affiliate partner who &#8220;sent&#8221; the visitor to the website.</li>
<li>The website keeps track of who &#8220;sent&#8221; the visitor.</li>
<li>If the visitor becomes a customer, the affiliate partner who sent the visitor is compensated.  One way to compensate that affiliate partner is by giving them a percentage of the revenue that the customer generates for the website.</li>
</ol>
<p>This can be a lucrative model for both the eCommerce site and the affiliate partner.  The partner gets paid for funneling traffic to the eCommerce site, but not necessarily doing any other work (beyond what it takes to encourage people to go to the eCommerce site).  The eCommerce site gets increased traffic, at a manageable cost &#8211; proportional to the revenue generated by the incremental visitors (who would probably not otherwise visit the site).</p>
<p>Each business gets to focus on its core competency (sending traffic, for the affiliate partner; converting that traffic into revenue, for the eCommerce site).  The eCommerce site invests the majority of the time and money (probably orders of magnitude more investment), and the affiliate partner shoulders all of the risk, but can do this for almost no cost (if they want), in exchange for an uncertain revenue stream.  This blog is currently trying out an affiliate relationship with <a title="carbonite affiliate link" href="http://www.anrdoezrs.net/click-3207650-10571305">Carbonite</a> &#8211; because I love the product (and therefore think people who visit Tyner Blain will too), and because the revenue generated, if any, will help defray the costs of writing and maintaining the blog.</p>
<p><strong>Specific Complexity of an Affiliate Model</strong></p>
<p>The complexity of this &#8220;simple&#8221; model becomes apparent when you ask a few clarifying questions.</p>
<ul>
<li>Will there be multiple affiliate partners?  (Yes)</li>
<li>If someone is referred by multiple affiliate partners (on separate occasions), who gets credit? (The last affiliate partner who sends the customer to the site)</li>
<li>Does the visitor have to purchase during the visit that was made from the affiliate partner&#8217;s site? (No)</li>
<li>Is there an expiration date, after which an affiliate will not get credit for customer purchases?  (Yes, &#8220;N&#8221; days).  [Note: I am obscuring the actual value for this article, but N is a real number.]</li>
<li>If a customer who was referred by an affiliate makes multiple purchases, for how many of them is the affiliate partner credited?  (One)</li>
</ul>
<p>Asking these questions in different ways generated some different, and potentially conflicting answers.  The list above is the &#8220;after we put it all together&#8221; answer.</p>
<h2>A Simple Model</h2>
<p>We solved this problem by grabbing the immediately available stakeholders and pulling them into an office with a whiteboard for about 3 minutes.  [Ed: Our first article about <a title="ooa and requirements" href="http://tynerblain.com/blog/2005/12/09/a-picture-is-worth-a-thousand-requirements/">using object-oriented analysis as part of requirements gathering</a> is from three[!] years ago, this is not a new idea, and wasn&#8217;t then, either.]  I drew the following state transition diagram on the whiteboard, <a title="ten great active listening tips" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">using an active listening technique</a>, to confirm that I had consolidated the inputs into the right set of business requirements.  <a title="state transition diagrams and business rules" href="http://tynerblain.com/blog/2007/03/22/statecharts-and-business-rules/">Documenting business rules with a state transition diagram</a> was very effective at highlighting them.</p>
<p><img class="alignnone" title="state transition diagram" src="http://sehlhorst.smugmug.com/photos/429885895_48JaP-O.jpg" alt="" width="400" height="282" /></p>
<p>Most of the explanations from stakeholders were in more of a use-case format, but <a title="state transition diagrams versus use cases" href="http://tynerblain.com/blog/2007/03/21/use-case-vs-statechart/">a state-transition diagram</a> was more effective at validating the rules and requirements in this situation.</p>
<p>The diagram above uses the following approach to describing the problem:</p>
<ul>
<li>Some customers are considered to be &#8220;actively referred&#8221; by an affiliate partner &#8211; and when that is true, an affiliate receives compensation for the order placed by the customer.  Other customers are not considered to be &#8220;actively referred&#8221; and no compensation is due to the affiliate partner.</li>
<li>Customers can be &#8220;temporarily actively referred&#8221; and events modify that state.</li>
</ul>
<p>What the diagram shows, given that context is the following business rules:</p>
<ul>
<li>When a customer is referred to the site, the &#8220;to be compensated&#8221; affiliate partner is identified, and associated with the customer.</li>
<li>When the same customer is referred to the site by a different affiliate partner, the new affiliate replaces the old one.</li>
<li>If &#8220;N&#8221; days pass after a customer was referred by an affiliate partner, that affiliation expires, and the affiliate partner is not compensated for future purchases.</li>
<li>An affiliate partner is only compensated for the first purchase made by the referred customer.</li>
</ul>
<p>The stakeholders that were present confirmed that this perfectly represents their business requirements.  Even cooler &#8211; a couple days later, the business person most-directly-responsible for implementing the programs came by, looked at the whiteboard, and <em>signed her name</em> on it to record her approval.  We also have a camera-phone snapshot of that.</p>
<h2>What We Didn&#8217;t Do</h2>
<p>I could have titled this article <em>Mini-Model and Requirements</em>, but <em>Agile</em> seemed more appropriate, because we didn&#8217;t go over the top with it (and it is a rapid-development, incremental project).  The diagram above also represents the minimum deployable version of the affiliate program for a given release.</p>
<p>We stopped short of creating the following diagram:</p>
<p><img class="alignnone" title="uml state diagram" src="http://sehlhorst.smugmug.com/photos/429901660_yATMW-M.png" alt="" width="299" height="342" /></p>
<p>This diagram is more of a &#8220;classic&#8221; artifact that you would see in a BUFR (big, up-front requirements) project.  Our team collaborates regularly, and the affiliate program details were now relevant/timely.  We had the conversations, drew the diagram, confirmed (in about 10 minutes), took a picture, and shared it with the rest of the team.  There would have been marginal incremental value in making a pretty version of the diagram, so we didn&#8217;t do it.  Our goal is working software, not comprehensive documentation.</p>
<h2>Conclusion</h2>
<p>Just do what you need to do, then move on.  For our team, clarifying the intent was important.  Creating a formal, pretty picture added no extra value.  So we didn&#8217;t do it.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Simple+Agile+Model+Example+http%3A%2F%2Fbit.ly%2FhpbGb3+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/12/03/simple-agile-model-example/&amp;t=Simple+Agile+Model+Example" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/12/03/simple-agile-model-example/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Impact of a Hidden Decision</title>
		<link>http://tynerblain.com/blog/2008/10/08/hidden-decision-impact/</link>
		<comments>http://tynerblain.com/blog/2008/10/08/hidden-decision-impact/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 03:20:11 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Process Flow]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[business process analysis]]></category>
		<category><![CDATA[business process optimization]]></category>
		<category><![CDATA[hidden business rules]]></category>
		<category><![CDATA[hidden decisions]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=725</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F10%2F08%2Fhidden-decision-impact%2F", "style": "big", "title": "The Impact of a Hidden Decision" }); Business rules are often hidden in processes as hidden decisions.  Once you discover that hidden decision, how do you communicate the impact of exposing and managing the decision? Hidden Decision In our previous article on hidden business rules and enterprise decision management, [...]]]></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%252F10%252F08%252Fhidden-decision-impact%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22The%20Impact%20of%20a%20Hidden%20Decision%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F10%2F08%2Fhidden-decision-impact%2F", "style": "big", "title": "The Impact of a Hidden Decision" });</script></div>
<p><img class="alignnone" title="hiding again" src="http://photos.smugmug.com/photos/389895783_nZ9LB-L.jpg" alt="" width="250" height="200" /></p>
<p>Business rules are often hidden in processes as hidden decisions.  Once you discover that hidden decision, how do you communicate the impact of exposing and managing the decision?</p>
<p><span id="more-725"></span></p>
<h2>Hidden Decision</h2>
<p>In our previous article on <a title="hidden decisions" href="http://tynerblain.com/blog/2008/09/23/hidden-business-rule-example/">hidden business rules</a> and enterprise decision management, we looked at a process that had a hidden decision.</p>
<p>First, take a look at the process with the decision still hidden:</p>
<p><img class="alignnone" title="decision hidden in business process" src="http://sehlhorst.smugmug.com/photos/379161161_Rk7DQ-L.gif" alt="" width="434" height="574" /></p>
<p>Here&#8217;s the process (with the decision exposed) from that article:</p>
<p><img class="alignnone" title="process with hidden decision" src="http://sehlhorst.smugmug.com/photos/379161208_6FwGv-L.gif" alt="" width="396" height="600" /></p>
<p>The decision that was hidden was an implicit decision &#8211; &#8220;Pick One?&#8221; &#8211; for which the answer was always &#8220;No.&#8221;  After making this discovery, and communicating with your team, you then have to decide if you are going to make the decision explicit.  Making the decision explicit will involve defining the business rules for how to make the decision, and (if done in software) implementing the decision, or the ability for a person to make the decision.</p>
<h2>Impact of a Decision</h2>
<p>The diagrams above allude to the fact that there is money to be made in the process, in the &#8220;Continue Automated Process&#8221; step.  We need to provide a better understanding of how / when money is made.  A slight expansion of the process flow above (replacing the &#8220;Continue Automated Process&#8221; with a couple steps, looks like the following:</p>
<p><img class="alignnone" title="process with decision impact" src="http://photos.smugmug.com/photos/389905079_vFAZo-O.gif" alt="" width="450" height="805" />[<a title="larger version of business process with hidden decision" href="http://photos.smugmug.com/photos/389905095_heoaB-O.gif">click for larger version</a>]</p>
<p>The last step introduces a real-world decision: &#8220;Sell products?&#8221; and only when the answer is yes does the process &#8220;Earn Revenue.&#8221;</p>
<p>If you&#8217;re analytically minded, you can apply percentages to each branch of each decision, and add everything up to figure out an answer.  That might be reasonable for a simple example like this one, but it can become too complex with a more complicated process.</p>
<p>There&#8217;s an easier way.  And since the goal is to <em>communicate</em> the impact to someone, you want an easier way.</p>
<h2>Truth Tables and Decisions</h2>
<p>A truth tables is a tried and true artifact for describing combined sets of decisions.  You can use it effectively to extract information from a decision-heavy process diagram.  Consider the following application of a truth table to the process above:</p>
<p><img class="alignnone" title="complete truth table" src="http://photos.smugmug.com/photos/389892821_FLJPK-L.jpg" alt="" width="450" height="157" /> [<a title="complete truth table" href="http://photos.smugmug.com/photos/389892784_Vz5V6-L.jpg">larger version</a>]</p>
<p>Each of the decisions in the process flow has a column.  Each row represents a unique path through the flow.  Each cell contains the result of the decision, for that path.  Note that when a path does not involve a decision, there is no value in the cell.</p>
<p>That provides a comprehensive view of the process, which you could build upon.  However, in this case, you are focusing on the impact of the hidden decision (&#8220;Pick One&#8221;).  The following paths, from the truth table, involve that decision:</p>
<p><img class="alignnone" title="hidden decision in truth table" src="http://photos.smugmug.com/photos/389892796_hUbg7-L.jpg" alt="" width="450" height="157" /> [<a title="larger hidden decisions in truth table" href="http://photos.smugmug.com/photos/389892709_We9ps-L.jpg">larger version</a>]</p>
<p>Ignoring the other paths, and re-organizing, you find the following:</p>
<p><img class="alignnone" title="hidden NO" src="http://photos.smugmug.com/photos/389892829_fUfj8-L.jpg" alt="" width="450" height="49" /> [<a title="larger hidden no" href="http://photos.smugmug.com/photos/389892771_dC6Lw-L.jpg">larger version</a>]</p>
<p>50% of the time, when &#8220;Many&#8221; results are found in the first decision in the process, <em>if</em> you pick one of the results, you will earn revenue.</p>
<p><img class="alignnone" title="hidden yes" src="http://photos.smugmug.com/photos/389892809_cWoTK-L.jpg" alt="" width="450" height="66" /> [<a title="larger hidden yes" href="http://photos.smugmug.com/photos/389892758_HQbmB-L.jpg">larger version</a>]</p>
<p>When you do not pick one, 20% of the time, the customer (or user) abandons the process.  For the users that do not abandon the process, you earn revenue 50% of the time.  Taking both into account, you earn revenue only 40% of the time.</p>
<h2>Adding Up the Impacts</h2>
<p>When there are &#8220;Many&#8221; results from search, you can improve the performance of this part of your process by 20% &#8211; specifically, you increase revenue by 20%.  But only if you always &#8220;Pick One&#8221; of the many results. You can extend this analysis to determine the percentage of None/One/Many outputs from the search at the start of the process, and determine an overall impact on the process.  If search returned many results 10% of the time, you can increase revenue (overall) by 1% by always picking one of those results.  That gives you the business justification to <a title="roi calculation tips" href="http://tynerblain.com/blog/2006/02/01/definition-of-roi-return-on-investment/">calculate ROI </a>on exposing the hidden decision.</p>
<p>The end result is that you have a simple way to communicate the impacts (truth table) in the language of stakeholders (ROI).</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+The+Impact+of+a+Hidden+Decision+http%3A%2F%2Fbit.ly%2FftuPGt+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/10/08/hidden-decision-impact/&amp;t=The+Impact+of+a+Hidden+Decision" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/10/08/hidden-decision-impact/feed/</wfw:commentRss>
		<slash:comments>3</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.  [...]]]></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>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Hidden+Business+Rule+Example+http%3A%2F%2Fbit.ly%2FfHOKh6+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/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/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/09/23/hidden-business-rule-example/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Business Architecture, Rules, and Requirements</title>
		<link>http://tynerblain.com/blog/2008/04/14/business-architecture-rules-and-requirements/</link>
		<comments>http://tynerblain.com/blog/2008/04/14/business-architecture-rules-and-requirements/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 03:54:16 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[architecture design]]></category>
		<category><![CDATA[business architecture]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=665</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F04%2F14%2Fbusiness-architecture-rules-and-requirements%2F", "style": "big", "title": "Business Architecture, Rules, and Requirements" }); We know to treat business rules and business requirements differently. One example &#8211; treat external government regulations as rules (because they are less subject to change than requirements). When you have multiple systems in an architecture, while &#8220;rules&#8221; makes sense for one system, [...]]]></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%252F04%252F14%252Fbusiness-architecture-rules-and-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Business%20Architecture%2C%20Rules%2C%20and%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F04%2F14%2Fbusiness-architecture-rules-and-requirements%2F", "style": "big", "title": "Business Architecture, Rules, and Requirements" });</script></div>
<p><img src="http://www.smugmug.com/photos/279726178_JD23X-L.jpg" alt="lioness" width="250" height="150" /></p>
<p>We know to treat business rules and business requirements differently.  One example &#8211; treat external government regulations as rules (because they are less subject to change than requirements).  When you have multiple systems in an architecture, while &#8220;rules&#8221; makes sense for one system, &#8220;requirements&#8221; make sense for another.  What do you do?</p>
<p><span id="more-665"></span></p>
<h2>A Single-System Rules Example</h2>
<p>Imagine you have a system that is responsible for calculating taxes on orders.  Imagine that system is calculating VAT (value added taxes) in China.</p>
<p>After you analyze the regulations, you determine that the following rules describe what you must implement:</p>
<ol>
<li>There are two groups of customers.  General VAT payers and Small-Scale VAT payers.</li>
<li>General VAT Payers pay 17% VAT and will receive a Golden Tax invoice* (so that they may recoup their taxes later from the government).</li>
<li>Small Scale VAT Payers pay 17% VAT and do not receive Golden Tax invoices (because they may not claim a refund of those taxes).</li>
<li>All taxes must be calculated accurately (per product on an invoice, for a given customer) within 1 RMB per rules 1 &#8211; 3.</li>
</ol>
<p>* A Golden Tax invoice is an additional piece of paperwork that, when required, must accompany the company&#8217;s standard invoice.  This Golden Tax invoice is presented to the government to initiate the refund of taxes paid (and waived).</p>
<p>This is not the complete set of rules &#8211; I have simplified them for illustrative purposes, so don&#8217;t go implement anything based on this.</p>
<p>Your system receives invoices, updates them with the correct taxes, and returns them to the calling system.  An invoice includes identification of the customer, and the products that have been sold to that customer.  You document the four business rules above, and your developers implement a solution.</p>
<p>Given an invoice, your system calculates the taxes correctly per the four business rules.  You&#8217;re done!  Ship it!</p>
<h2>A System As Part of An Architecture</h2>
<p>Would that life were so simple.</p>
<p>How does your application communicate with other applications?  Your tax-calculator has to <em>receive</em> an invoice without taxes, and <em>return</em> an invoice that includes properly calculated taxes. Your developers decide to implement your software as a service provider.  The outside application passes an invoice, conforming to a defined schema, and the invoice is returned, conforming to a defined schema.  Now are you done?  Not quite.  Who determined what is in the schema, and how did they reach that conclusion?</p>
<p>To illustrate the problem, consider this: Does your schema include a field for the invoiced customer that identifies if the customer is a General VAT payer versus a Small Scale VAT Payer?  Or does the schema ignore that field, relying on an expectation that your software will somehow know, or somehow request that information from some other application?</p>
<p>The problem is, in an architecture &#8211; where any number of applications co-exist, someone has to determine <em>who does what</em> (in terms of the applications, not the people).</p>
<p>You can&#8217;t write a requirement that states &#8220;the invoice that is passed to the tax-system must include the customer&#8217;s VAT payer status.&#8221;  You can, but you can&#8217;t do it until some design decisions have been made.  Is that putting the cart before the horse?  Design <em>driving</em> requirements?!  No, it isn&#8217;t.</p>
<p>While the &#8220;who does what&#8221; decision is inarguably design, it is <em>architectural</em> design.  And as such, while it happens before <em>system requirements</em>, it happens <em>after architecture requirements</em>.</p>
<p>In previous articles, with an implicit focus on a single application, we argued for <a title="requirements vs design" href="http://tynerblain.com/blog/2006/02/11/requirements-vs-design-which-is-which-and-why/">a distinction between requirements and design</a>, and described <a title="software development process" href="http://tynerblain.com/blog/2006/01/29/describing-the-software-development-process/">software development as being analogous to an onion</a>.  The architectural element adds a couple more layers to the onion.</p>
<ul>
<li>Market Needs drive architecture requirements (create invoices for customers to purchase products)</li>
<li>Architecture requirements drive architectural design (one system creates invoices, another system calculates taxes)</li>
<li>Architectural design determines the scope and requirements for a single application.</li>
<li>Within the defined scope, the application&#8217;s requirements drive design.</li>
<li>Continue into implementation and testing of the application.</li>
</ul>
<p>[Note: Not shown, but just as important, is "end to end" testing of the architecture, across applications.  We're skipping that to make a single point about architecture and requirements - but it is still critical, so don't skip it when executing.]</p>
<h2>Requirements on Other Systems</h2>
<p>Your tax-calculator application has defined an API that places requirements on the invoice-creation system.  By defining that the API will include a &#8220;General vs. Small Scale&#8221; VAT Payer flag, you are placing a requirement on that other system.</p>
<p>This hints at one of the challenges of developing architectures.  Someone has to determine if the current customer is a General or Small Scale VAT payer.</p>
<p>One (obviously poor) approach would be to ask the customer for every transaction what their VAT-payer-classification is.  This is fine (and possibly even required) for first-time customers.  But for a repeat customer who orders products every day, this would get tiresome for the customer.</p>
<p>Perhaps you have yet another application that just keeps track of existing customers.  Your invoicing system is optimized for processing orders, not keeping track of customers.  The architectural design decision is to maintain that information about existing customers, instead of asking the customer for every transaction.</p>
<p>Now you are starting to get some propagation of requirements.</p>
<ul>
<li>The tax-calculator system must know the VAT-payer-classification of each customer (to support rule #2).</li>
<li>The architectural design sets the scope that the invoicing system must make the determination of a customer&#8217;s VAT-payer-classification.  Therefore, the tax-calculator must be told what the customer&#8217;s VAT-payer-classification is, by the invoicing system.</li>
<li>When invoices are created for existing customers, the invoicing system must get the VAT-payer-classification data from the customer-master application.</li>
<li>When invoices are created for new customers, the invoicing system must record the customer&#8217;s VAT-payer-classification.</li>
<li>The invoicing system must tell the customer-master application what the customer&#8217;s VAT-payer-classification is, for future reference.</li>
</ul>
<h2>Rules or Requirements?</h2>
<p>When dealing with rules and requirements, this can be confusing.  It is a business rule to account for VAT-Payer status when creating invoices (so that a Golden Tax invoice will be created in specific circumstances).  But it does not look like a business rule to say that the invoicing system must tell the customer-master system the VAT-Payer-classification of each customer.</p>
<p>And that&#8217;s ok.  It is not a business rule.  It is a requirement.</p>
<h2>Remember Traceability</h2>
<p>The key to resolving this apparent conflict is to acknowledge that these other artifacts are requirements &#8211; and they are requirements that are needed to support the business rule.  The business rule is dependent upon these requirements to be implemented &#8211; given the architectural design.</p>
<p>Remembering that this is a traceable dependency makes this easy to keep track of.</p>
<h2>Remember Traceability</h2>
<p>There&#8217;s another important reason to remember traceability.  You need to know why the invoicing system must tell the customer master the VAT-payer-classification of each customer.</p>
<p>The architectural design requires the customer-master to keep track of the information.  To keep track, the customer master needs to be told initially.  The architectural design also requires the invoicing system to defer to the customer-master application for existing customers.  And the architectural design requires the invoicing system to pass the VAT-payer-classification to the tax-calculator.</p>
<h2>Design Before Requirements</h2>
<p>Technically, yes, this puts design before requirements.  But only architectural design &#8211; specifically, the allocation of responsibilities to each application, and the definition of how those applications must communicate with each other (or at least what information they must pass).</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Business+Architecture%2C+Rules%2C+and+Requirements+http%3A%2F%2Fbit.ly%2FgyQWrd+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/04/14/business-architecture-rules-and-requirements/&amp;t=Business+Architecture%2C+Rules%2C+and+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/04/14/business-architecture-rules-and-requirements/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Glossary of Terms</title>
		<link>http://tynerblain.com/blog/2007/10/29/glossary-of-terms/</link>
		<comments>http://tynerblain.com/blog/2007/10/29/glossary-of-terms/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 04:12:04 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Data management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[ambiguity]]></category>
		<category><![CDATA[ambiguos]]></category>
		<category><![CDATA[ambiguous]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[glossary]]></category>
		<category><![CDATA[glossary of terms]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[unambiguos]]></category>
		<category><![CDATA[unambiguous]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/10/29/glossary-of-terms/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F10%2F29%2Fglossary-of-terms%2F", "style": "big", "title": "Glossary of Terms" }); Some books on how to write and manage requirements mention using a glossary. Most books on requirements don&#8217;t go into enough detail about either the importance of a glossary of terms, or the precise use of the glossary of terms. Or if they do, they [...]]]></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%252F10%252F29%252Fglossary-of-terms%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Glossary%20of%20Terms%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F10%2F29%2Fglossary-of-terms%2F", "style": "big", "title": "Glossary of Terms" });</script></div>
<p><img alt="glossary of terms" title="glossary of terms" src="http://sehlhorst.smugmug.com/photos/214815723-XL.jpg" /><br />
Some books on how to write and manage requirements mention using a glossary.  Most books on requirements don&#8217;t go into enough detail about either the importance of a glossary <em>of terms</em>, or the precise use of the glossary of terms.  Or if they do, they under-emphasize the benefits of a well-defined glossary of terms.  Walking a day in the moccasins of a business rules analyst helps us all appreciate the importance of a well-managed glossary of terms.</p>
<p><span id="more-589"></span></p>
<h2>Glossary <em>of Terms</em></h2>
<p>When I was first introduced to the notion of a glossary as a requirements analyst, it was explained to me at a very superficial level.  To paraphrase &#8211; the glossary holds the definitions of the terms that people on the project might not understand.  The intent was simply to provide a <em>dictionary</em> function &#8211; a place to look up the domain-specific and esoteric terms that developers or testers would find in the requirements.  An easy way for people to know what the requirement is talking about.</p>
<p>A <u>glossary of terms</u> is much more than that.</p>
<p>A glossary of terms is a tool that provides the following benefits:</p>
<ul>
<li>Explicitly defines the <em>nouns</em> that are referenced in the requirements.</li>
<li>Eliminates one of the many sources of ambiguity in the requirements.</li>
<li>Is the foundation for other key requirements artifacts, especially a fact model.*</li>
</ul>
<p>*A fact model will be the subject of one or more future articles, but for now, think of it as a model that defines the language used to express the relationships between business objects (nouns), as they are defined in the requirements.</p>
<p>It is worth noting that the glossary of terms and the fact model are critical to writing unambiguous rules &#8211; and after reading this article, if you aren&#8217;t convinced that they are critical to writing <a title="Writing unambiguous requirements is critical" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">unambiguous requirements</a>, then comment below.</p>
<h2>Unenlightened Definitions</h2>
<p>After attending the 10th International Business Rules Forum last week, I felt like I had been hit over the head with the &#8220;well, duh!&#8221; club.  I <em>knew</em> what a glossary was, and how and why to use it.  I never thought it was a big deal &#8211; so I never wrote about it.  Now I <em>know</em> what I already should have appreciated about how important a glossary is to writing good requirements.  I wrote the heading for this section, anticipating a review of some of my favorite requirements books &#8211; to see how they deal with glossaries.  The treatments must not have been as insightful, or how could I have been so unappreciative for so long?</p>
<ol>
<li><a title="managing software requirements" href="http://www.amazon.com/dp/032112247X?tag=tbrb-20&#038;link_code=as3&#038;creativeASIN=032112247X&#038;creative=373489&#038;camp=211189"><em>Managing Software Requirements, Second Edition</em></a>.  There is no mention at all of having a glossary of terms in this otherwise good book.  And they even have an entire chapter dedicated to removing ambiguity from requirements!</li>
<li><a title="Requirements by Collaboration" href="http://www.amazon.com/dp/0201786060?tag=tbrb-20&#038;link_code=as3&#038;creativeASIN=0201786060&#038;creative=373489&#038;camp=211189"><em>Requirements by Collaboration</em></a>.  The best book on JAD sessions.  This book has a good definition &#8211; &#8220;These terms serve as the foundation for all requirements models and business rules; the goal of the glossary is to provide a common vocabulary on which all of the stakeholders can agree.&#8221;  However, this introduction has only two short paragraphs explaining what a glossary of terms is &#8211; not addressing how important it is.  There is a good idea for running requirements sessions &#8211; to assign a <em>glossary guardian</em> during a session to record any business terms that crop up during the session.</li>
<li><a title="More about software requirements" href="http://www.amazon.com/dp/0735622671?tag=tbrb-20&#038;link_code=as3&#038;creativeASIN=0735622671&#038;creative=373489&#038;camp=211189"><em>More About Software Requirements</em></a>.  No mention.</li>
<li><a title="Patterns for Effective Use Cases" href="http://www.amazon.com/dp/0201721848?tag=tbrb-20&#038;link_code=as3&#038;creativeASIN=0201721848&#038;creative=373489&#038;camp=211189"><em>Patterns for Effective Use Cases</em></a>.  No mention.</li>
<li><a title="Writing Effective Use Cases" href="http://www.amazon.com/dp/0201702258?tag=tbrb-20&#038;link_code=as3&#038;creativeASIN=0201702258&#038;creative=373489&#038;camp=211189"><em>Writing Effective Use Cases</em></a>.  No mention.</li>
<li><a title="Software Requirements, 2nd Edition" href="http://www.amazon.com/dp/0735618798?tag=tbrb-20&#038;link_code=as3&#038;creativeASIN=0735618798&#038;creative=373489&#038;camp=211189"><em>Software Requirements, 2nd Edition</em></a>.  Ends a sentence in a paragraph on unambiguous requirements with &#8220;Define all specialized terms and terms that might confuse readers in a glossary.&#8221;</li>
</ol>
<p>OK, enough bashing of my favorite books on requirements management (and they are my favorites).  The point is, the glossary of terms is getting short shrift in the larger requirements community.  Where other larger and smaller ideas get entire books, the glossary of terms hardly gets mentioned.  If your favorite book isn&#8217;t on this list, chime in and let us know how it treats glossaries.</p>
<h2>Glossary Gets Its Due</h2>
<p><a title="Business Rules Concepts by Ron Ross" href="http://www.amazon.com/dp/094104906X?tag=tbrb-20&#038;link_code=as3&#038;creativeASIN=094104906X&#038;creative=373489&#038;camp=211189"><em>Business Rules Concepts</em></a>, by Ron Ross, however, puts more emphasis on the glossary of terms.  Ron starts by making a point of specifically defining the glossary as a glossary <em>of terms</em> &#8211; and provides this definition of &#8220;term&#8221; (via Merriam-Webster&#8217;s Unabridged Dictionary, 2000):</p>
<blockquote><p>Term: <em>a word or expression that has a precisely limited meaning in some uses or is peculiar to a science, art, profession, trade, or or special subject</em>.</p></blockquote>
<p>Ron goes on to spend a few pages emphasizing the importance of the glossary of terms, both on its own, and as the foundation for other artifacts that are critical to managing business rules.  As we&#8217;ll see in future articles, some of these techniques will prove invaluable in managing requirements too.</p>
<h2>Glossary of Terms</h2>
<p>A glossary of terms, using the definition of <em>term</em> that Ron provides, is simply put, a list of all of the terms that represent specific <em>nouns</em> in the domain in which we are writing rules (or requirements).  These are the subjects and objects of rules and requirements.  They expressly represent relevant business concepts.  Terms, by Ron&#8217;s definition, are always nouns.  We&#8217;ll stick with that.</p>
<p>Every business term, however <em>apparently obvious</em>, should be considered.  In two separate sessions at the IBRF conference by Ron and an employee of Ron&#8217;s company, Kristen Seer, <a title="business rule solutions" href="http://www.brsolutions.com/">Business Rule Solutions</a>, we were exposed to some &#8220;obvious&#8221; terms that proved to be ambiguous.  Here are a couple, plus some of our own.</p>
<ul>
<li>In baseball, what is the definition of &#8220;<strong>ball</strong>&#8220;?  Is it a non-strike?  A round object hurled by a pitcher?  The game itself (&#8220;Play Ball!&#8221;)?  Ron is famous for his baseball-rules examples.</li>
<li>For an electric utility company, what is &#8220;<strong>load</strong>&#8220;?  Is it the total power demand of all devices on the network?  Is it the power demand of a single device on the network?  Is it the minimum or average power demand over a period of time?</li>
<li>Is a &#8220;<strong>customer</strong>&#8221; someone who <em>might purchase </em>products from us (e.g. someone to whom we market)?  Or is a customer someone who has purchased in the past?  Or is in the process of purchasing?</li>
<li>Is &#8220;<strong>profit</strong>&#8221; measured net or gross?  Is margin a dollar amount or a percentage?  Contribution or total?</li>
<li>Is &#8220;<strong>enrollment</strong>&#8221; what a student does for a class, or the count of all enrolled students?</li>
</ul>
<p>The point is this:</p>
<blockquote><p>Glossaries should include not only the esoteric terms, but especially should include the common and obvious terms that are subject to interpretation.</p></blockquote>
<p>Imagine exploring the centralization (or possibly federation) of existing global, decentralized processes.  Among other things, you are looking at the processing of sales transactions.  And you are dealing with shopping carts, quotes, orders, and purchase orders.  These different terms mean different things to different people &#8211; even within a single geography.  And they evoke not only passionate opinions, but the interpretations (and misinterpretations) of these terms may have <em>very</em> sweeping impact on some high level decision making &#8211; beyond what they reasonably should.  <strong>Do you want a glossary of terms now?</strong></p>
<p>These terms, when undefined, introduce ambiguity into your requirements.  You need to define them, and gain a consensus on the definitions.  And you should reference all of the artifacts (use cases, requirements, etc) that use the terms (or reference all of the terms used in an artifact).</p>
<p>You can maintain a glossary of terms within your repository, in an excel file, a wiki, a word doc, or even a sharepoint list.  The way your team interacts with these terms will dictate which mechanism is best.  If you are managing requirements (or rules) in a repository, then a repository will probably be the best place to maintain the list &#8211; as it should simplify (or automate) the traceability between artifacts that reference the terms and the terms themselves.</p>
<h2>Conclusion</h2>
<p>The guidance we generally hear, to include terms that &#8220;might confuse someone&#8221; is right.  It is also under-emphasized.  Who would expect &#8220;customer&#8221; and &#8220;quote&#8221; and &#8220;margin&#8221; to <em>confuse</em> someone?  If two people assume different definitions for those terms when reading your requirements, then at least one of them will be confused.</p>
<p>Don&#8217;t underestimate the potential benefits of maintaining a glossary of terms as a key component of your requirements development.  Future articles here will present ideas that leverage the glossary of terms, and existing artifacts will get benefits immediately from the reduction in ambiguity.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Glossary+of+Terms+http%3A%2F%2Fbit.ly%2FfkrH1j+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/10/29/glossary-of-terms/&amp;t=Glossary+of+Terms" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/10/29/glossary-of-terms/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Global Processes and Business Rules</title>
		<link>http://tynerblain.com/blog/2007/09/25/global-processes-and-business-rules/</link>
		<comments>http://tynerblain.com/blog/2007/09/25/global-processes-and-business-rules/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 03:55:05 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Process Modeling]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[global business requirements]]></category>
		<category><![CDATA[global requirements]]></category>
		<category><![CDATA[managing data]]></category>

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

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Global+Processes+and+Business+Rules+http%3A%2F%2Fbit.ly%2FfBAIrB+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/09/25/global-processes-and-business-rules/&amp;t=Global+Processes+and+Business+Rules" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/09/25/global-processes-and-business-rules/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>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, we have [...]]]></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>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Elicitation+Techniques+for+Processes%2C+Rules%2C+and+Requirements+http%3A%2F%2Fbit.ly%2Fi1QhLK+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/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/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/09/13/elicitation-techniques-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Why Separate Rules from Requirements</title>
		<link>http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/</link>
		<comments>http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 03:41:47 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[rules and requirements]]></category>
		<category><![CDATA[rules documentation]]></category>
		<category><![CDATA[volatile rules]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F09%2F11%2Fwhy-separate-rules-from-requirements%2F", "style": "big", "title": "Why Separate Rules from Requirements" }); Separation of business rules from requirements is a good thing. Not because of semantic distinctions, but because it allows you to write better software, write it faster, and change it more easily. This article is a response to an excellent comment on our [...]]]></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%252F11%252Fwhy-separate-rules-from-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Why%20Separate%20Rules%20from%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F09%2F11%2Fwhy-separate-rules-from-requirements%2F", "style": "big", "title": "Why Separate Rules from Requirements" });</script></div>
<p><img alt="separate but equal" title="separate but equal" src="http://sehlhorst.smugmug.com/photos/194567140-M.jpg" /></p>
<p>Separation of business rules from requirements is a good thing.  Not because of semantic distinctions, but because it allows you to write better software, write it faster, and change it more easily.  This article is a response to an excellent comment on our recent article about <a title="business rules hidden in use cases" href="http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/">hidden business rules</a>.  Thanks for challenging the idea &#8211; it either eliminates it from discourse or makes it stronger, and we all benefit.  Here&#8217;s an attempt to make it stronger.</p>
<p><span id="more-568"></span></p>
<h3>Goals of Separating Rules from Requirements</h3>
<p>Writing software ultimately involves coding up an implementation that both satisfies the goals of the customers and enforces the rules by which that customer chooses to achieve the goals.  This is the traditional way to write software &#8211; define the goals, and all of the enhancing, constraining, and clarifying details, then implement it.  There are some inefficiencies to this approach, but they are in the &#8220;getting great at writing software&#8221; bucket, not the &#8220;avoiding failure at writing software&#8221; bucket.  Consider this the <em>medium priority </em>goal of separating rules from requirements.  In a Kano analysis, this is a <em>more-is-better</em> benefit.</p>
<p>When we set out to write software, it is with <em>intent</em>.  That intent encompasses processes, rules, and requirements.  The combination of all of these could be described as a summation of <em>intent</em>.</p>
<p>Maintaining software is expensive.  When you design an implementation, you (should) think about what is likely to change when making your design decisions.  The greater the probability or frequency of change, the easier it should be to make those changes.</p>
<p>Intent changes.  Agile processes start with a premise that even if the <em>true intent</em> were fixed, our understanding of intent would change, as soon as we get what we asked for.  In practice, both our understanding of intent, and the actual intent change over time.  To make the language less cumbersome, for the rest of this article, when I refer to <em>intent</em> it is our understanding of intent &#8211; and changes to intent represent both changes in the true intent, and changes in our understanding of it.</p>
<p>When developers think about <em>software maintenance</em>, they often think about it in terms of bugs and features.  What needs to be fixed, and what needs to be added (or removed)?  To make a significant impact on the cost of maintenance, we have to take that perspective to the next level.  Set aside fixing bugs (where bugs are &#8220;does not work per the requirements&#8221;), and think about the new features.  The new features truly represent new intent.  Or in an agile process, it may be the <em>recently revalidated, previously identified, next most valuable</em> intent.</p>
<p>In both cases, intent is a moving target, and changes in intent drive changes to the existing software.  To minimize the cost of making those changes, our implementation should be structured such that the most common changes are trivial to implement &#8211; ideally, they won&#8217;t even require changes to the code.  When you can change the behavior of an application without recompiling the application, you significantly reduce the effort required to define,develop,test and deploy an update to the application.  And you can also dramatically reduce the time required to make the change.</p>
<p>This is the <em>high priority</em> goal of separating rules from requirements: increase the speed, and decrease the cost of changing software to match changes in intent.  I&#8217;ll say it again in bold.</p>
<p><strong>The primary goal of separating rules from requirements is to increase the speed and decrease the cost of updating software to match changes in intent.</strong></p>
<p>While the cost reduction part of it is nice, it is the speed element that can be the most compelling.  James Taylor and Neil Raden wrote about this in their book, <a title="Smart Enough Systems" href="http://www.smartenoughsystems.com/wp/main"><em>Smart Enough Systems</em></a>.  We accept the premise that abstracting the implementation of <em>volatile</em> rules from the rest of the software provides benefits in speed of delivery on an ongoing basis.  And that is the primary driver for the separation of rules from requirements.  If you don&#8217;t accept that premise, then the only benefit comes from improved documentation style, structure, and standardization &#8211; all somewhat subjective benefits.</p>
<h2>Visualizing The Benefits</h2>
<p>Here&#8217;s a timeline showing the benefit of <em>agility</em> &#8211; being able to deploy and update faster.</p>
<p><img alt="timeline" title="timeline" src="http://sehlhorst.smugmug.com/photos/194677983-M.gif" /></p>
<p>The maroon curve represents &#8220;traditional&#8221; deployment &#8211; where the implementation of volatile rules is no different than the implementation required to support requirements.  It will take longer to deploy initially (but not necessarily much longer), and it will take longer to make changes (when the rules have been changed).  The upward sloping line starts displaying <em>accumulated</em> value as soon as the software is released.  When the next iteration is released, the rate of value accumulation will go up.  There is one iteration displayed in the timeline.</p>
<p>The green curve represents deployment with volatile rules abstracted in the implementation.  This could be as low-tech as implementing field-level validations in a properties file (that is interpreted by the application), or as high-tech as integration with a rules-processing engine or service.  This implementation begins accumulating value a little bit earlier, but at the same rate (keeping prioritization and other factors equivalent).  The first iteration happens more quickly, so the slope of the curve increases earlier.  The length of iteration has been shortened enough that a second iteration can also happen.  This further increases the relative rate of accumulation of value.  The longer this pattern goes on, the greater the disparity.</p>
<h2>Encouraging This Behavior</h2>
<p>Abstracting the rules from the requirements will make it easier for developers to absorb and design for those rules.  Further, once the rules have been separated from the requirements, it is easier to identify which rules are the volatile rules.  And that enables developers to make smart decisions about when to abstract the implementation, and when to embed it.</p>
<p>You could abstract <em>only</em> the volatile rules from the requirements, and leave other rules embedded within the requirements.  There are three good reasons for separating <em>all</em> of the rules from the requirements.</p>
<p>The first reason is one of <a title="consistency in requirements" href="http://tynerblain.com/blog/2006/06/09/big-ten-rules-writing-consistent-requirements/">consistency</a> of documentation, and arguably <a title="well styled requirements" href="http://tynerblain.com/blog/2007/01/05/writing-stylish-requirements/">style</a>.  Your communication will be more effective when consumers of the documents know that <em>all</em> rules are treated in the same way.  If developers have to look in the requirements for some rules, and a table of rules for others, they are more likely to miss something.  Subject matter experts who are validating the rules will also be able to do that job more effectively when they are documented similarly.</p>
<p>The second reason is that by separating all of the rules, you will better be able to identify the ones that are volatile.  You can more easily evaluate the rules as a whole, and formally or informally characterize their frequency and likelihood of change.  The rules for management of available products and the calculation of risk in a portfolio are likely to change frequently.  The rules that represent FAA regulations are likely to change infrequently.  You can better assess this data when dealing with a cohesive set of rules.</p>
<p>The third reason is that separation of the rules will imply to developers that they should at least consider separation of the implementation.  Especially if, in your documentation approach, you identify which rules are volatile.</p>
<h2>Conclusion</h2>
<p>There are differences in rules and requirements.  While the content of how they are used when developing software may be only semantic, there are practical benefits to separating them.  Separation of rules and requirements in a documentation approach will make it easier for your development team to implement solutions that separate volatile rules from the rest of the code.</p>
<p>And this separation will make the software more valuable, more quickly.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Why+Separate+Rules+from+Requirements+http%3A%2F%2Fbit.ly%2FdP5ECH+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/&amp;t=Why+Separate+Rules+from+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>10th International Business Rules Forum</title>
		<link>http://tynerblain.com/blog/2007/09/06/10th-ibrf/</link>
		<comments>http://tynerblain.com/blog/2007/09/06/10th-ibrf/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 13:43:44 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[2007 ibrf]]></category>
		<category><![CDATA[business rules forum 2007]]></category>
		<category><![CDATA[getting it right]]></category>
		<category><![CDATA[ibrf]]></category>
		<category><![CDATA[ibrf 2007]]></category>
		<category><![CDATA[international business rules forum]]></category>
		<category><![CDATA[managing data]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/09/06/10th-ibrf/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F09%2F06%2F10th-ibrf%2F", "style": "big", "title": "10th International Business Rules Forum" }); The 10th International Business Rules Forum is coming up fast in October 2007. Scott Sehlhorst and James Taylor will be presenting Getting it Right. Rules and Requirements in Software on Thursday at the conference. The articles on rules and requirements that he and [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2007%252F09%252F06%252F10th-ibrf%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%2210th%20International%20Business%20Rules%20Forum%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F09%2F06%2F10th-ibrf%2F", "style": "big", "title": "10th International Business Rules Forum" });</script></div>
<p><img title="ibrf registration logo" alt="ibrf registration logo" src="http://sehlhorst.smugmug.com/photos/192325743-M.jpg" /></p>
<p>The 10th International Business Rules Forum is coming up fast in October 2007.  Scott Sehlhorst and James Taylor will be presenting <em>Getting it Right.  Rules and Requirements in Software</em> on Thursday at the conference.  The articles on rules and requirements that he and I have been publishing on our blogs for the last few months are leading to this presentation.  The IBRF has graciously offered a 10% registration discount code to readers of Tyner Blain.  Read on to get it.</p>
<p><span id="more-566"></span></p>
<h2>Getting It Right</h2>
<p>James and I have been exploring ways to write about the <a title="decisions within processes" href="http://tynerblain.com/blog/2007/07/10/rules-and-requirements-early-thoughts/">interplay of rules and requirements</a> for a few months.  When you develop software for a single company, you start by gathering &#8220;requirements.&#8221;  What you gather ends up being both requirements and rules.  And there is value in <a title="business rules in use cases" href="http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/">teasing the two apart</a>, <a title="separating rules from requirements" href="http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/">managing them separately</a>, and <a title="smart enough systems" href="http://tynerblain.com/blog/2007/06/25/smart-enough-systems/">implementing them separately</a>.  Our presentation addresses this distinction, and some benefits and means of separating the two.</p>
<p>When you are creating &#8220;multi-customer&#8221; software, you need to be just as aware of rules vs. requirements, because you need a plan for allowing different customers to incorporate their (specific) rules with market-driven requirements.  And for some applications, there are rules based on industry standards and regulations.  You will benefit from abstracting these from your core requirements (and implementation), making you more agile than your competitors when responding to changes in those rules.</p>
<p>While geared more towards business analysts (because single-company development is more rule-centric), there&#8217;s value for product managers as well &#8211; admittedly more for companies selling enterprise software.  Our presentation is on <a title="thursday conference schedule" href="http://www.businessrulesforum.com/conf_schedule_full.php#Thursday">Thursday Oct 25th</a>. James is also presenting <em>Business Rules, Decision Management and Smarter Systems</em>, with Neil Raden.</p>
<p>Here are the abstracts of our presentations:</p>
<ul>
<li><a title="abstract for james and scott" href="http://www.businessrulesforum.com/abstracts.php?id=228">Getting It Right.  Rules and Requirements in Software</a></li>
<li><a title="abstract for james and neil" href="http://www.businessrulesforum.com/abstracts.php?id=153">Business Rules, Decision Management and Smarter Systems</a></li>
</ul>
<p>You can get the <a title="IBRF brochure" href="http://www.businessrulesforum.com/2007_BRForum_Brochure.pdf">full schedule &#038; abstracts (and printable registration) in this pdf</a>.</p>
<h2>Registration</h2>
<p>You can <a title="IBRF Registration" href="http://www.businessrulesforum.com/register.php">register for the conference here (or by phone, fax or mail)</a>.</p>
<p><img title="promo code" alt="promo code" src="http://sehlhorst.smugmug.com/photos/192325261-M.jpg" /></p>
<p>When you register, be sure to include the promotional code from Tyner Blain &#8211; <strong>7PGRSP</strong> &#8211; getting you 10% off registration [Note: we do not get any referral fees or anything].  If you do sign up, or if you are already registered, send me a note (<a title="about scott sehlhorst" href="http://tynerblain.com/blog/about-the-author/">email at the bottom of the page</a>) &#8211; it would be great to meet up with readers while at the conference.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+10th+International+Business+Rules+Forum+http%3A%2F%2Fbit.ly%2FgzbaW4+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/09/06/10th-ibrf/&amp;t=10th+International+Business+Rules+Forum" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/09/06/10th-ibrf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Business Rules Hidden in Use Cases</title>
		<link>http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/</link>
		<comments>http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 04:30:16 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[alternate flow]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[exception flow]]></category>
		<category><![CDATA[hidden business rules]]></category>
		<category><![CDATA[hidden rules]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[normal flow]]></category>
		<category><![CDATA[preconditions]]></category>
		<category><![CDATA[triggers]]></category>
		<category><![CDATA[use cases]]></category>

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

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Business+Rules+Hidden+in+Use+Cases+http%3A%2F%2Fbit.ly%2FhBGaIf+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/&amp;t=Business+Rules+Hidden+in+Use+Cases" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/09/03/business-rules-and-use-cases/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Use Case Example With Business Rules</title>
		<link>http://tynerblain.com/blog/2007/07/16/use-case-example-with-business-rules/</link>
		<comments>http://tynerblain.com/blog/2007/07/16/use-case-example-with-business-rules/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 05:31:34 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[business rules and use cases]]></category>
		<category><![CDATA[edm]]></category>
		<category><![CDATA[embedded business rules]]></category>
		<category><![CDATA[embedded decisions]]></category>
		<category><![CDATA[embedded rules]]></category>
		<category><![CDATA[implicit decisions]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[use case rules]]></category>
		<category><![CDATA[use cases]]></category>

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

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Use+Case+Example+With+Business+Rules+http%3A%2F%2Fbit.ly%2FfdiB3Q+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/07/16/use-case-example-with-business-rules/&amp;t=Use+Case+Example+With+Business+Rules" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/07/16/use-case-example-with-business-rules/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Separating Business Rules From Requirements Increases Agility</title>
		<link>http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/</link>
		<comments>http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/#comments</comments>
		<pubDate>Fri, 13 Jul 2007 05:56:47 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Business Rules]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[business rules management]]></category>
		<category><![CDATA[decisions]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[requirements management]]></category>
		<category><![CDATA[rules management]]></category>
		<category><![CDATA[smart enough systems]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F07%2F12%2Fbusiness-rules-yield-agility%2F", "style": "big", "title": "Separating Business Rules From Requirements Increases Agility" }); We&#8217;ve written in the past about why it is important to gather and manage requirements. In short, you avoid some costly mistakes, and fix others before they become too expensive. We&#8217;ve also started exploring how business requirements and business rules live [...]]]></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%252F07%252F12%252Fbusiness-rules-yield-agility%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Separating%20Business%20Rules%20From%20Requirements%20Increases%20Agility%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F07%2F12%2Fbusiness-rules-yield-agility%2F", "style": "big", "title": "Separating Business Rules From Requirements Increases Agility" });</script></div>
<p><img title="mixing chips" alt="mixing chips" src="http://sehlhorst.smugmug.com/photos/172413480-M.jpg" /></p>
<p>We&#8217;ve written in the past about <a title="Why manage requirements?" href="http://tynerblain.com/blog/2005/12/28/why-we-should-invest-in-requirements-management/">why it is important to gather and manage requirements</a>.  In short, you avoid some costly mistakes, and fix others before they become too expensive.  We&#8217;ve also started <a title="business rules and business requirements" href="http://tynerblain.com/blog/2007/07/10/rules-and-requirements-early-thoughts/">exploring how business requirements and business rules live and play together</a>.  But why should we bother to separate business rules from requirements?  One reason is to increase your company&#8217;s agility.<br />
<span id="more-538"></span></p>
<h2>Benefits of Separating Business Rules</h2>
<p>There are some significant benefits to separating business rules from requirements, and we learn many of them in <a title="james taylor interview" href="http://tynerblain.com/blog/2007/06/25/smart-enough-systems/">our interview with James Taylor</a> from a couple weeks ago.  James&#8217; new book, <a title="mart enough systems" href="http://www.phptr.com/bookstore/product.asp?isbn=0132347962&#038;rl=1"><em>Smart (Enough) Systems</em></a>, focuses on the benefits of automating decisions, but some of those benefits can be achieved to a lesser extent, just by isolating the business rules that would then ideally be automated.  The main benefit that comes to mind is the increased agility of the company when it comes to changing their rules and processes.  By isolating the business rules, they become easier to change and manage.</p>
<p>David Wright recently wrote an article at RQNG titled <a title="the business rules approach" href="http://www.requirementsnetwork.com/node/754"><em>The Business Rules Approach</em></a>.  In it, he also points to the speed with which a company can change rules &#8211; not only as a benefit of managing business rules separately, but as a need to adapt and respond to today&#8217;s markets.</p>
<h2>How Is Agility Increased?</h2>
<p>There are two main ways in which agility is increased when separating business rules from requirements.  First, the requirements management process will take less time.  Second, the company can implement changes to their solution more quickly.</p>
<h2>Less Time Managing Requirements</h2>
<p>One best practice in writing requirements is to write <a title="Writing concise requirements" href="http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/"><em>concise</em> requirements</a>.  You can&#8217;t just write the requirements with fewer words &#8211; that might lead to <a title="Writing Unambiguous Requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">ambiguity</a>.  But you can dramatically simplify the writing, reviewing, and interpreting of requirements by isolating the business rules that represent decisions within a requirements document.</p>
<p>As an example, a process flow might include a decision &#8211; &#8220;Do we have the needed paperwork to approve the loan?&#8221;  And that decision might represent a series of rules:</p>
<ul>
<li>If the applicant&#8217;s credit rating is above 700, we only need a valid driver&#8217;s license and SSN.</li>
<li>If the applicant&#8217;s credit rating is between 600 and 700, we need a recent credit check, driver&#8217;s license, and SSN.</li>
<li>If the applicant&#8217;s credit rating is below 600, we need a cosigner on the loan.</li>
<li>If a co-signer is required, the co-signer&#8217;s credit rating must be above 600.</li>
<li>If the applicant&#8217;s credit rating is below 600, we must run a new credit check, and have a valid driver&#8217;s license and SSN.</li>
<li>If the co-signer&#8217;s credit rating is below 700, we must have a recent credit check for the co-signer, as well as a valid driver&#8217;s license and SSN.</li>
<li>If the co-signer&#8217;s credit rating is above 700, we only need a valid driver&#8217;s license and SSN for the co-signer.</li>
<li>If a recent (within 6 months of application date) is not available, a new one must be run.</li>
</ul>
<p>In a process flow diagram, we <em>could</em> create a series of decision boxes &#8211; always requiring the applicant&#8217;s SSN and driver&#8217;s license, sometimes requiring a credit check (and some of those times requiring the credit check to be new), and sometimes requiring a co-signer.  We would then have more branches for the co-signer.</p>
<p>This flow diagram would be pretty complicated.  This can be simplified by embedding a <a title="Decision Tree" href="http://requirements.seilevel.com/blog/2006/01/requirements-model-2-decision-tree.html">decision tree</a> into the requirements documents.  However, you still are applying the (potentially) heavyweight requirements approval and validation process to this decision tree.  You are also asking your developers to review this decision tree and determine how to implement it.  A great developer will see when it makes sense to abstract these decisions from the code, and a less-great developer will embed them.  In either situation, you&#8217;re asking your developer to spend time thinking about this abstraction &#8211; and thinking about how mutable the particular decisions are.</p>
<p>As an analyst, you are better informed about the mutability of the decisions.  By documenting the decision as a single decision in the requirements document (&#8220;Do we have the needed paperwork?&#8221;) that references the enumerated business rules.  It is also easier to review the rules and validate them when they are isolated.  Business people who don&#8217;t have backgrounds designing software do find it easier to review these steps when presented in the context of a decision &#8211; and it is easier to grab the context of the decision from a simpler process flow diagram.</p>
<h2>Less Effort To Change</h2>
<p>Even if you don&#8217;t automate the decision, you still make it much easier to review changes.  If the thresholds change from 700 and 600 to 650 and 550, it is trivial to update the isolated business rules.  It is also an easier process to approve those changes when you are only updating and reviewing the business rules &#8211; and not a broader requirements document.</p>
<p>Developers abstract &#8220;magic numbers&#8221; like 700 and 600 (in this example) into variables and constants when they embed them into code.  We are doing the same thing by isolating the business rules from the requirements (which then reference the rules).</p>
<p>What about changes that are more structural in nature?  Imagine that we redefine the criteria &#8211; eliminating the 700+ rules, and changing the 600 rule to 650 &#8211; and always require a new credit check for co-signers.  Then we also decide to add a new document &#8211; say proof of residence, or proof of employment.  If we were managing this within our requirements document, it would take extra time to validate &#8211; and possibly re-implement the solution.  With a solution like James proposes in his book, the business analyst could make the changes directly into the rules-processing engine and the software would not even need to be modified.  In either case, the approval and change process is faster.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Separating+Business+Rules+From+Requirements+Increases+Agility+http%3A%2F%2Fbit.ly%2Fhf0LAW+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/&amp;t=Separating+Business+Rules+From+Requirements+Increases+Agility" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

