<?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; Software requirements specification</title>
	<atom:link href="http://tynerblain.com/blog/category/requirements/requirements-models/specs/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>Atomic Requirements</title>
		<link>http://tynerblain.com/blog/2010/09/14/atomic-requirements/</link>
		<comments>http://tynerblain.com/blog/2010/09/14/atomic-requirements/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 15:35:25 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Ishikawa Diagram]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[writing atomic requirements]]></category>
		<category><![CDATA[writing good requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1315</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F09%2F14%2Fatomic-requirements%2F", "shorturl": "http://bit.ly/9OCVmS", "style": "big", "title": "Atomic Requirements" }); Each requirement you write represents a single market need, that you either satisfy or fail to satisfy.  A well written requirement is independently deliverable and represents an incremental increase in the value of your software.  That is the definition of an atomic requirement.  Read [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2010%252F09%252F14%252Fatomic-requirements%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9OCVmS%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Atomic%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2010%2F09%2F14%2Fatomic-requirements%2F", "shorturl": "http://bit.ly/9OCVmS", "style": "big", "title": "Atomic Requirements" });</script></div>
<p><img class="alignnone" title="Rules of Requirements Logo #9" src="http://sehlhorst.smugmug.com/photos/128628670-M.png" alt="" width="250" height="250" /></p>
<p>Each requirement you write represents a single market need, that you either satisfy or fail to satisfy.  A well written requirement is independently deliverable and represents an incremental increase in the value of your software.  That is the definition of an atomic requirement.  Read on to see why atomic requirements are important.</p>
<p><span id="more-1315"></span></p>
<h2>Atomic Requirements &#8211; Revisiting</h2>
<p><img class="alignnone" title="atomic" src="http://sehlhorst.smugmug.com/Other/blog/atom/1005966203_AFtcP-O.jpg" alt="" width="250" height="187" /></p>
<p>As part of the ongoing series, <a title="Rules of Writing Good Requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">Writing Good Requirements &#8211; The Big Ten Rules</a>, I wrote about the <a title="Writing atomic requirements" href="http://tynerblain.com/blog/2006/06/14/writing-atomic-requirements/">importance of atomic requirements</a> first in 2006.  That article touched on only one aspect of atomic requirements &#8211; being able to ask &#8220;is it done?&#8221;</p>
<p>Writing atomic requirements is important from two perspectives &#8211; delivering value to your customers, and operating efficiently.  You get benefits both operationally, and in how you are delivering value when you write atomic requirements.</p>
<h2>Atomic Requirements Accelerate Value Delivery</h2>
<p>In a recent article, I proposed <a title="splitting user stories while maintaining atomicity" href="http://tynerblain.com/blog/2010/09/08/sprint-backlog-splitting-user-stories/">methods for splitting user stories when they are too large</a> to be delivered <a title="Inside a Scrum sprint - foundation series" href="http://tynerblain.com/blog/2010/08/24/inside-a-scrum-sprint/">within a single Scrum sprint</a>.  That article looked at ways to break up <a title="Writing Complete User Stories" href="http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories/">complete user stories</a> (an agile requirement artifact, <a title="Comparing user stories and use cases" href="http://tynerblain.com/blog/2009/02/02/user-stories-and-use-cases/">similar to a use case</a>) that were <em>already</em> atomic, making them even smaller.  Think of that article as <em>Atomic Requirements 301</em> &#8211; sort of an advanced class on splitting the atom.  There are opportunities to subdivide <em>molecular</em> requirements &#8211; those made up of multiple <em>atomic</em> goals &#8211; the topic of this article, which would be <em>Atomic Requirements 101</em>.</p>
<p>If you&#8217;re using an agile development process like Scrum, consider a user story like the following:</p>
<ul>
<li>As an online shopper, I need to find and compare similar products, a few times a year, so that I can make an informed purchasing decision.</li>
</ul>
<p>The key element, from an atomicity perspective, is <em>find and compare</em>.  These are actually discrete user goals, although it may not be immediately obvious.  Rewriting as follows, will highlight this:</p>
<ul>
<li>As an online shopper, I need to find products and compare similar products, a few times a year, so that I can make an informed purchase.</li>
</ul>
<p>Rewritten like this, <em>find products</em> and <em>compare similar products</em> are clearly different activities supporting different user goals.  They should be split into separate, atomic user stories.</p>
<ol>
<li>As an online shopper, I need to find products, a few times a year, so that I can purchase desired products.</li>
<li>As an online shopper, I need to compare similar products when shopping online, so that I can make an informed purchase.</li>
</ol>
<ul> </ul>
<p>These two user stories can be delivered separately.  If this example were for B2B (business-to-business) eCommerce, the example would be different &#8211; because the online shopper is (often) not the right persona.  A typical situation in B2B is that one person will do the research to determine <em>what to buy</em>, and another person will make the decision of <em>from whom to buy it</em>.</p>
<p>This rule applies for non-agile requirements development as well &#8211; consider the following &#8220;BRD-style&#8221; requirement example:</p>
<ul>
<li>The system must record all purchases and submit them to the fulfillment system for processing.</li>
</ul>
<p>Recording purchases and submitting them for processing are two different activities.  While they likely support the same goal, they may also support different goals and could be implemented separately.  Recording purchases is important not only for fulfillment, but potentially also for analytics.  Pushing data to a fulfillment system can be done in either a manual or automated fashion &#8211; providing a distinct cost-reduction opportunity.  To write these as atomic requirements, they must be separated.</p>
<ol>
<li>The system must record all purchases.</li>
<li>The system must submit all recorded purchases to the fulfillment system for processing.</li>
</ol>
<p>This example shows only the bare bones &#8211; there is more involved in writing either requirement, particularly around defining the n<a title="Non-functional requirements" href="http://tynerblain.com/blog/2006/05/23/non-functional-requirements-era/">on-functional requirements</a> and <a title="separating business rules increases agility" href="http://tynerblain.com/blog/2007/07/12/business-rules-yield-agility/">business rules</a> (see also: <a title="separating rules from requirements" href="http://tynerblain.com/blog/2007/09/11/why-separate-rules-from-requirements/">why you benefit when you separate rules from requirements</a>, and <a title="The difference between business rules and business requirements" href="http://tynerblain.com/blog/2006/10/18/business-rules-and-requirements/">the difference between business rules and business requirements</a>) that affect and constrain each requirement.  This is easier to see when the requirements are atomic. These two atomic requirements may be rewritten as follows:</p>
<ol>
<li>The system must record all purchases on the same day that they are created, recording information per [BR117: Purchase Data Rules].</li>
<li>The system must submit all recorded purchases to the fulfillment system for processing per [BR231: Fulfillment System Data Interchange Specification].</li>
</ol>
<p>These additional constraints are not non-atomic additional requirements, they are constraints that specify <em>how</em> the system must perform the atomic actions.</p>
<p><img class="alignnone" title="connected atoms - representing requirements traceability" src="http://sehlhorst.smugmug.com/Other/blog/connected-atoms/1005966204_i6K49-O.jpg" alt="" width="250" height="187" /></p>
<p>The previous examples allude to another key benefit of atomicity &#8211; clean traceability.  Each requirement (or user story) exists to support one or more goals.  Requirements traceability can get complex, when many goals are dependent upon multiple requirements to be realized and many requirements enable multiple goals.  This approach to representing <a title="Goal decomposition with Ishikawa diagrams" href="http://tynerblain.com/blog/2008/05/27/cause-and-effect-diagrams/">goal-decomposition</a> (or <a title="user story decomposition" href="http://tynerblain.com/blog/2007/06/27/benefits-of-agile-stories/">user story decomposition</a>) is critical to assuring that you are <a title="Writing Valuable Requirements" href="http://tynerblain.com/blog/2009/07/29/valuable-requirements/">writing valuable requirements</a>.</p>
<p>The simple version of traceability can be visualized with this <a title="structured requirements introduction" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">view of structured requirements</a>, presenting (and slightly extending) some of <a title="Process Impact - Karl Wiegers" href="http://www.processimpact.com/">Karl Wiegers&#8217; work</a> on requirements.  If you&#8217;re doing any work in requirements of any kind, you need to read Karl&#8217;s stuff &#8211; his <em><a title="Software Requirements, Karl Wiegers" href="http://www.amazon.com/dp/0735618798?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0735618798&amp;creative=373489&amp;camp=211189">Software Requirements</a></em> is a must-have.</p>
<p><img class="alignnone" title="requirements structure" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" alt="" width="567" height="450" /></p>
<p>This diagram makes it seem pretty straightforward.  Where it gets messy is when the multi-goal-per-requirement and multi-requirement-per-goal dependencies (that always exist) turn it from a simple tree into a complex graph.  Non-atomic requirements make that graph messier (a hassle, but not a problem)as each &#8220;requirement that is really multiple requirements&#8221; ads extra dependency relationships to your traceability model.  This becomes a <em>problem</em>, however, when you need to change.</p>
<p>Every project has implementation tasks that take longer than originally expected.  Using a t<a title="timeboxes for scheduling" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">ime-box approach to managing the content of each release</a> gives you a straightforward framework for determining how much stuff will be delivered in each release.  When you have to slip something, you have to revisit prioritization.  With well-defined requirements, each valuable requirement that could be delivered provides value by enabling users (or systems as users) to achieve a goal.  When you have to delay the implementation of a requirement, you delay the goals that it supports.</p>
<p>As soon as you realize you are considering delaying <em>part of a requirement</em>, that is a red flag that your requirement is not atomic.</p>
<p><strong>Atomic Requirements Simplify Operations</strong></p>
<p>Atomic requirements allow you to make these on-the-fly prioritization decisions with <em>much better insight</em> into the resultant delay in value.  This allows you to better manage communication with your stakeholders &#8211; validating that you are delaying the realization of the right goals.</p>
<p>The same benefits apply when originally planning your software iterations and releases.  Conceptually, you can imagine &#8220;scheduling&#8221; <em>everything</em> for the first release, immediately discovering that <em>most things</em> need to slip to future releases.  That&#8217;s how most* software projects really play out.</p>
<p>*There are times when you intentionally delay particular capabilities, based on external factors &#8211; market positioning, customer-adoption cadences, sales-team capacity (to absorb change), etc.</p>
<h2>Conclusion</h2>
<p><strong>Writing atomic requirements helps you</strong></p>
<ul>
<li>Organize and describe <em>why</em> you are asking the team to build what they are building, and <em>how</em> stakeholders will benefit from what will be built.</li>
<li>Understand the <em>assignable value</em> of each requirement by maximizing clarity in the dependency tree &#8211; each requirement is in place for specific reasons.</li>
<li>Communicate the relevance of each requirement to the implementation team &#8211; informing cost-benefit discussions around the inevitable schedule-change discussions.</li>
<li>Test the deliverables &#8211; atomic requirements get graded as pass-fail, not &#8220;X% working.&#8221;</li>
</ul>
<p>Attributions:</p>
<ul>
<li>Thanks <a title="Clix on sxc" href="http://www.sxc.hu/profile/clix">clix </a>for both &#8220;atomic&#8221; photos!</li>
</ul>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Atomic+Requirements+http%3A%2F%2Fbit.ly%2F9OCVmS+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2010/09/14/atomic-requirements/&amp;t=Atomic+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2010/09/14/atomic-requirements/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>SRS Plan of Attack</title>
		<link>http://tynerblain.com/blog/2008/02/06/srs-plan-of-attack/</link>
		<comments>http://tynerblain.com/blog/2008/02/06/srs-plan-of-attack/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 03:51:18 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[actor hierarchy]]></category>
		<category><![CDATA[brd]]></category>
		<category><![CDATA[enterprise requirements]]></category>
		<category><![CDATA[enterprise software requirements]]></category>
		<category><![CDATA[estimation]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[scoping]]></category>
		<category><![CDATA[software requirements specification]]></category>
		<category><![CDATA[SRS]]></category>

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

<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+SRS+Plan+of+Attack+http%3A%2F%2Fbit.ly%2Ff4embr+" 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/02/06/srs-plan-of-attack/&amp;t=SRS+Plan+of+Attack" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/02/06/srs-plan-of-attack/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Requirements Details &#8211; How Much is Enough?</title>
		<link>http://tynerblain.com/blog/2007/08/23/requirements-details/</link>
		<comments>http://tynerblain.com/blog/2007/08/23/requirements-details/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 02:44:57 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[business requirements]]></category>
		<category><![CDATA[concise requirements]]></category>
		<category><![CDATA[functional requirements]]></category>
		<category><![CDATA[level of detail for requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[non-functional requirements]]></category>
		<category><![CDATA[requirements details]]></category>
		<category><![CDATA[requirements level of detail]]></category>

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

<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+Requirements+Details+%E2%80%93+How+Much+is+Enough%3F+http%3A%2F%2Fbit.ly%2FfkBjUC+" 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/08/23/requirements-details/&amp;t=Requirements+Details+%E2%80%93+How+Much+is+Enough%3F" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/08/23/requirements-details/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ignoring The Requirements, Watching The Discussion</title>
		<link>http://tynerblain.com/blog/2007/07/17/ignoring-requirements-take-two/</link>
		<comments>http://tynerblain.com/blog/2007/07/17/ignoring-requirements-take-two/#comments</comments>
		<pubDate>Wed, 18 Jul 2007 05:00:49 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[requirements specification]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/07/17/ignoring-requirements-take-two/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F07%2F17%2Fignoring-requirements-take-two%2F", "style": "big", "title": "Ignoring The Requirements, Watching The Discussion" }); Almost a month ago, we published an article titled Broken Requirements Ecosystem. That article built on a discussion thread at Seilevel. Since that time, the original thread has grown, and a new one has been spawned at the Catalyze site. In short, [...]]]></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%252F17%252Fignoring-requirements-take-two%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Ignoring%20The%20Requirements%2C%20Watching%20The%20Discussion%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F07%2F17%2Fignoring-requirements-take-two%2F", "style": "big", "title": "Ignoring The Requirements, Watching The Discussion" });</script></div>
<p><img alt="recycle" title="recycle" src="http://sehlhorst.smugmug.com/photos/174257363-M.jpg" /></p>
<p>Almost a month ago, we published an article titled <em>Broken Requirements Ecosystem</em>.  That article built on a discussion thread at Seilevel.  Since that time, the original thread has grown, and a new one has been spawned at the Catalyze site.</p>
<p>In short, the question was asked on the Seilevel forum- why are specs sometimes ignored by developers, and four possible reasons were suggested.  We followed up with our view, and the discussion picked up again, this time at Catalyze.</p>
<ul />
<ol>
<li>Original discussion thread on Seilevel&#8217;s forum: <a title="original thread" href="http://requirements.seilevel.com/messageboard/showthread.php?t=577">Reasons Reqs Go Unread</a> (Discussion from 19 Jun to 26 Jun )</li>
<li>Article at Tyner Blain: <a title="requirements management problems" href="http://tynerblain.com/blog/2007/06/21/broken-requirements-ecosystem/"><em>Broken Requirements Ecosystem</em></a> (Written on 21 Jun, Discussion to 26 Jun)</li>
<li>Thread spawned on the Catalyze forum: <a title="additional thread" href="http://www.mycatalyze.org/Forums/tabid/869/forumid/185/tpage/1/view/topic/postid/1523/Default.aspx#1523">Broken Requirements Ecosystem</a> (Discussion from 23 Jun to 15 Jul)</li>
</ol>
<ul />Note &#8211; the dates above for each article/forum-post are as of right now.  People have submitted 23 comments across the articles, showing a lot of good insight from many different perspectives.  Developers, product managers, project managers, stakeholders &#8211; lots of great comments!</p>
<p>Even if you read our article before, go back and follow the discussions again &#8211; starting with Seilevel&#8217;s article, and progressing to ours, following up with the conversation at Catalyze.</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+Ignoring+The+Requirements%2C+Watching+The+Discussion+http%3A%2F%2Fbit.ly%2FgfAbcI+" 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/17/ignoring-requirements-take-two/&amp;t=Ignoring+The+Requirements%2C+Watching+The+Discussion" 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/17/ignoring-requirements-take-two/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Broken Requirements Ecosystem</title>
		<link>http://tynerblain.com/blog/2007/06/21/broken-requirements-ecosystem/</link>
		<comments>http://tynerblain.com/blog/2007/06/21/broken-requirements-ecosystem/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 04:13:00 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[importance of requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[reading requirements]]></category>
		<category><![CDATA[writing good requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/06/21/broken-requirements-ecosystem/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F06%2F21%2Fbroken-requirements-ecosystem%2F", "style": "big", "title": "Broken Requirements Ecosystem" }); There&#8217;s an interesting thread on Seilevel&#8217;s requirements forum about why developers don&#8217;t read the specs and how to fix this problem. Sometimes the developers throw away the requirements. And that&#8217;s bad. But it is a symptom. Something is broken at a higher level. The Forum [...]]]></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%252F06%252F21%252Fbroken-requirements-ecosystem%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Broken%20Requirements%20Ecosystem%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F06%2F21%2Fbroken-requirements-ecosystem%2F", "style": "big", "title": "Broken Requirements Ecosystem" });</script></div>
<p><img title="throwing away" alt="throwing away" src="http://sehlhorst.smugmug.com/photos/165393507-M.jpg" /></p>
<p>There&#8217;s an <a title="forum discussion" href="http://requirements.seilevel.com/messageboard/showthread.php?t=577">interesting thread</a> on Seilevel&#8217;s requirements forum about why developers don&#8217;t read the specs and how to fix this problem. Sometimes the developers throw away the requirements.  And that&#8217;s bad.  But it is a symptom.  Something is broken at a higher level.<br />
<span id="more-523"></span></p>
<h2>The Forum Conversation</h2>
<p>In short, <a title="forum conversation" href="http://requirements.seilevel.com/messageboard/showthread.php?t=577">the conversation</a> is asking why <em>some</em> developers don&#8217;t implement code that meets the specifications.  There are several possibilities identified in the discussion:</p>
<ul>
<li>The developer is too busy to bother with specifications.</li>
<li>The developer is too smart and knows better than the spec-writer.</li>
<li>The developer doesn&#8217;t understand the specifications.</li>
<li>The developer pre-judges that the specifications are probably bad.</li>
</ul>
<h2>Why Write Specifications?</h2>
<p>Taking a step back to think about why we write specifications is like trying to understand what causes the common cold &#8211; instead of trying to prevent symptom X.</p>
<p>The philosophy of <a title="Problem solving" href="http://www.emsstrategies.com/dd020106article.html">the five why&#8217;s</a> is a problem solving approach designed to get to the root of a problem.  We can twist it to force ourselves to look at the bigger picture &#8211; and maybe gain some insight from looking at this discussion in a broader context.</p>
<ol>
<li>Why write specifications?   So that the developers will <a title="Writing in order to be read" href="http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/">know what to build</a> &#8211; and testers know what to test.</li>
<li>Why does it matter what the developers build?  So that we can deliver what we promised to our customers.</li>
<li>Why do our customers care what we deliver?  Because we have promised to solve their problems.</li>
<li>Why is solving customer problems important?  Because <a title="corporate goals example" href="http://tynerblain.com/blog/2007/04/19/apr-corporate-goals/">customers have goals</a>, and problems thwart those goals.</li>
<li>Why are customer goals important?  Because customers are in business for a reason &#8211; and those goals are an articulation of that reason.</li>
</ol>
<p>OK &#8211; so we have some context &#8211; we are trying to solve a particular problem (or set of problems) for our customer(s).  To keep the writing simpler, we&#8217;ll talk about one problem / goal for one customer.  But the ideas apply to multiple customers and goals.</p>
<p>Our customer has a strategy (or reason) which drives the creation of a goal.  Our customer chooses to use our software as a means of solving the problem that prevents them from otherwise achieving that goal.  We make choices about how to solve that problem, and articulate that solution approach as a specification.  And our team creates a solution that meets the specification &#8211; and tests to confirm that it meets the specification.</p>
<h2>Software As Fast Food</h2>
<p>Jonathan Babcock wrote a thought-provoking article about how <a title="mcdonalds and quality" href="http://jonathanbabcock.com/2007/06/18/mcdonalds-burgers-and-high-quality-business-analysts/">McDonald&#8217;s is one of the highest quality restaurants</a>.  Without going off on a tangent about fast food, one conclusion we can draw is that McDonald&#8217;s does a fantastic job of implementing according to the specification.  Their employees don&#8217;t ignore the procedures (the spec).  People can debate about the quality of the spec, but you can&#8217;t argue with the execution of the teams in the restaurants.  When I was in Kuala Lumpur a few years ago, the McDonald&#8217;s french fries tasted just like the ones here in Austin, and the ones in Paris, and the ones in Manhattan.  They may even be zealous in how well they follow the spec.</p>
<p>Why don&#8217;t the people working in the restaurant <em>ignore</em> the spec?  Chris the fry cook likes his french fries extra crispy &#8211; crispier than the spec calls for.  He <em>knows</em> they are better this way.  Why doesn&#8217;t he cook them a little bit longer?  The customers would certainly be happier.  Evan is a brand new cashier.  He doesn&#8217;t know that the unsold hamburgers need to be thrown away after an hour of sitting under the heat lamp.  How is it that Evan never gives me a two-hour-old burger?</p>
<p>McDonald&#8217;s has a working Ecosystem.  You may argue that they are addressing the wrong customer goals &#8211; or have chosen a bad approach to meeting those goals.  But you can&#8217;t argue that their execution is bad.  They absolutely follow the spec.</p>
<h2>Why Isn&#8217;t McDonald&#8217;s Ecosystem Broken?</h2>
<p>Do they do an adequate job of training new hires?  Is there sufficient oversight during the <em>orientation</em> period of those new hires?  Do they properly set expectations for the employees?  Do their employees understand the importance of their decisions?  [As a side note - I have been yelled at about french fries when I worked at a restaurant in high school - but it wasn't a McDonald's - it was a 4-store private chain.  A restaurant equivalent of a startup]</p>
<p>Maybe they&#8217;ve automated and constrained the process so much that a monkey could do it.  They have definitely done some of that &#8211; the fry cook no longer <em>eyeballs</em> the amount of french fries to put in each basket &#8211; a robot dispenses the proper amount.  And a timer determines the proper length of time to fry them &#8211; while a thermostat regulates grease temperature.  But you still have to rely on the people to know <em>when</em> to drop the fries to meet demand.  And you have to rely on the people to pull the fries out when the buzzer goes off (according to the spec).  You have to rely on the employees to destroy excess food instead of selling it &#8211; even when that is more convenient.  And do you know a teenager who prefers &#8220;the right way&#8221; to &#8220;the easy way?&#8221;  And yet, it still seems to work.</p>
<p>I believe that the specs are good.  And I suspect that the managers stress and reinforce the importance of following the specs.  And I believe there is sufficient training to assure that people know how to follow the specs.  And when someone doesn&#8217;t know how to do something, there is always someone there to help.  It is a culture of &#8220;ask for help when you need it.&#8221;</p>
<h2>What Can We Learn From McDonald&#8217;s?</h2>
<p>There are two important elements, and they are addressed very differently.  First, it is critical that the specs be good.  <a title="big 12 rules of writing good requirements" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/">Writing good requirements is important</a>.  Second, the culture must be such that people realize that they are required to follow the specs.  How you deal with that will vary from team to team, and person to person.</p>
<p>If you don&#8217;t set the expectation that the specs be followed, why would you expect them to be followed?  And if the specs are bad, that&#8217;s another problem entirely.  But you should encourage people to help you fix the specs &#8211; <em>not</em> ignore them.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Broken+Requirements+Ecosystem+http%3A%2F%2Fbit.ly%2Fecyaz5+" 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/06/21/broken-requirements-ecosystem/&amp;t=Broken+Requirements+Ecosystem" 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/06/21/broken-requirements-ecosystem/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>APR: Mixing It Up With Design And Requirements</title>
		<link>http://tynerblain.com/blog/2007/04/25/apr-mixing-it-up/</link>
		<comments>http://tynerblain.com/blog/2007/04/25/apr-mixing-it-up/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 01:46:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Project: Ratings]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[UML Modeling]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[agile case study]]></category>
		<category><![CDATA[agile project]]></category>
		<category><![CDATA[agile requirements management]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/04/25/apr-mixing-it-up/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F04%2F25%2Fapr-mixing-it-up%2F", "style": "big", "title": "APR: Mixing It Up With Design And Requirements" }); With a definition of the important use cases for our agile project, we can move to the logical next step &#8211; which is what exactly? Prototyping. Depending on which discipline is dominant in the project approach, the next step could [...]]]></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%252F04%252F25%252Fapr-mixing-it-up%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22APR%3A%20Mixing%20It%20Up%20With%20Design%20And%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F04%2F25%2Fapr-mixing-it-up%2F", "style": "big", "title": "APR: Mixing It Up With Design And Requirements" });</script></div>
<p><img alt="prototyping flow" title="prototyping flow" src="http://sehlhorst.smugmug.com/photos/146822363-M.jpg" /><br />
With a definition of the important use cases for our agile project, we can move to the logical next step &#8211; which is what exactly?</p>
<p><strong>Prototyping.</strong></p>
<p><span id="more-475"></span>Depending on which discipline is dominant in the project approach, the next step could be to define the functional requirements  (or specification) that support the use cases.  Or it could be to take  user-centric approach to prototyping interface elements.  Or it could be developing an understanding of the domain model that will drive the behavior of the site.</p>
<h2>Functional Prototyping</h2>
<p>Ruby on Rails (Rails, for short) makes rapid prototyping of the &#8220;under the hood&#8221; stuff appear to be very quick to develop.  And Rails separates the presentation from the logic with a model-view-controller approach to code structure.  From the reading I&#8217;ve done about Rails, the next step needed to get an interactive prototype is to define the representational model.</p>
<p>In the better object oriented programs I&#8217;ve worked on in the past, the underlying representation matches the user&#8217;s conceptual model as well as possible.  This will be challenging to not confuse the two and expose the implementation to the users.  I&#8217;m not sure what differences will exist between them, we&#8217;ll see when we explore this.  Creating a UML static diagram of both will help.</p>
<h2>UI Prototyping</h2>
<p>Creating some mockups of the user interface and documenting some design elements and interaction ideas will help here.  I started that process last night and have the first initial thoughts drawn on paper.  I will scan those in and post them as paper prototypes.</p>
<h2>Documenting Requirements</h2>
<p>If we were using a purely structured requirements approach, we would create an SRS at this stage. In conjunction with this prototyping approach, we will capture those same requirements.  The requirements will be defined in the context of <a title="Prioritizing Use Cases" href="http://tynerblain.com/blog/2007/04/25/apr-prioritizing-use-cases-1/">the individual use cases that we are focusing on</a> for the first release.  Don&#8217;t forget to vote on the use cases if you haven&#8217;t already.</p>
<h2>Iteration</h2>
<p><img title="Concurrency" alt="Concurrency" src="http://sehlhorst.smugmug.com/photos/146822365-M.png" /></p>
<p>This process will be iterative or concurrent.  The goal is to get enough of an understanding of the design to create an initial prototype.</p>

<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+APR%3A+Mixing+It+Up+With+Design+And+Requirements+http%3A%2F%2Fbit.ly%2FeZ0Bi4+" 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/04/25/apr-mixing-it-up/&amp;t=APR%3A+Mixing+It+Up+With+Design+And+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/04/25/apr-mixing-it-up/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Fifteen Ways to Shut Down</title>
		<link>http://tynerblain.com/blog/2006/11/23/fifteen-ways-to-shut-down/</link>
		<comments>http://tynerblain.com/blog/2006/11/23/fifteen-ways-to-shut-down/#comments</comments>
		<pubDate>Fri, 24 Nov 2006 02:58:08 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[featuritis]]></category>
		<category><![CDATA[ID]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[shutdown]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[windows vista]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/11/23/fifteen-ways-to-shut-down/</guid>
		<description><![CDATA[There are 15 ways for someone to shutdown a laptop running Windows Vista.  This adds unwarranted complexity to our software.  How can we avoid the same problem in our software?]]></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%252F2006%252F11%252F23%252Ffifteen-ways-to-shut-down%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Fifteen%20Ways%20to%20Shut%20Down%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F11%2F23%2Ffifteen-ways-to-shut-down%2F", "style": "big", "title": "Fifteen Ways to Shut Down" });</script></div>
<p><img title="shutdown" alt="shutdown" src="http://sehlhorst.smugmug.com/photos/112338150-M.jpg" /></p>
<p>[Updated Below] There are 15 ways for someone to shutdown a laptop running Windows Vista.  This adds unwarranted complexity to our software.  How can we avoid the same problem in our software?</p>
<p><strong>Hat Tip</strong></p>
<p>Joel (on Software) has an <a title="choice = headache" href="http://www.joelonsoftware.com/items/2006/11/21.html">article where he lambastes</a> the Vista team for providing 9 different ways to <em>stop using</em> the computer.  Add in the hardware options on the laptop (like Fn F3), and closing the screen down or hitting the physical power button, and you get to 15 different ways to shut down.</p>
<blockquote><p>Inevitably, you are going to think of a long list of intelligent, defensible reasons why each of these options is absolutely, positively essential. Don&#8217;t bother. I know. Each additional choice makes complete sense until you find yourself explaining to your uncle that he has to choose between 15 different ways to turn off a laptop.</p>
<p><cite>Joel Spolsky</cite></p></blockquote>
<p><strong>Make <strike>Everybody</strike> Nobody Happy</strong></p>
<p>Joel posits that the unreasonable number has grown out of the desire to make everybody happy.  We know that <a title="Products with too many features" href="http://tynerblain.com/blog/2006/04/14/goldilocks-and-the-three-products/"><em>too many features</em></a> makes everyone unhappy.  This bloated list of choices is just one manifestation of too-many-features, and it doesn&#8217;t make anyone happy.</p>
<p><strong>Inadvertantly Causing The Problem</strong></p>
<p>It is pretty easy to imagine how we might inadvertantly cause this problem.</p>
<p>A <a title="Foundation Series on Structured Requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements</a> approach allows us to track and manage different requirements, as well as the implementation of those requirements.  In Joel&#8217;s example, imagine requirements like the following:</p>
<ul>
<li>User secure the computer in order to walk away from it without other people getting access.</li>
<li>User can shut down the computer such that it will stop consuming power.</li>
<li>The computer will support rapid switching from one user to another.</li>
</ul>
<p>Each requirement could drive an independent solution approach.  As Joel points out, each requirement, evaluated in isolation, may lead to a different solution.  The problem is that we are finding <em>local optima</em>, and not looking at the problems introduced by the complexity of supporting all of these solutions.</p>
<p><strong>Avoiding This Problem</strong></p>
<p>How can we avoid this sort of problem in our own product development?  A holistic view of the proposed solution is required to assess if there are too many features.  <a title="prioritizing" href="http://tynerblain.com/blog/2006/02/17/prioritizing-software-requirements-am-i-hot-or-not/">Prioritization</a> of those features will help us reduce the number to a reasonable level.</p>
<p>Incorporating elements of <a title="ID overview" href="http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/">interaction design</a> into our solution approach may be the best way to do this (short of abandoning a structured requirements approach).</p>
<p><img title="ID and Structure" alt="ID and Structure" src="http://sehlhorst.smugmug.com/photos/61228367-O.png" /></p>
<p>Each of the <em>shutdown scenarios</em> leads to a functional requirement.  Each element of program design leads to one of the many ways to shut down or lock or restart the computer.  Addressing the personal goals of each <a title="creating personas" href="http://tynerblain.com/blog/2006/03/22/how-to-create-personas-for-goal-driven-development/">persona</a> provides us with a cross-feature, holistic perspective.  If our target audience includes Joel&#8217;s uncle, then we can make sure that our design approach accounts for the appropriate level of complexity and choice.</p>
<p><strong>[Update]</strong></p>
<p>Moishe Lettvin, one of the developers on <em>the shutdown team</em> for Vista, formerly at Microsoft, has written an article about the organizational and situational challenges faced by the team.  He titled the article <a title="Windows Shutdown" href="http://www.drizzle.com/~lettvin/2006/11/windows-shutdown-crapfest.html"><em>The Windows Shutdown Crapfest</em></a>.  That should give you a feel for how the now-Googler feels about the experience.  There were 43 people involved, and they spent over a year.  And the source code control system was frightening.  Check out the comment thread on Moishe&#8217;s article too &#8211; it includes comments from other Microsoft and knowledgable anonymous people.  Hat Tip to <a title="Underrated" href="http://scobleizer.com/2006/11/26/vista-underrated/">Scoble</a>.  Also, a <a title="followup" href="http://www.drizzle.com/~lettvin/2006/11/brief-followup-to-yesterdays-post.html">followup</a> from Moishe.<br />
<strong>Summary</strong></p>
<p>Multiple requirements can lead to multiple, locally-optimized solutions or features.  A holistic view needs to be taken to assure that we aren&#8217;t introducing too much complexity with these variations of similar features.  Interaction design gives us a big-picture perspective to make sure we aren&#8217;t making our software too hard for our target users to use.</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+Fifteen+Ways+to+Shut+Down+http%3A%2F%2Fbit.ly%2Ffd4nCi+" 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/2006/11/23/fifteen-ways-to-shut-down/&amp;t=Fifteen+Ways+to+Shut+Down" 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/2006/11/23/fifteen-ways-to-shut-down/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Another Use For &#8216;Why?&#8217;</title>
		<link>http://tynerblain.com/blog/2006/10/24/another-use-for-why/</link>
		<comments>http://tynerblain.com/blog/2006/10/24/another-use-for-why/#comments</comments>
		<pubDate>Wed, 25 Oct 2006 03:35:20 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[asking why]]></category>
		<category><![CDATA[documenting intent]]></category>
		<category><![CDATA[documenting justifications]]></category>
		<category><![CDATA[documenting requirements]]></category>
		<category><![CDATA[justifying requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[requirements intent]]></category>
		<category><![CDATA[requirements justification]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/10/24/another-use-for-why/</guid>
		<description><![CDATA["Why?"  The question is our inspiration and our muse.  "Why?" is the justification for our requirements.  The key to identifying "What?" and "When?", which lead to "How?" and "How Much?"  But there is another use for "Why?" - communication of intent (with stakeholders and implementers).  Requirements documents are artifacts, but they are also dynamic documents.  By documenting "Why?" a requirement is a requirement, we make it easier for future readers to understand.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2006%252F10%252F24%252Fanother-use-for-why%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Another%20Use%20For%20%27Why%3F%27%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F10%2F24%2Fanother-use-for-why%2F", "style": "big", "title": "Another Use For 'Why?'" });</script></div>
<p><img title="Man Asking Why" alt="Man Asking Why" src="http://sehlhorst.smugmug.com/photos/105191131-M.jpg" /></p>
<p>&#8220;<a title="Why ask why?" href="http://tynerblain.com/blog/2005/12/13/everything-i-needed-to-know-i-forgot-in-kindergarden/">Why</a>?&#8221;  The question is our inspiration and our muse.  <a title="Using " href="http://tynerblain.com/blog/2006/02/21/the-reason-why/">&#8220;Why?&#8221; is the justification for our requirements</a>.  The key to <a title="Perpectives on Requirements " href="http://tynerblain.com/blog/2006/05/11/requirements-documents-one-mans-trash/">identifying &#8220;What?&#8221; and &#8220;When?&#8221;</a>, which lead to &#8220;How?&#8221; and &#8220;How Much?&#8221;  But there is another use for &#8220;Why?&#8221; &#8211; communication of intent (with <a title="Communicating with Stakeholders" href="http://tynerblain.com/blog/2006/07/14/communicating-intent-with-stakeholders/">stakeholders</a> and <a title="Communicating with Implementers" href="http://tynerblain.com/blog/2006/07/17/communicating-intent-with-implementers/">implementers</a>).  Requirements documents are artifacts, but they are also dynamic documents.  By documenting &#8220;Why?&#8221; a requirement is a requirement, we make it <a title="Writing for the purpose of reading" href="http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/">easier for future readers</a> to understand.</p>
<p><strong>Meeting Debriefing</strong></p>
<p>I was observing a meeting earlier this week where a member of my team was reviewing a &#8220;finalized&#8221; requirements document.  The requirements in that document were <a title="Requirements gathering tips" href="http://tynerblain.com/blog/2006/01/14/top-five-requirements-gathering-tips/">gathered</a> previously, and validated for both <a title="Writing Correct Requirements" href="http://tynerblain.com/blog/2006/07/10/verify-correct-requirements/">correctness</a> and <a title="Writing Complete Requirements" href="http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/">completeness</a>.  This review, another step in the elicitation process, involved stakeholders who were not involved in previous sessions.  The meeting was not an efficient one.</p>
<p><strong>Inefficiency</strong></p>
<p>Over the course of two hours, the team reviewed and discussed no more than ten requirements.  The project is a <a title="Requirements for Migration Projects" href="http://tynerblain.com/blog/2006/03/09/software-requirements-for-migration-projects/">migration project</a> from a legacy system to a new solution.  There are <a title="Organizing a migration project" href="http://tynerblain.com/blog/2006/03/15/organizing-a-software-migration-project/">minimal process changes</a> in this phase of the project (and therefore the review is looking minimally at process re-engineering).</p>
<p>The following are some of the questions asked by participants in the review:</p>
<ul>
<li>What is the difference between those two [variations of] start dates?</li>
<li>Why do we need that information in the system?</li>
<li>Why can&#8217;t we simplify X to Y?</li>
</ul>
<p>The answers to these questions (each was asked multiple times about most of the requirements that were reviewed) generally involved relatively detailed explanations, hypothetical examples, and occasional diagramming of business object relationships to effectively communicate <em>why</em> the existing requirements had been written, and why they had been written <em>in the way they had been written</em>.</p>
<p><strong>Perception</strong></p>
<p>At the end of the meeting, one of the project sponsors expressed concern that a &#8220;final review&#8221; meeting was so ad-hoc and disorganized.  Our sponsor now has a fear that requirements are being missed, or documented incorrectly.</p>
<p>Anecdotally, there were no significant changes to those requirements as of the end of the meeting.  Why did we have to spend 20 man-hours to make no perceptable changes?</p>
<p>Because we didn&#8217;t document the answers to these questions the first time!</p>
<p><strong>Document Creation</strong></p>
<p>The creation of, and initial validation of the requirements document involved interviews, contextual inquiries, and side-by-side comparisons and gap-analysis with existing process documentation.  The resulting requirements were documented.</p>
<p>All of the questions that were raised in this meeting had been raised in previous sessions.  None of the answers had been included in the documentation.  And the overall project is large enough, and complex enough that people inconsistently remembered or completely forgot the justifications for the requirements.</p>
<p><strong>Documenting Why</strong></p>
<p>Including the justifications, scenarios or examples, snippets of business object models, and other supporting information would have prevented much of the debate.  If we had included the underlying &#8220;Why&#8221; data that drove the &#8220;What&#8221; data (the requirements) in our documentation, we would have avoided rehashing these same issues.</p>
<p>It isn&#8217;t enough to <a title="The reason why" href="http://tynerblain.com/blog/2006/02/21/the-reason-why/">ask why during elicitation</a> &#8211; we have to <a title="Documenting " href="http://tynerblain.com/blog/2006/07/14/communicating-intent-with-stakeholders/">document the justifications</a> along with 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+Another+Use+For+%E2%80%98Why%3F%E2%80%99+http%3A%2F%2Fbit.ly%2Ff5pVQH+" 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/2006/10/24/another-use-for-why/&amp;t=Another+Use+For+%E2%80%98Why%3F%E2%80%99" 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/2006/10/24/another-use-for-why/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Writing For The Purpose of Reading</title>
		<link>http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/</link>
		<comments>http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/#comments</comments>
		<pubDate>Thu, 05 Oct 2006 05:03:36 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[process documentation]]></category>
		<category><![CDATA[requirements documents]]></category>
		<category><![CDATA[requirements management]]></category>
		<category><![CDATA[requirements writing]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/</guid>
		<description><![CDATA[The reason we write is so that someone can read it in the future.  Duh.  When we're writing requirements documents, or documenting processes, how often do we stop and think about who will be reading our documents?  We need to make sure our writing will be easy to read for our audience.]]></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%252F2006%252F10%252F04%252Fwriting-for-the-purpose-of-reading%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20For%20The%20Purpose%20of%20Reading%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F10%2F04%2Fwriting-for-the-purpose-of-reading%2F", "style": "big", "title": "Writing For The Purpose of Reading" });</script></div>
<p><img alt="writing pen" title="writing pen" src="http://sehlhorst.smugmug.com/photos/100127638-M.jpg" /></p>
<p>The reason we write is so that someone can read it in the future.  Duh.  When we&#8217;re writing requirements documents, or documenting processes, how often do we stop and think about <em>who</em> will be reading our documents?  We need to make sure our writing will be easy to read for our audience.</p>
<p><strong>Writing As Marketing</strong></p>
<p>Sam Decker makes a great point about how marketing should use the language of the customer in his <a title="Marketing Bullseye #11" href="http://decker.typepad.com/welcome/2006/09/marketing_bulls_2.html">recent article</a>.  This is actually the 11th in a <a title="Marketing Bullseye series" href="http://decker.typepad.com/welcome/2006/07/new_series_how_.html">great series on marketing</a>, if you aren&#8217;t reading Sam&#8217;s stuff, you should be.</p>
<blockquote><p>Hit the bulls eye by writing in the language of the customer. To use the <strong>same terms, phrases, and straight-forward speak that a customer might use when asking someone else about your solution</strong> (and of course, they probably didn’t use the word ‘solution’)!</p>
<p><cite><a title="Sam's article" href="http://decker.typepad.com/welcome/2006/09/marketing_bulls_2.html">Sam Decker</a></cite></p></blockquote>
<p><strong>Applied To Requirements</strong></p>
<p>Product Managers and others in the &#8220;requirements space&#8221; all create requirements documents.  We create <a title="Document Proliferation" href="http://tynerblain.com/blog/2006/01/20/document-proliferation/">different documents</a> to achieve <a title="Different Perspectives on Different Documents" href="http://tynerblain.com/blog/2006/05/11/requirements-documents-one-mans-trash/">different goals</a>.  It isn&#8217;t enough to <a title="Targeted Communication" href="http://tynerblain.com/blog/2006/04/03/targeted-communication-three-tips/">target our communication</a> <em>content</em> for our audience &#8211; we also have to think about the vocabulary we choose to use.</p>
<p>As <em>requirements people</em>, we tend to be precise in our use of language &#8211; <a title="Writing Unambiguous Requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">avoiding ambiguity</a> at all costs.  When offshoring, or dealing with multi-cultural teams in general, we also have to understand <a title="When No Means Yes" href="http://tynerblain.com/blog/2005/12/11/when-%e2%80%98no%e2%80%99-means-%e2%80%98yes%e2%80%99/">when terms have different meanings</a> for different people.  We also have to watch out for terms that have <a title="Symbolism and Communication" href="http://tynerblain.com/blog/2006/02/12/symbolism-and-communication/">symbolic meaning</a>, that suffer from varying interpretations.</p>
<p>This precision can come at a cost if we don&#8217;t take into account the <a title="Areas of Expertise" href="http://tynerblain.com/blog/2005/12/02/intimate-domains-%e2%80%93-navigating-areas-of-expertise/">domains of expertise</a> of our readers, and the terms that they know.  As Sam points out, we want to use the language of our audience when describing something.</p>
<p>This can be challenging for pedants like us &#8211; when there is a perfectly good, albiet obscure term, why replace it with a sequence of more common words?  It goes against our nature.  We want concise documents.  But clarity (for the reader!) should not be sacrificed for <a title="Writing concise requirements" href="http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/">brevity</a>.</p>
<p><strong>Applied To Process Documentation</strong></p>
<p>In addition to documenting requirements, when we are working as business analysts, we also usually have to document existing processes.  This is really only true for <a title="Writing Requirements for Migration Projects" href="http://tynerblain.com/blog/2006/03/09/software-requirements-for-migration-projects/">migration projects</a>, but those represent almost all single-customer projects.</p>
<p>We should make sure that our documents use <em>our customer&#8217;s terms</em> when documenting these processes &#8211; not our own terms.  The responsibility is ours to translate from the <em>single-customer</em> language to the <em>multi-customer </em>concepts.</p>
<p>Process documents are reviewed initially by business owners, and are eventually consumed by systems analysts or implementers.  Maybe a glossary of terms is required to help a <em>multi-customer</em> implementation team deploy enterprise software for a client.  The documents developed for, and validated by the customer should use the language of the customer.</p>
<p><strong>Applied To Communication In General</strong></p>
<p>When we&#8217;re in meetings, having conversations, writing emails, or in any other way communicating with our clients, we need to use their language.  Product managers should come equipped with a universal translating device.  While an initial conversation may start with industry-standardized terms, as client-specific equivalents are identified, the product manager or analyst should immediately create a substitution and use it in all future communication.</p>
<p>We also have to think about the backgrounds of our audiences.  Here are a couple stupid things I&#8217;ve said in recent meetings with business owners (who have backgrounds in finance and the insurance industry):</p>
<ul>
<li>&#8220;From the flow, you can see that the process recurs, and will do what we need.&#8221;  Translation: <em>The process repeatedly calls itself until it reaches a decision point that forces it to stop</em>.  At least I didn&#8217;t specify that the process was <em>tail-recursive</em>.</li>
<li>&#8220;The decomposition of the work is straightforward, we just establish the proper quanta for breaking down the work in each area&#8221;.  Translation: <em>Break down the work into reasonably sized chunks</em>.  What the hell was I thinking?</li>
</ul>
<p>Pretty much everyone groans when a smug consultant mentions <em>a priori</em> conclusions about prioritization, or an &#8220;obvious&#8221; algorithm.  I&#8217;m sure there were a couple groans when I talked about quanta.  The use of recursion is even worse &#8211; to a programmer, it has a precise meaning.  To a non-programmer, it simply means <em>repitition</em>.  The dictionary example uses &#8220;The cancer recurred&#8221; &#8211; and I&#8217;m sure it doesn&#8217;t mean that the cancer cells were attacked by cancer.  I actually introduced ambiguity by using a term that some people would find to be more precise (the process was walking down a hierarchical business-data-structure, processing elements along the way).</p>
<p><strong>Conclusion</strong></p>
<p>Thanks Sam for pointing out that we need to speak in the language of our customers.  We can extend this idea to make sure we use words within the vocabulary of our audience as well.</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+Writing+For+The+Purpose+of+Reading+http%3A%2F%2Fbit.ly%2Fh0vPCz+" 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/2006/10/04/writing-for-the-purpose-of-reading/&amp;t=Writing+For+The+Purpose+of+Reading" 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/2006/10/04/writing-for-the-purpose-of-reading/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Insight Into Test Driven Development</title>
		<link>http://tynerblain.com/blog/2006/09/12/insight-into-tdd/</link>
		<comments>http://tynerblain.com/blog/2006/09/12/insight-into-tdd/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 04:55:20 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[james kovacs]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[requirements specification]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[test driven development]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/09/12/insight-into-tdd/</guid>
		<description><![CDATA[James Kovacs shares a great insight on software testing and the software testing process.  His epiphany about test driven development makes it obvious to all of us why this technique is so powerful.]]></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%252F2006%252F09%252F12%252Finsight-into-tdd%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Insight%20Into%20Test%20Driven%20Development%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F09%2F12%2Finsight-into-tdd%2F", "style": "big", "title": "Insight Into Test Driven Development" });</script></div>
<p><img title="lightbulb" alt="lightbulb" src="http://sehlhorst.smugmug.com/photos/52406790-M.jpg" /></p>
<p>James Kovacs shares a great insight on software testing and the software testing process.  His epiphany about test driven development makes it obvious to all of us why this technique is so powerful.</p>
<p><strong>TDD</strong></p>
<p>Test driven development is an approach to software development where you write the tests first, and the code second.  This sounds ludicrous at first, but it really does work.  Here&#8217;s James&#8217; epiphany on the subject (emphasis added).</p>
<blockquote><p>I didn&#8217;t understand why TDD practitioner were so zealous about writing the tests first. Why did it matter? I thought it was to ensure that some project manager doesn&#8217;t try to shave some time off the project by cutting the unit tests. Then I started doing some reading about TDD, poking around, asking questions, and trying it out myself. <strong>I discovered the real reason for writing tests first is that TDD isn&#8217;t about testing code, it&#8217;s about designing code.</strong></p>
<p><cite><a title="TDD Article" href="http://www.jameskovacs.com/blog/ATaleOfTwoEpiphaniesTDDAndMocking.aspx">A Tale of Two Epiphanies: TDD and Mocking, James Kovacs</a></cite></p></blockquote>
<p>These tests are <a title="Foundation series on unit testing" href="http://tynerblain.com/blog/2006/01/19/foundation-series-unit-testing-software/">unit tests</a>, and they are <a title="Blackbox vs whitebox tests" href="http://tynerblain.com/blog/2006/01/13/software-testing-series-black-box-vs-white-box-testing/">black-box tests</a> (or at least <em>should be</em> black-box tests &#8211; read <a title="james' article" href="http://www.jameskovacs.com/blog/ATaleOfTwoEpiphaniesTDDAndMocking.aspx">James&#8217; article</a>).</p>
<p><strong>Works Great With Structured Requirements</strong></p>
<p>Not only is this a great way to approach design, but it is a great way to coordinate software development with <a title="Foundation series on structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements</a>.  A well-written requirement describes a need <a title="Writing Design-Free Requirements" href="http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/">without specifying design</a>.  This description then works like a black-box contract.  The implementer then must do <em>something</em> that meets the specification given.  As James points out, TDD is very effective at creating <a title="Foundation series on blackbox testing and whitebox testing" href="http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/">black-box tests</a>.</p>
<p>This makes sense, when you consider the outside-in approach that comes from starting with requirements.  This outside in approach leads to API decisions (for a program or module or method).  The API has to support all of the required possible inputs and outputs.  Once an API is written, tests can be written.</p>
<p><strong>Best Applied As Part Of Continuous Integration For Larger Teams</strong></p>
<p>All of the tests will fail (because the code hasn&#8217;t been written).  Then the implementer will write code until the tests pass.  Using a <a title="Foundation series on continuous integration" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">continuous integration approach</a> is a very effective way for entire teams to do this simultaneously on larger projects.</p>
<p><strong>Faster Processes</strong></p>
<p>We can also validate the design for completeness prior to creating the implementation.  We can compare the generated APIs (and their rationalizations) with the software specification (or application requirements, or FRS&#8230; see <a title="Variations of Requirements Documents" href="http://tynerblain.com/blog/2006/08/24/alphabet-soup/">alphabet soup article</a>).  This allows us to address some refactoring needs before the code has been implemented &#8211; saving time and money.</p>
<p><strong>Conclusion</strong></p>
<p>Use TDD as an outside-in approach that assures that the delivered software will meet the objectives of the requirements specification.  It also saves time and money by supporting validation in advance of implementation.</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+Insight+Into+Test+Driven+Development+http%3A%2F%2Fbit.ly%2FdIr61C+" 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/2006/09/12/insight-into-tdd/&amp;t=Insight+Into+Test+Driven+Development" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/09/12/insight-into-tdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Communicating Intent With Implementers</title>
		<link>http://tynerblain.com/blog/2006/07/17/communicating-intent-with-implementers/</link>
		<comments>http://tynerblain.com/blog/2006/07/17/communicating-intent-with-implementers/#comments</comments>
		<pubDate>Tue, 18 Jul 2006 04:14:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[communicating intent]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[MRD]]></category>
		<category><![CDATA[quality assurance]]></category>
		<category><![CDATA[software development process]]></category>
		<category><![CDATA[status report]]></category>
		<category><![CDATA[status reporting]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/07/17/communicating-intent-with-implementers/</guid>
		<description><![CDATA[Giving a functional spec to developers and testers is not sufficient for creating great software.  To a developer, a spec is only the what and not the why.  And for a tester, the software requirements specification is neither.  Use cases provide the why that explains the intent of the system for the implementation team.]]></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%252F2006%252F07%252F17%252Fcommunicating-intent-with-implementers%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Communicating%20Intent%20With%20Implementers%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F07%2F17%2Fcommunicating-intent-with-implementers%2F", "style": "big", "title": "Communicating Intent With Implementers" });</script></div>
<p><img alt="grey puzzle piece" title="grey puzzle piece" src="http://sehlhorst.smugmug.com/photos/80223216-M.jpg" /></p>
<p>Giving a functional spec to developers and testers is not sufficient for creating great software.  To a developer, a spec is only the <em>what</em> and not the <em>why</em>.  And for a tester, the software requirements specification is neither.  Use cases provide the <em>why</em> that explains the intent of the system for the implementation team.</p>
<p><strong>Background</strong></p>
<p>We started a series of posts exploring <a title="Why we use use cases" href="http://tynerblain.com/blog/2006/06/23/the-8-goals-of-use-cases/"><em>why we apply use cases</em></a> as part of product management, identifying 8 goals for which use cases are relevant. That series post contains links to detailed articles on each goal as we write them over the next weeks. Bookmark it and come back to it to see the puzzle come together.</p>
<p>We recently wrote an article, <a title="Communicating With Stakeholders" href="http://tynerblain.com/blog/2006/07/14/communicating-intent-with-stakeholders/"><em>Communicating Intent With Stakeholders</em></a>, that shows how use cases are consumed from the perspective of users and customers, or stakeholders.  In that article, we showed a diagram that compares the different perspectives of the software development artifacts.</p>
<p><img alt="Why, What, and How diagram" title="Why, What, and How diagram" src="http://sehlhorst.smugmug.com/photos/69105260-M.png" /></p>
<p>Use cases fall in the &#8220;requirements&#8221; row of this diagram.  The requirements row represents the documents used to articulate the value of a proposed solution.  The article, <a title="Requirements Documents" href="http://tynerblain.com/blog/2006/05/11/requirements-documents-one-mans-trash/"><em>Requirements Documents &#8211; One Man&#8217;s Trash</em></a>, provides a more detailed explanation of these differing perspectives.</p>
<p>Communication of intent with the implementation team is different than it is with stakeholders.  The implementation team represents people performing one of two activites: building the solution and assuring the solution is correct.  Different teams will staff these roles differently.  Some teams will have separate QA organizations, and others will rely upon the developers to also be responsible for quality.</p>
<p><strong>Development</strong></p>
<p>Some people will argue that a development team only needs the specification to create software.  That&#8217;s absolutely true in a <em>turn-the-crank</em> situation.  And its very common in many outsourcing arrangements that use a <a title="Four Different Outsourcing Models" href="http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/"><em>low-level outsourcing model</em></a>.  The downside of these approaches is that we hamper our developer&#8217;s ability to apply their creative skills to creating innovative solutions.</p>
<p>By providing developers with an understanding of <em>why</em> they are being asked to implement software that conforms to a specification, we get the opportunity to benefit from their feedback.  A <em>free electron</em> developer [scroll down to the <em>People</em> section of <a title="Definition of free electron" href="http://tynerblain.com/blog/2006/06/07/writing-attainable-requirements/">this article</a> for a definition] may have an epiphany about a significantly better way to solve the problem.  Wthout insight into the intent of the software, that star developer is hamstrung.</p>
<p><strong> Quality Assurance</strong></p>
<p>Quality assurance personnel (QA) are responsible for assuring that the software does what it is supposed to do.  While developers can write <a title="Foundation Series on Blackbox and Whitebox testing" href="http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/"><em>whitebox tests</em></a> to assure that their code behaves as anticipated, QA has to rely on <a title="More details on Blackbox and Whitebox testing" href="http://tynerblain.com/blog/2006/01/13/software-testing-series-black-box-vs-white-box-testing/"><em>blackbox tests</em></a> to assure that the intent of the system is being met.  This requires that QA understand the intent of the system.</p>
<p>Blackbox tests are generally described as a series of user actions (or the automated equivalent), usually referred to as a <em>script</em>.  Each script, to be as valuable as possible, should be designed to mimic what a user would do when trying to achieve a particular goal.  <a title="Writing Functional Requirements" href="http://tynerblain.com/blog/2006/02/10/writing-functional-requirements-to-support-use-cases/">Functional requirements are written to support use cases</a>.  While we can write short tests that validate individual functional requirements, these tests would really only be <em>scriplets</em>, because they do not represent an entire user session.</p>
<p>Good tests are atomic.  When a test fails, we want to be able to say that <em>test X</em> for <em>functional requirement Y</em> failed.  And scripts should be written with these atomic assertions in mind.  There are two reasons, however, to group these assertions together into scripts that match use cases.</p>
<p>First, when using <a title="Foundation Series on Structured Requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">a structured requirements approach</a>, a single functional requirement may support multiple use cases.  Developers will want to know which functional requirement failed, and the context in which it failed.  However, when we <a title="Status Reporting" href="http://tynerblain.com/blog/2006/04/24/targeted-communication-status-reporting/">communicate project status</a> with stakeholders, we will be talking to them in the language of use cases.  Providing an association between functional requirements, their tests, and the relevant use cases makes this much easier.</p>
<p>Second, because these are blackbox tests, they are written without insight into the implementation by definition.  It is possible that a particular functional requirement will pass all of its tests when performing one use case, but fail them when performing another.  We can use <a title="Pairwise Testing" href="http://tynerblain.com/blog/2006/03/18/software-testing-series-pairwise-testing/">pairwise testing</a> or <a title="Test Smarter, Not Harder" href="http://tynerblain.com/blog/2006/05/29/test-smarter-not-harder-a-detailed-article/">other techniques</a> to find these circumstances by brute force.  But we can also re-use the assertions (an individual test of a functional requirement) across multiple scripts (use cases).</p>
<p><strong>Summary</strong></p>
<p>Members of the development and quality organizations benefit from understanding <a title="Asking Why" href="http://tynerblain.com/blog/2005/12/13/everything-i-needed-to-know-i-forgot-in-kindergarden/"><em>why</em></a> they are implementing or testing a particular functional spec.  Use cases provide them with that context.  Use cases are also the artifacts <a title="Intimate Domains" href="http://tynerblain.com/blog/2005/12/02/intimate-domains-%e2%80%93-navigating-areas-of-expertise/">most easily understood by all team members</a>.</p>
<p><img alt="domains of expertise" title="domains of expertise" src="http://sehlhorst.smugmug.com/photos/46728357-M.png" /></p>
<p>People in all three groups can easily consume use cases.  If an individual is unfamiliar, <a title="Foundation Series on How to Read a Use Case" href="http://tynerblain.com/blog/2006/06/26/foundation-series-how-to-read-a-formal-use-case/">a quick lesson on how to read use cases</a> can help.</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+Communicating+Intent+With+Implementers+http%3A%2F%2Fbit.ly%2FhFxAUP+" 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/2006/07/17/communicating-intent-with-implementers/&amp;t=Communicating+Intent+With+Implementers" 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/2006/07/17/communicating-intent-with-implementers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Data Dictionary Definition</title>
		<link>http://tynerblain.com/blog/2006/07/13/foundation-series-data-dictionary-definition/</link>
		<comments>http://tynerblain.com/blog/2006/07/13/foundation-series-data-dictionary-definition/#comments</comments>
		<pubDate>Fri, 14 Jul 2006 03:55:44 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[data dictionary]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[managing requirements]]></category>
		<category><![CDATA[object oriented analysis]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[UML Modeling]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/07/13/foundation-series-data-dictionary-definition/</guid>
		<description><![CDATA[What is a data dictionary and how is it used when communicating and managing requirements?]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2006%252F07%252F13%252Ffoundation-series-data-dictionary-definition%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Foundation%20Series%3A%20Data%20Dictionary%20Definition%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F07%2F13%2Ffoundation-series-data-dictionary-definition%2F", "style": "big", "title": "Foundation Series: Data Dictionary Definition" });</script></div>
<p><img alt="classroom" title="classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<p>What is a data dictionary and how is it used when communicating and managing requirements?</p>
<p><strong>Definition</strong></p>
<p>A data dictionary is a collection of the definitions of the structure of information that is relevant to a set of requirements.  That&#8217;s a lot of words for a simple concept.  We need to know (and constrain) a set of information about some business element when managing our requirements.  We use a data dictionary to define what that information is, and any constraints on how it must be used.</p>
<p><strong>Viewing The System</strong></p>
<p>When <a title="A picture is worth a thousand requirements" href="http://tynerblain.com/blog/2005/12/09/a-picture-is-worth-a-thousand-requirements/">using object oriented analysis (OOA)</a> as part of defining requirements, we represent business concepts as objects and processes.  For example, an order management system might define orders as having line items and customers.  We can represent that information graphically with a UML diagram like the following:</p>
<blockquote><p><img alt="uml diagram" title="uml diagram" src="http://sehlhorst.smugmug.com/photos/47711990-M.png" /></p>
<p>In prose, we could also capture the same information as follows:</p>
<ol>
<li>The      system shall include a representation of customer orders.</li>
<li>Each order will have a single associated customer, and each customer can have multiple orders. Note that a customer is not required to have any orders.</li>
<li>Each order will have at least one, and possibly multiple line items. Each line item is uniquely associated with a single order.</li>
<li>Each line item represents a single product. Note that a product is not required to be represented in a line item. A product can be represented in multiple line items (even within the same quote).</li>
</ol>
</blockquote>
<p>While this diagram tells us about the structure at a high level, it doesn&#8217;t tell us enough information to go implement the solution.  What exactly is a <em>line item</em>?  What information does it contain?  And what format must that information be in?</p>
<p><strong>A Dictionary Entry</strong></p>
<p>We could create a data dictionary entry for the <em>line item</em> object as follows:</p>
<p><strong>Line Item </strong></p>
<p>A line item represents a portion of a customer order that describes a product being ordered, as well as the quantity of that product being ordered.  Each line item must include the following information:</p>
<ul>
<li>A reference to the product being ordered, using the product ID per constraint X1.  [Note, the constraint is imposed by the existing product data management system, with which our software is required to integrate.]</li>
<li>The quantity of the product being ordered, where the quantity is a positive integer. [Note, we would include a maximum value, if there were a constraint imposed by some other part of the system.]</li>
</ul>
<p>Note that we have not specified that a <em>line item</em> includes a price.  It is very likely that a line item would have a price, but we would be specifying implementation details if we did.  Pricing may be done per product, or may be unique for each product for any given customer.  Discounts may be applied based upon quantity of products in a line item, or dollar amount for an order.  Discounts may be applied based upon all products ordered by a customer over a period of time.  These different possibilities are a function of the requirements of the system.</p>
<p>When those business requirements are defined, they will dictate the <em>ownership</em> of properties by <em>business</em> objects.  With that information, we can include the data as appropriate.  For example, a <em>list price</em> property may be defined for the <em>product</em> object, or a <em>customer-price</em> may be defined for a <em>line-item</em> as a function of (product, quantity, customer).  We would add that data as part of the business modeling.  Note that this is a description of the problem domain, not a description of the implementation.<br />
<strong>Another Data Dictionary Example</strong></p>
<p>Here&#8217;s an example of a &#8220;Customer&#8221;</p>
<p>A customer represents the business or person for whom an order has been placed.  Note that all <em>character</em> fields are to be represented in <a title="Unicode Standard" href="http://www.unicode.org/versions/Unicode4.1.0/">unicode 4.1.0</a> or later per corporate policy ABC.  A customer has the following information:</p>
<ul>
<li>Name.  50 characters representing the name of the customer.</li>
<li>Shipping Address 1.  100 characters representing the first line of the address to which all customer shipments are made.</li>
<li>Shipping Address 2.  100 characters representing the second line of the address to which all customer shipments are made.</li>
<li>Shipping Country.  50 characters&#8230;</li>
<li>Billing Address.</li>
<li>Customer Contact.</li>
<li>etcetera.</li>
</ul>
<p>This list is intended to show all of the elements of information that must be present in the &#8220;customer object&#8221; to support the requirements of the system.</p>
<p><strong>Further Reading</strong></p>
<p>Joe, at Seilevel wrote a post back in March with <a title="Seilevel definition" href="http://requirements.seilevel.com/blog/2006/03/requirements-model-4-data-dictionary.html">a good explanation of data dictionary</a> entries.  As Joe points out, requirements can drive the need for specific information.</p>
<blockquote><p>For example, my business users have told me that the number of decimal places of  each weight value tracked by the system is very important for monitoring and  reporting. It stands to reason that other objects and attributes might require  the same level of specification. If you figure it out once, you can use it in  many places.</p></blockquote>
<p>Barbara, at B2T Training points out <a title="Why BAs need to understand data" href="http://www.b2ttraining.com/page/business-analyst-blog/archives/43/why-does-a-business-analyst-need-to-understand-data">the importance of understanding the details</a> of the data for a system.  She also touches on the value of having that information in a separate document.</p>
<blockquote><p>Many BAs document data as part of the business process or part of the Use Case. Our recommendation is that you document data in a separate part of the requirements package because it is often used in multiple places.</p></blockquote>
<p><strong>Usage</strong></p>
<p>A data dictionary should be defined as a repository of all data definitions like the examples above.  Those examples should be referenced in all requirements documents that rely on the defined objects.  Requirements documents should not specify the content of the objects, they should defer to the referenced dictionary entries.</p>
<p>Some projects, especially <a title="Requirements for Migration Projects" href="http://tynerblain.com/blog/2006/03/09/software-requirements-for-migration-projects/">migration projects</a>, have many constraints tied to data formats and structure.  These projects will have extensive data dictionaries, and multiple references to entries throughout the requirements document.  Other projects will have far fewer constraints on data formats, but will still have explicit structural definitions for business objects (like our line item example).</p>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  Series</em> posts</a> which will be updated whenever new posts are added.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Foundation+Series%3A+Data+Dictionary+Definition+http%3A%2F%2Fbit.ly%2FdIHg5I+" 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/2006/07/13/foundation-series-data-dictionary-definition/&amp;t=Foundation+Series%3A+Data+Dictionary+Definition" 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/2006/07/13/foundation-series-data-dictionary-definition/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Writing Passionate Requirements</title>
		<link>http://tynerblain.com/blog/2006/06/15/writing-passionate-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/06/15/writing-passionate-requirements/#comments</comments>
		<pubDate>Fri, 16 Jun 2006 04:07:13 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[passionate requirements]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing passionate requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/15/writing-passionate-requirements/</guid>
		<description><![CDATA[One of the ten big rules of writing a good MRD is writing passionate requirements.  What in the world is a passionate requirement [they were all wondering]?  When you believe in the product, are committed to the work, and aren't bored, you can write passionately.  The goal of a requirement is to create sustained understanding.  A dry document can create understanding, but an engaging document will sustain it.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2006%252F06%252F15%252Fwriting-passionate-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Passionate%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F15%2Fwriting-passionate-requirements%2F", "style": "big", "title": "Writing Passionate Requirements" });</script></div>
<p><img alt="big ten logo" title="big ten logo" src="http://sehlhorst.smugmug.com/photos/128628679-M.png" /></p>
<p>One of the ten big rules of writing a good MRD is writing passionate requirements.  What in the world is a passionate requirement [they were all wondering]?  When you believe in the product, are committed to the work, and aren&#8217;t bored, you can write passionately.  The goal of a requirement is to create sustained understanding.  A dry document can create understanding, but an engaging document will sustain it.</p>
<p><strong>The Big Rule of Writing Passionate Requirements<br />
</strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>Nothing great has been born from complacency, lethargy or mediocrity. When we  are defining requirements, we must be passionate about what we’re doing. If  we’re just going through the motions, it shows up in the writing. If we aren’t  excited about a requirement, the problem is either with us or with the  requirement. Either way, it won’t inspire the rest of the team to do something  great.</p></blockquote>
<p><strong>Passion For The Product</strong></p>
<p>When we are excited about our product, and believe in the value for our customers, we will write better.  When we know that we are doing work that is <em>worth doing</em>, we approach it with that &#8216;extra something&#8217;.</p>
<p><strong>Commitment to Writing</strong></p>
<p>If we are just going through the motions, creating a document because someone told us that we have to, it will show.  We need to appreciate that an MRD is the focal point for an understanding of our customer&#8217;s needs.  We realize that our engineering team will be using that MRD as the source of their inspiration and actions.  When the goal of our writing is to deliver understanding, we write differently than when our goal is to hurry up and move on to the next thing.</p>
<p><strong>Personal Engagement</strong></p>
<p>Few things affect the quality of writing more than boredom with the subject.  If we are writing requirements for YACC (Yet another C compiler) and we&#8217;ve done it ten times before, we will lose something.  Years ago I got some great advice &#8211; get out of your <em>comfort zone</em>.</p>
<p>Everyone has a comfort zone, where the work they are doing isn&#8217;t challenging.  Immediately surrounding that comfort zone is the <em>stretch zone</em> where there is a little fear, growth and challenge.  This is where we should operate.  We don&#8217;t grow by doing the same thing over and over, in the same way.  Outside of the stretch zone is the <em>fear zone</em> where we are operating as a fish out of water.  If we&#8217;re unable to react, learn, cope and succeed, we&#8217;ve gone too far into the fear zone.</p>
<p>Complacency comes from boredom, which comes from spending too much time in our comfort zones.  And complacency shows in the quality of our writing.  We may write accurate, boring, easy to read and easy to forget requirements.</p>
<p><strong>Out of Control</strong></p>
<p>All of the factors above seem to be out of our control.  We have employers, they give us assignments.  We have to do what we&#8217;re told, even if we don&#8217;t believe in it. There are three things we can do.</p>
<p>The first is to find a way to believe in the product.  Review the financial benefits, think about the improvements it makes for the users. We can find at least an element of what we&#8217;re doing that is relevant or significant.  And we can focus on that.</p>
<p>The second is to find a way to focus on self-improvement.  While we&#8217;re performing the job that we&#8217;ve decided isn&#8217;t worth doing, we can take on the <em>meta-challenge</em> of exploring it as a testbed for discovering better ways to do the job.  How can we reduce the level of effort required to do the job well?  Can we invent new approaches or master existing ones?  We can focus on that.</p>
<p>The third is to think about why we have a job we don&#8217;t enjoy, doing work we don&#8217;t believe in.  If we <em>need</em> the job, then we keep it.  If we don&#8217;t need <em>this</em> job, we can look for another one that we will believe in.  Or we can simply accept that our writing won&#8217;t be passionate.  But hey, that&#8217;s no different than most of the stuff that we read.</p>
<p><strong>Conclusion</strong></p>
<p>Every job is done better when someone is passionate about it &#8211; writing requirements is no exception.  Find a way to be passionate.</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+Writing+Passionate+Requirements+http%3A%2F%2Fbit.ly%2Fi1pmqc+" 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/2006/06/15/writing-passionate-requirements/&amp;t=Writing+Passionate+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/2006/06/15/writing-passionate-requirements/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Writing Atomic Requirements</title>
		<link>http://tynerblain.com/blog/2006/06/14/writing-atomic-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/06/14/writing-atomic-requirements/#comments</comments>
		<pubDate>Thu, 15 Jun 2006 02:29:45 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[atomic requirements]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirement atomicity]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/14/writing-atomic-requirements/</guid>
		<description><![CDATA[One of the ten big rules of writing a good MRD is writing atomic requirements. Just as verifiable requirements must be concretely measurable as having been met or not, so must atomic requirements. If a requirement has multiple elements that can be implemented separately, it is not atomic.]]></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%252F2006%252F06%252F14%252Fwriting-atomic-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Atomic%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F14%2Fwriting-atomic-requirements%2F", "style": "big", "title": "Writing Atomic Requirements" });</script></div>
<p><img alt="big ten logo" title="big ten logo" src="http://sehlhorst.smugmug.com/photos/128628670-M.png" /></p>
<p>One of the ten big rules of writing a good MRD is writing atomic requirements. Just as <a title="Writing Verifiable Requirements" href="http://tynerblain.com/blog/2006/06/13/writing-verifiable-requirements/">verifiable requirements</a> must be concretely measurable as having been met or not, so must atomic requirements.  If a requirement has multiple elements that can be implemented separately, it is not atomic.</p>
<p><strong>The Big Rule of Writing Atomic Requirements<br />
</strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>Every requirement should be a single requirement. If we can say “Half of this  requirement is implemented” then this needs to be two or more requirements. If a  requirement read “Sales reps can manage their client list and generate custom  reports” it expresses two atomic ideas (list management and report generation).  Those ideas need to be separated</p></blockquote>
<p><strong>Determining Atomicity</strong></p>
<p>There is a very simple test &#8211; can a subset of the requirement be implemented?  Phrases like &#8216;the user will be able to <em>X</em> and <em>Y</em>&#8216; are tell-tale signs that a requirement is probably not atomic.</p>
<p><strong>Why Atomicity Matters</strong></p>
<p>Atomicity matters when developing a product roadmap.  We can&#8217;t prioritize half a requirement for one release and the other half for another.  Each requirement should be <a title="Prioritizing Requirements Across Releases" href="http://tynerblain.com/blog/2006/03/08/prioritizing-software-requirements-across-releases/">scheduled for a single release</a>.</p>
<p><a title="How to Deal With Untestable Requirements" href="http://tynerblain.com/blog/2005/11/30/how-to-deal-with-untestable-requirements-rewrite-them/">Testing of requirements</a> should result in either a &#8220;pass&#8221; or a &#8220;fail.&#8221;  A requirement should not <em>partially</em> pass its verification test.</p>
<p>Tracability of requirements is also simplified when each requirement is unique.</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+Writing+Atomic+Requirements+http%3A%2F%2Fbit.ly%2Fi59Z5c+" 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/2006/06/14/writing-atomic-requirements/&amp;t=Writing+Atomic+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/06/14/writing-atomic-requirements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Verifiable Requirements</title>
		<link>http://tynerblain.com/blog/2006/06/13/writing-verifiable-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/06/13/writing-verifiable-requirements/#comments</comments>
		<pubDate>Wed, 14 Jun 2006 03:32:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[requirements verification]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[verifiable requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/13/writing-verifiable-requirements/</guid>
		<description><![CDATA[One of the ten big rules of writing a good MRD is writing verifiable requirements.  Verification is both a function of having a precise goal, and having the ability to affordably measure the requirement.  A precise goal is a verifiable requirement if we can clearly answer "yes" or "no" when asked if the requirement has been implemented.  We also face the practical realities of being able to measure the results profitably.]]></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%252F2006%252F06%252F13%252Fwriting-verifiable-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Verifiable%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F13%2Fwriting-verifiable-requirements%2F", "style": "big", "title": "Writing Verifiable Requirements" });</script></div>
<p><img alt="big ten logo" title="big ten logo" src="http://sehlhorst.smugmug.com/photos/128628654-M.png" /></p>
<p>One of the ten big rules of writing a good MRD is writing verifiable requirements.  Verification is both a function of having a precise goal, and having the ability to affordably measure the requirement.  A precise goal is a verifiable requirement if we can clearly answer &#8220;yes&#8221; or &#8220;no&#8221; when asked if the requirement has been implemented.  We also face the practical realities of being able to measure the results profitably.</p>
<h2>The Big Rule of Writing Verifiable Requirements</h2>
<p><strong><br />
</strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>We use a process that starts with market requirements, and <a title="From MRD to PRD" href="http://tynerblain.com/blog/2006/01/24/from-mrd-to-prd-the-key-to-defining-a-spec/">then  decomposes them</a> into software requirement specifications. the market  requirements must be written in a way that we can verify that the associated  requirements specification will meet the market need.</p></blockquote>
<h2>Verifiable</h2>
<p>We wrote previously that <a title="How to Deal With Untestable Requirements" href="http://tynerblain.com/blog/2005/11/30/how-to-deal-with-untestable-requirements-rewrite-them/">if a requirement can&#8217;t be tested, it should be rewritten</a>.  Roger Cauvin has recently reposted on <a title="Why Testable Requirements" href="http://cauvin.blogspot.com/2006/06/why-testable-requirements.html">testable requirements</a>.  Perhaps in anticipation of this article? :).</p>
<p>In the world of test driven design (TDD), the philosophy is to write the test first, and then write the code.  We use a <a title="Foundation Series on Continuous Integration" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">continuous integration approach</a> to check in code regularly and run all of the tests as we go.  When the test for a particular requirement passes, the code is done for that requirement.</p>
<p>We also get a big benefit in validating that we have delivered the right functionality to the customer.  When we agree on the language of the requirement, we are also agreeing on the language of its verifiability.</p>
<h2>Affordably Verifiable</h2>
<p><strong> </strong></p>
<p>With this <em>big rule</em>, we are assuming that we have already eliminated impractical or <a title="Writing Attainable Requirements" href="http://tynerblain.com/blog/2006/06/07/writing-attainable-requirements/">unattainable requirements</a>.</p>
<p>Some tests are very expensive, or nigh on impossible.  Roger alludes to this as <em>testable in principle</em>.  Requirements should be testable in practice whenever possible.  If a requirement can not be tested (&#8220;Must last 10 years&#8221;) in the delivery timeframe, we need to at least define a specific acceptance criteria &#8211; (&#8220;95% confidence in a cycle life of 10,000 cycles per procedure XYZ.doc&#8221;).  This is the approach that Underwriter Labs uses for awarding UL certification to electrical appliances for safety.</p>
<p>Semantically, we can argue that this proxy criteria is in fact the requirement.  It is the criteria by which acceptance is determined.</p>
<p>If the test is possible, but impossibly expensive, we shouldn&#8217;t run the test.  If we can not agree on a practical proxy criteria, we are left with two choices.  We can choose to not implement the requirement.  Or we can choose to agree that the requirement is delivered <em>when we say it is</em>.  Neither is a particularly good option, but the former is better than the latter, when it comes to maintaining a positive relationship with our customer.</p>
<p>Writing requirements without acceptance criteria introduces risk into our project.  The last thing we want is to enter into a nitpicking discussion about what we have and have not delivered.  We would much rather spend that time discussing what we can deliver next.</p>
<h2>Conclusion</h2>
<p>Write requirements that can be verified given the constraints of the project.  Common constraints are time, money, equipment and expertise.  Use language that makes the verification process explicit.  The process of determining verifiability also dramatically helps <a title="Writing Unambiguous Requirements" href="http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/">eliminate ambiguity in our requirements</a>.</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+Writing+Verifiable+Requirements+http%3A%2F%2Fbit.ly%2Fech9gN+" 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/2006/06/13/writing-verifiable-requirements/&amp;t=Writing+Verifiable+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/2006/06/13/writing-verifiable-requirements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Unambiguous Requirements</title>
		<link>http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/#comments</comments>
		<pubDate>Tue, 13 Jun 2006 03:25:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[ambiguous requirements]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[clear requirements]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[unambiguous requirements]]></category>
		<category><![CDATA[vague requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/</guid>
		<description><![CDATA[One of the ten big rules of writing a good MRD is writing unambiguous requirements. Ambiguity is a function of communication. The writing can be generically ambiguous, or ambiguous to the writer. A requirement could be precise in intent, but ambiguous in interpretation by the reader. Understanding our audience is as important as precision in language. We write unambiguous requirements because misinterpretation of requirements is the source of 40% of all bugs in delivered software.]]></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%252F2006%252F06%252F12%252Fwriting-unambiguous-requirements%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FclVMru%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Unambiguous%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F12%2Fwriting-unambiguous-requirements%2F", "shorturl": "http://bit.ly/clVMru", "style": "big", "title": "Writing Unambiguous Requirements" });</script></div>
<p><img title="big ten logo" src="http://sehlhorst.smugmug.com/photos/128628634-M.png" alt="big ten logo" /></p>
<p>One of the ten big rules of writing a good MRD is writing unambiguous requirements.  Ambiguity is a function of communication.  The writing can be generically ambiguous, or ambiguous to the writer.  A requirement could be precise in intent, but ambiguous in interpretation by the reader.  Understanding our audience is as important as precision in language.  We write unambiguous requirements because <a title="Requirements errors exceed 40% of all bugs" href="http://tynerblain.com/blog/2005/12/28/why-we-should-invest-in-requirements-management/">misinterpretation of requirements is the source of 40% of all bugs</a> in delivered software.</p>
<p><strong>The Big Rule of Writing Unambiguous Requirements<br /> </strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>A great requirement has a single interpretation. A good requirement has a  single <em>reasonable</em> interpretation. As part of our development process,  we will <a title="Top five ways to be a better listener" href="http://tynerblain.com/blog/2006/01/27/top-five-ways-to-be-a-better-listener/">use  listening skills like active listening</a> to make sure that our engineering  team understands the requirement we intended to write. The better the  requirements, the less expensive and risky this communication process will be.  <a title="Writing Requirements Unambiguously" href="http://tynerblain.com/blog/2006/02/14/writing-requirements-unambiguously/">Writing  unambiguously</a> is critically important when using outsourcing models that  limit our interactions with other team members.</p>
</blockquote>
<p><strong>Ambiguous to the Writer</strong></p>
<p>We introduce ambiguity with imprecise language.  Using <em>shall</em> instead of <em>should</em> is one of the first things people suggest (or require!) when writing requirements. [Added 2010.08.17 - <em><a title="You must not use shall" href="http://tynerblain.com/blog/2009/04/22/dont-use-shall/">shall</a></em><a title="You must not use shall" href="http://tynerblain.com/blog/2009/04/22/dont-use-shall/"> is ambiguous too - use </a><em><a title="You must not use shall" href="http://tynerblain.com/blog/2009/04/22/dont-use-shall/">must</a></em><a title="You must not use shall" href="http://tynerblain.com/blog/2009/04/22/dont-use-shall/">!</a>]  Red flags are also raised with words like <em>can</em> and <em>might</em>.  Marcus wrote a good post about vague requirements language</p>
<blockquote><p>What do the terms: <em>user-friendly</em>, <em>flexible</em>,  <em>easy-to-use</em>, <em>fast</em>, and <em>intuitive</em> mean to you? Do you  think these terms mean the same thing to someone else? Generally, no!</p>
<p><cite>from <a title="Bad Practices part 4" href="http://rationalizedthoughts.blogspot.com/2005/12/bad-practices-part-iv-speculative.html">Speculative and Vague Terms</a></cite></p>
</blockquote>
<p>These are examples where the language is ambiguous, both to the writer and the reader.  Any uninformed third party could read these requirements and identify the amiguity in the language.  This makes these mistakes easy to catch &#8211; all that is required is a good working knowledge of the language.</p>
<p><strong>Ambiguous to the Reader</strong></p>
<p>Even precisely written, grammatically correct prose can be ambiguous to the reader.  This ambiguity can come either from lack of expertice with the language, or from incompleteness of the requirement.</p>
<p><strong>Language Ambiguity </strong></p>
<p>With the ever-increasing <a title="Outsourcing conversation" href="http://tynerblain.com/blog/2006/04/05/outsourcing-conversation-one-topic-two-blogs-three-cs/">outsourcing </a>of teams, we have to think about writing requirements for outsourced team members.  When we use a <a title="Four models for outsourcing" href="http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/"><em>complete technical outsourcing</em></a> model, we have to consider the possibility (or <em>certainty</em> in some cases) that the primary language of the readers of the MRD is not the language it is written in.  Making a document easy to read (short sentences, common words) can be at odds with making the language of the requirements <em>precise</em>.</p>
<p>Some good research on vocabulary size data for comprehension of english can be found <a title="Vocabulary Size " href="http://www.wordhacker.com/en/article/vocabularysizewordlists.htm">here</a>.  The average native english speaker knows 20,000 word families.  With a vocabulary of 5,000 english words, only 98.5% of the words in a given text will be understood.  5,000 words is a lot for a speaker of a second language (3,000 words is considered a <em>working knowledge</em>).</p>
<p>An <a title="Readability and Requirements" href="http://tynerblain.com/blog/2005/12/30/readability-and-requirements/">analysis of the reading-level</a> at which a document is written can be helpfull in identifying if the language is likely to be challenging for readers with limited vocabularies.  The <a title="Gunning Fog measure of Readability" href="http://tynerblain.com/blog/2005/12/30/readability-and-requirements/">Gunning-Fog Index</a> provides a measure of the education level at which a text is written.</p>
<p><strong>Incompleteness Ambiguity</strong></p>
<p>When the language is both precise and understood, we still face challenges in ambiguity by failing to <a title="Writing Complete Requirements" href="http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/">provide all the information</a>.  When we find ourselves wanting to say <em>&#8220;That was implied, you should have known that!&#8221;,</em> we are still being ambiguous.  Clarity exists not only in language but in intent.  Should the reader assume that when we specified <em>user-authentication</em> and <em>role-based functionality</em> that we intended users to have roles?  If we specify that the best-matching search results must be presented within 1 second, is it ok if the rest of the results are presented later?  And how many of the best-matches must be found?</p>
<p>Writing requirements like this is definitely a risk, and <em>probably</em> ambiguous.  If we have a history, a rapport, and synchronous feedback cycles with the readers of the document, this may not be vague.  We may be able to rely on them to assume the same things we assume.  The language in the document may be serving effectively as <em>shorthand</em> for this communication.  If we are working as a team with a shorter history of working together, this almost certainly will not communicate what we intended.  There is also a risk of going too far.</p>
<p><strong>Conclusion</strong></p>
<p>Writing unambiguous requirements requires us to write complete requirements.  It also requires us to use precise language that communicates information across domains to our readers.  To determine the right level of effort, we need to monitor the effectiveness of our communication, and balance that with the amount of time we can afford to dedicate to word-smithing instead of other product management activities.</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+Writing+Unambiguous+Requirements+http%3A%2F%2Fbit.ly%2FclVMru+" 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/2006/06/12/writing-unambiguous-requirements/&amp;t=Writing+Unambiguous+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/2006/06/12/writing-unambiguous-requirements/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Writing Consistent Requirements</title>
		<link>http://tynerblain.com/blog/2006/06/09/big-ten-rules-writing-consistent-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/06/09/big-ten-rules-writing-consistent-requirements/#comments</comments>
		<pubDate>Sat, 10 Jun 2006 02:25:21 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[consistent requirements]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/09/big-ten-rules-writing-consistent-requirements/</guid>
		<description><![CDATA[One of the ten big rules of writing a good MRD is writing consistent requirements. Consistency within an MRD has two dimensions that are important to requirements - logical consistency and grammatical consistency.  There is also the element of writing an MRD that is consistent with other documentation - external consistency.]]></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%252F2006%252F06%252F09%252Fbig-ten-rules-writing-consistent-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Consistent%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F09%2Fbig-ten-rules-writing-consistent-requirements%2F", "style": "big", "title": "Writing Consistent Requirements" });</script></div>
<p><img title="Big Ten Logo" alt="Big Ten Logo" src="http://sehlhorst.smugmug.com/photos/128628622-M.png" /></p>
<p>One of the ten big rules of writing a good MRD is writing consistent requirements.  Consistency within an MRD has two dimensions that are important to requirements &#8211; logical consistency and grammatical consistency.  There is also the element of writing an MRD that is consistent with other documentation &#8211; external consistency.</p>
<p><strong>The Big Rule of Writing Consistent Requirements<br />
</strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>Pragmatic highlights that the requirement must be logically consistent with  the other requirements in the document &#8211; no overlaps, no contradictions, no  duplications. This is certainly the most important point of consistency.</p>
<p>There is also benefit to consistent writing in an MRD. We can use templates  to provide a consistent framework, but more importantly the prose needs to be  consistent. This consistency makes it easier on the readers.</p></blockquote>
<p><strong>Logical Consistency</strong></p>
<p>Logical consistency within an MRD requires us to pay attention to what we&#8217;re writing.  Applying the big rule of atomicity (one market requirement per written requirement) simplifies this quite a bit.  The biggest source of duplication comes from writing requirements that involve involve two related ideas.  The duplication is obvious when we find it, but with very large systems (and documents) it can be easy to overlook.</p>
<p>Avoiding contradictions can be harder.  We might write mutually exclusive requirements, or requirements that are independently attainable, but that neither can be realistically attained if they are both implemented.  For example, we could write a requirement that specifies near instantaneous search results, and we could write a requirement to include insanely large amounts of data (like the call logs for all customers of a telecom provider for all time).  While this is possible, it might not be <a title="Writing Attainable Requirements" href="http://tynerblain.com/blog/2006/06/07/writing-attainable-requirements/">attainable for our team</a>, who could easily implement a relatively innefficient search algorithm, or who could set up a very large data store.</p>
<p><strong>Grammatical Consistency</strong></p>
<p>Use of templates can provide a way to make individual requirements consumable.  They also help with the learning curve of people who regularly read the MRD &#8211; they set expectations, and when followed, make scanning of the documents more efficient.  The problem with templates is that not every requirement fits the same mold, and it can be cumbersome to squeeze the requirements into a stock format.</p>
<p><strong>External Consistency</strong></p>
<p>An MRD is <a title="Requirements Documents from Different Perspectives" href="http://tynerblain.com/blog/2006/05/11/requirements-documents-one-mans-trash/">one document in the flow of requirements</a> from market needs to product.  Often, an MRD is used to <a title="From MRD to PRD" href="http://tynerblain.com/blog/2006/01/24/from-mrd-to-prd-the-key-to-defining-a-spec/">drive the creation of a PRD</a>, and it captures a vision for the product and explanation of the relevant market research and how it applies to creating our product.  Occasionally, only one of the MRD / PRD documents is created.  Either a Software requirements specification (SRS) is created directly from the MRD, or the PRD is created in conjunction with other strategic documents (vision, roadmap, market research).  Different companies use different approaches, and there isn&#8217;t a generic <em>best answer</em>.</p>
<p>Regardless of <a title="Requirements Document Proliferation" href="http://tynerblain.com/blog/2006/01/20/document-proliferation/">the mix of documents we use</a>,  the documents exist to support each other.  Each document is a targeted expansion of the higher-level document.  We need to make sure we write each document at the same level of detail, and each supporting requirement at a level of detail &#8220;one step&#8221; beyond the requirement it supports.</p>
<p>This approach allows readers to know where to find the <em>big picture</em> view, and where to find the <em>devil in the details</em>.<br />
<strong>Conclusion</strong><br />
We have to make sure we don&#8217;t contradict ourselves logically.  We need to manage the level of detail that we use consistently within and across documents.  And templates can help us with using a consistent structure within a document.</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+Writing+Consistent+Requirements+http%3A%2F%2Fbit.ly%2Fg3UNkR+" 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/2006/06/09/big-ten-rules-writing-consistent-requirements/&amp;t=Writing+Consistent+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/2006/06/09/big-ten-rules-writing-consistent-requirements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Complete Requirements</title>
		<link>http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/#comments</comments>
		<pubDate>Fri, 09 Jun 2006 04:58:07 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[complete requirements]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/</guid>
		<description><![CDATA[One of the ten big rules of writing a good MRD is writing complete requirements.  We identify problems and opportunities in the market.  We determine that one of these problems is valuable enough and practical to implement.  Then we have to write the requirements, and make sure that the requirements will completely solve the targeted problem.]]></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%252F2006%252F06%252F08%252Fwriting-complete-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Complete%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F08%2Fwriting-complete-requirements%2F", "style": "big", "title": "Writing Complete Requirements" });</script></div>
<p><img alt="big ten logo" title="big ten logo" src="http://sehlhorst.smugmug.com/photos/128628589-M.png" /></p>
<p>One of the ten big rules of writing a good MRD is writing complete requirements.  We identify problems and opportunities in the market.  We determine that one of these problems is <a title="Writing valuable requirements" href="http://tynerblain.com/blog/2006/05/30/writing-valuable-requirements/">valuable enough</a> and <a title="Writing attainable requirements" href="http://tynerblain.com/blog/2006/06/07/writing-attainable-requirements/">practical to implement</a>.  Then we have to write the requirements, and make sure that the requirements will completely solve the targeted problem.</p>
<p><strong>The Big Rule of Writing Complete Requirements<br />
</strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>Simply put, if the requirement is implented as written, the market need is  completely addressed. No additional requirements are required. When writing a  specification, we may <a title="Composition in Requirements" href="http://tynerblain.com/blog/2005/12/07/composition-in-requirements/">use  decomposition</a> to break individual requirements into more manageable, less  abstract criteria.</p></blockquote>
<p><strong>No Silver Bullet</strong></p>
<p><img alt="bullet going through playing card" title="bullet going through playing card" src="http://sehlhorst.smugmug.com/photos/74332798-M.jpg" /></p>
<p>Unfortunately, there is no silver bullet that we can apply to make sure that a requirement is complete.  The best we can do is explicitly check it for completeness.  And there&#8217;s no gaurantee that we will be right &#8211; our analysis is only as good as we are.</p>
<p>Pragmatic Marketing has a <a title="Coffee mug for sale" href="http://www.cafepress.com/pragmaticmarket.53235680">coffee mug</a> that helps us with this.</p>
<p><img alt="pragmatic coffee mug" title="pragmatic coffee mug" src="http://images.cafepress.com/product/53235680v23_240x240_F.jpg" /></p>
<p>Their message is simple &#8211; use data to support everything from valuation to prioritization to completeness verification.  Don&#8217;t use opinion.</p>
<p>Imagine the following market problem for a mom-and-pop exterminator:</p>
<blockquote><p>We aren&#8217;t making enough money from quarterly treatments.  Our technicians are completely booked, but they spend at least three hours a day driving from job to job &#8211; double the industry average.  Our prices are competitive, and our costs are in-line with the industry.  We need our technicians to perform more treatments per day.  Spot checks of a few previous schedules revealed that travel time could be reduced by 70% if we reorganized the treatments to minimize travel time.</p></blockquote>
<p>We could write a product requirement as follows:</p>
<blockquote><p>We need software that determines the better routes for our technicians each day.  The optimal route is the one that requires the minimum travel time between each location, and between the office and the first location.  Our software must generate routes that are 50% better than our existing process.  Our dispatcher will be able to use these routes to plan each technicians schedule for the day.  Note: The dispatcher will communicate the daily schedule to each technician at the beginning of each shift.</p></blockquote>
<p><strong>Analysis</strong></p>
<p>We have data.  Prices and costs are reasonable, but profit is unacceptable.  Technician efficiency is the identified culprit.  We&#8217;ve written a software requirement that should provide us with an improvement.  We&#8217;ve assessed the potential value (50% reduction in travel time) and validated that it is feasible (70% reduction for manual spot-checks).  We&#8217;ve even established critera for testability of the requirement (50% improvement over existing process &#8211; we can use historical data to validate the software solution).</p>
<p><strong>Completeness</strong></p>
<p>Well, it looks complete.</p>
<p>In our example, however, we didn&#8217;t do enough research.  If we implemented software that provided more efficient routes, we would not get more efficient route execution &#8211; here&#8217;s why:<br />
Additional research reveals that 80% of the time, the technicians have to return to the office to pick up more treatment chemicals because they didn&#8217;t bring enough with them for the whole schedule, or they have to cancel the last job of the day to account for drive time to return left-over chemicals to the office.  The technicians can not take the pesticides home with them, and try to avoid a return trip to the office at the end of the day.  If they use up all of the chemicals, they can drive directly home from the last appointment.</p>
<p>We need to add a requirement that our software also include planning of the amount of chemicals to take on each day.</p>
<p><strong>Conclusion</strong></p>
<p>Completeness comes from analysis.  And our degree of completeness comes from the quality of our analysis.  There is no <em>silver bullet</em>, we just have to think.  Remembering to validate completeness, and base our decisions on data gets us half-way there, but we have to get ourselves the rest of the way there.</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+Writing+Complete+Requirements+http%3A%2F%2Fbit.ly%2FgqtyoN+" 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/2006/06/08/writing-complete-requirements/&amp;t=Writing+Complete+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/2006/06/08/writing-complete-requirements/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Writing Design-Free Requirements</title>
		<link>http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/#comments</comments>
		<pubDate>Sat, 03 Jun 2006 05:15:50 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[design-free requirements]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[requirements vs design]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F02%2Fwriting-design-free-requirements%2F", "style": "big", "title": "Writing Design-Free Requirements" }); One of the ten big rules of writing a good MRD is writing requirements that do not specify design. How do we specify enough detail to be actionable without constraining the engineering team? How do we trust our developers to do the right thing? 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%252F2006%252F06%252F02%252Fwriting-design-free-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Design-Free%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F02%2Fwriting-design-free-requirements%2F", "style": "big", "title": "Writing Design-Free Requirements" });</script></div>
<p><img title="big ten" alt="big ten" src="http://sehlhorst.smugmug.com/photos/128628560-M.png" /></p>
<p>One of the ten big rules of writing a good MRD is writing requirements that do not specify design.  How do we specify enough detail to be actionable without constraining the engineering team?  How do we trust our developers to <em>do the right thing</em>?</p>
<p><strong>The Big Rule of Avoiding Design-Agnosticism<br />
</strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>Generally, a requirement should not specifiy any of the implementation  choices. From a product manager’s perspective <a title="Requirements Documents mean different things to different people" href="http://tynerblain.com/blog/2006/05/11/requirements-documents-one-mans-trash/">the  requirement is the ‘what’</a> and the spec is the ‘how’. To a system designer or  architect or lead developer, the requirement serves as a ‘why’.</p></blockquote>
<p><strong>Reviewing the Flow of Requirements from the Market to the PRD<br />
</strong></p>
<p>Product managers begin by identifying a need in the market.  The need can either be a problem that needs solving, or an opportunity that awaits a solution.  Pragmatic Marketing teaches (and we agree) that people will pay more to solve problems than they will to address opportunities.  Our previous <a title="Process hinders innovation" href="http://tynerblain.com/blog/2006/06/01/process-trumps-people-innovation-articles/">article on innovation</a> touches on the demands to reduce costs (address pain) that overshadow the attempts to seize new markets (opportunities).</p>
<p>Once a problem has been identified in the market, the product manager will capture it in an MRD.  The MRD provides context for the entire project, and may include a vision statement and a product roadmap as well.  This vision is built upon the identified market needs.</p>
<p>A PRD identifies those market problems that are to be solved within the scope of a product.  The <a title="From MRD to PRD - the key to writing a good spec" href="http://tynerblain.com/blog/2006/01/24/from-mrd-to-prd-the-key-to-defining-a-spec/">transition from MRD to PRD</a> is an ideation process.  The product manager must determine which problems are worth solving (high enough <a title="Definition of ROI" href="http://tynerblain.com/blog/2006/02/01/definition-of-roi-return-on-investment/">ROI</a>) and <a title="Prioritizing requirements across releases" href="http://tynerblain.com/blog/2006/03/08/prioritizing-software-requirements-across-releases/">which problems should be solved earlier or later</a>.  The PRD captures a definition of the problems to be solved with this product.</p>
<p>The software requirements specification, or SRS, is created from the PRD.  This article is focused on the MRD, so covering the flow through the PRD is where we will stop.</p>
<p><strike><strong>To Act or Not To Act</strong></strike></p>
<p><img title="Yorick's skull" alt="Yorick's skull" src="http://sehlhorst.smugmug.com/photos/49865191-M.jpg" /></p>
<p><strike>Alas poor Product Manager.</strike>  [Ed: silly idea]<br />
<strong>Actionable Requirements</strong></p>
<p>The MRD identifies the market problems with enough information for someone to ask &#8220;How should we solve this?&#8221;  The creation of the PRD is the step where we say &#8220;We solve this one with our software, but not that one.  And do this one first.&#8221;</p>
<p>For an MRD to be actionable it needs to provide insight into the problem, without assuming a particular solution approach.  Software solutions are specified in the PRD.  Here are a couple examples.</p>
<p><strong>Bad</strong></p>
<ul>
<li>Our premium skateboards are losing market share.</li>
</ul>
<p><strong>Good</strong></p>
<ul>
<li>Our premium skateboards are losing market share to <a title="Tony Hawk bio" href="http://www.tonyhawk.com/bio.cfm">Tony Hawk&#8217;s</a> new high-end board.  We advertise in the same places, and have similar prices.  Tony introduces a new limited edition board every month, which quickly sells out.  His boards stay on the cutting edge of truck and bearing design, but his boards have half the life in tests that ours do.</li>
</ul>
<p><strong>Why is Good Good?</strong></p>
<p>With the comparative information, we know that our competitor has differentiated technology, and we have better quality.  This market research data (not opinion) allows us to make decisions about how we want to characterize and address the solution.  We have not specified a solution.</p>
<p><strong>Bad</strong></p>
<ul>
<li>We need to update our social-networking website.  Furl allows people to give ratings not just of linked pages, but also of other people.  Furl is doubling in traffic every quarter while we have no growth.  We need to add people-rating to meet our goal of doubling traffic every six months.</li>
</ul>
<p><strong>Good</strong></p>
<ul>
<li>Our social-networking site is not growing as fast as we want.  Furl is doubling in traffic every quarter.  They allow people to ratings to other people, not just to linked pages like our site.  We need to at least double our traffic every six months.</li>
</ul>
<p><strong>Why is Bad Bad? </strong></p>
<p>There is an implicit assumption in the bad example &#8211; that adding people-rating capabilities will improve our traffic.  The MRD should not include solutions, only identification of the problems.  We might decide that we think people-rating is irrelevant, and that we will solve this problem with a marketing program.  The research data is important, but the conclusions should not be drawn in the MRD.</p>
<p><strong>Conclusion</strong></p>
<p>Don&#8217;t draw conclusions in the MRD.  Provide the data only.  Conclusions represent design.</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+Writing+Design-Free+Requirements+http%3A%2F%2Fbit.ly%2FffjJR0+" 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/2006/06/02/writing-design-free-requirements/&amp;t=Writing+Design-Free+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Writing Concise Requirements</title>
		<link>http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/#comments</comments>
		<pubDate>Thu, 01 Jun 2006 04:06:38 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[concise requirements]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[verbose requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/</guid>
		<description><![CDATA[One of the ten big rules of writing a good MRD is writing concise requirements. We have to minimize the amount we write to avoid information overload. We also need to make sure we write enough to get the message across. How do we strike the balance?]]></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%252F2006%252F05%252F31%252Fwriting-concise-requirements%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Concise%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F05%2F31%2Fwriting-concise-requirements%2F", "style": "big", "title": "Writing Concise Requirements" });</script></div>
<p><img alt="Big Ten Logo" title="Big Ten Logo" src="http://sehlhorst.smugmug.com/photos/128628545-M.png" /></p>
<p>One of the ten big rules of writing a good MRD is writing concise requirements. We have to minimize the amount we write to avoid information overload.  We also need to make sure we write <em>enough</em> to get the message across.  How do we strike the balance?</p>
<p><strong>The Big Rule of Brevity</strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>Easy to read and understand. If only it were that easy. For whom is it easy  to read? A market requirements document (MRD) is written for several different  people on the team. It provides a vision of what problems our product solves. It  provides clarification to the implementation team. It also sets expectations  with stakeholders. Different people on the team have <a title="Intimate Domains" href="http://tynerblain.com/blog/2005/12/02/intimate-domains-%e2%80%93-navigating-areas-of-expertise/">different  domains of expertise</a> &#8211; we have to write requirements that are easily  understood by all of them.</p></blockquote>
<p>The primary goal of concise writing is to improve communication and retention of ideas.  The goal is not to save time.  It takes more time to write less.  Trust me on this.</p>
<p>How do we confirm effective communication?</p>
<p><strong>Confirm Personally</strong></p>
<p>The only way to confirm that the reader of a document understood what the author wrote is to ask him.  &#8220;Did you understand?&#8221; doesn&#8217;t work.  We have to create a feedback loop where the reader can give us confirmation that they understood.  Teachers would do this in the essay portion of a literature exam &#8211; <em>&#8220;In your own words, what did the author mean by&#8230;?&#8221;</em></p>
<p>We can get this feedback by directly speaking with the reader and using <a title="Top Ten Ways to Be A Better Listener" href="http://tynerblain.com/blog/2006/01/27/top-five-ways-to-be-a-better-listener/">active listening skills</a> to confirm that the reader understood the key concepts.  The goal isn&#8217;t to correct the person&#8217;s understanding <em>during the conversation</em>.  Rather, any misunderstanding is a &#8220;bug&#8221; in the documentation.  We use those gaps to update our document, and then validate that the changes are understood.</p>
<p><strong>Confirm Indirectly</strong></p>
<p>A less effective technique, but one that might be required when working with a geographically distributed team is to infer levels of understanding by reviewing the output of the reader.  We can potentially confirm that the reader understood the requirement by validating &#8216;the next step&#8217; in the process.  We can confirm that a business analyst understands the market requirement by validating the software specification that she creates.  If the spec &#8216;completely covers&#8217; the requirement, and does not introduce new ideas, then we know that the requirement was understood.  If the spec is inadequate, then it may be due to mis-communication, or lack of competence.</p>
<p>As product managers, we aren&#8217;t in a position to validate the designs created by the implementation team, so this approach generally will not work for validating a spec.  We may have the skills (perhaps we previously were developers or designers), but we should not try and do this &#8211; we risk getting caught in the weeds.</p>
<p><strong>Improving Our Writing</strong></p>
<ul>
<li>Requirements documents need to be scannable, much like web pages or articles.  Readers need to be able to refer back to a particular requirement repeatedly to understand how to validate their work.  We also need to be able to verify the requirement.  Use of lists and short paragraphs help with referenceability and scanning.</li>
<li>We have to be on the lookout for repetitive content within a requirement.  The repetition at best is hard to read, and at worst is self-conflicting.</li>
<li>We can include examples.  Examples are often very illustrative of an idea.</li>
<li>We can include <a title="Using OOA diagrams" href="http://tynerblain.com/blog/2005/12/09/a-picture-is-worth-a-thousand-requirements/">OOA diagrams</a>.  Entity-relationship diagrams, when the reader knows how to interpret them, are very effective both for precise documentation, and for concise documentation.  Remember that we are diagramming the problem, not the solution.</li>
</ul>
<p><strong>Conclusion</strong></p>
<p>Write no more and no less that you have to.  Confirm that the readers understand what you intend.</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+Writing+Concise+Requirements+http%3A%2F%2Fbit.ly%2FhGvMfl+" 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/2006/05/31/writing-concise-requirements/&amp;t=Writing+Concise+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/05/31/writing-concise-requirements/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

