<?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; Design</title>
	<atom:link href="http://tynerblain.com/blog/category/software-development/design/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Thu, 02 Sep 2010 21:53:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Making Offshore Design Work</title>
		<link>http://tynerblain.com/blog/2008/05/14/offshore-design/</link>
		<comments>http://tynerblain.com/blog/2008/05/14/offshore-design/#comments</comments>
		<pubDate>Thu, 15 May 2008 03:39:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[off-shoring]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[offshoring design]]></category>
		<category><![CDATA[outsourcing design]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=679</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F05%2F14%2Foffshore-design%2F", "style": "big", "title": "Making Offshore Design Work" });

When companies first start off-shoring, they usually send the &#8220;low level&#8221; implementation work overseas first, to work out the process kinks and manage risk.  Over time, your valued, domain-aware developers will perceive a lack of career opportunities with this limited role.  Naturally, you [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F05%252F14%252Foffshore-design%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Making%20Offshore%20Design%20Work%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F05%2F14%2Foffshore-design%2F", "style": "big", "title": "Making Offshore Design Work" });</script></div>
<p><img src="http://www.smugmug.com/photos/295434701_AKMnM-L.jpg" alt="offshore oil rig" width="250" height="191" /></p>
<p>When companies first start off-shoring, they usually send the &#8220;low level&#8221; implementation work overseas first, to work out the process kinks and manage risk.  Over time, your valued, domain-aware developers will perceive a lack of career opportunities with this limited role.  Naturally, you will want to consider sending design work offshore too.  You can make it work.  If you do it wrong, you&#8217;re toast.</p>
<p><span id="more-679"></span></p>
<h2>Different Models for Offshore Development</h2>
<p>There are many ways to organize software-creation teams (where creation includes product management, design, development and testing).  When developing an organizational design that incorporates elements of off-shoring, there are <a title="four offshoring models for software development" href="http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/">four primary models for outsourced software creation</a>.</p>
<ol>
<li><strong>No offshore development at all</strong>.  Occasionally referred to as insourcing, this is the traditional &#8220;everyone in one place&#8221; model &#8211; or at least &#8220;everyone in similar time zones.&#8221;</li>
<li><strong><a title="low-level offshore development" href="http://tynerblain.com/blog/2008/05/05/offshore-development/">Low-level outsourcing</a></strong>.  The implementation teams (both coding and testing) are located offshore, with design and product management staying local.</li>
<li><strong>High-level outsourcing</strong>.  The focus of this article.  Keeping product management &#8220;local&#8221; but moving design and development responsibilities offshore.</li>
<li><strong>Complete technical outsourcing</strong>.  Everyone except the product manager is offshore.</li>
</ol>
<p>The models can be most easily compared when the same process is compared in each &#8211; just with different locations.  Co-location of team members has an impact when comparing face-to-face communication with online / phone / remote communication. But this factor is not a primary one in influencing team-decisions &#8211; it is no different than having someone who works from home. The key element in team dynamics is a dramatic shift in timezones.</p>
<p>This timezone shift causes a latency in the communication process, illustrated by the following example:</p>
<blockquote><p>Imagine the following expensive question and answer session:</p>
<ul>
<li>Person A asks person B a question.</li>
<li>12 hours later, person B responds with a request for a clarification.</li>
<li>12 hours later, Person A clarifies the question.</li>
<li>12 hours later, Person B responds with an answer.</li>
<li>12 hours later, Person A acknowledges the answer.</li>
</ul>
<p>When this communication channel happens between an onshore person and an offshore person, it takes <strong>48 hours</strong> instead of 48 minutes. The more this happens, the more expensive it is to outsource. The key to making low-level outsourcing work cost effectively is to minimize the impact of this communication latency, while realizing the benefits of lower salaries in the offshore location.</p>
<p><a title="low-level offshore development" href="../2008/05/05/offshore-development/" target="_blank"><cite>Making Offshore Development Work</cite></a></p></blockquote>
<p>This is why proper communication design is the make-or-break element of making collaborative teams work when using an outsourcing model that involves anyone being offshore.</p>
<h2>High-Level Outsourcing</h2>
<p>Consider the following software development process diagram (from <a title="four offshore development models" href="../2006/03/31/four-outsourcing-models-for-software-development/" target="_blank"><em>Four Application Development Outsourcing Models</em></a>):</p>
<p><img src="http://sehlhorst.smugmug.com/photos/62418699-L.jpg" alt="high level outsourcing process flow" width="401" height="800" /></p>
<p>In this off-shoring process flow diagram, the shaded areas represent the activities that happen offshore. Note that this is the exact same process flow that is used to describe the other outsourcing models. The difference from other models is primarily where resources are located, but also the relevant scope of responsibility. In comparison with <a title="making low-level outsourcing work" href="../2008/05/05/offshore-development/" target="_blank">low-level outsourcing</a>, the only difference in the process flow is that responsibility for test design and solution design is transitioned to the offshore development team.</p>
<h2>Artificial Boundary</h2>
<p>This model creates a bit of an artificial boundary between the “interpret requirement” step and the “design solution” and “design tests” steps. This artificial boundary creates a potentially odd dynamic within the team.</p>
<p>To make reading easier, we’ll talk about the development side of the process flow only, but the same ideas apply on the testing side.</p>
<p>This model has one developer interpreting requirements, and a different developer doing the design work. In an insourcing model, those two developers are usually the same person. In large development teams, a common breakout here is architect versus senior designer. The architect (the figure on top) would be responsible for those design considerations that span the enterprise and the senior designer would be responsible for those design considerations that affect a single application. Here’s a good background article by Scott Ambler on <a title="enterprise architecture approach" href="http://www.enterpriseunifiedprocess.com/essays/enterpriseArchitecture.html" target="_blank">approaching enterprise architecture</a>.</p>
<p>Why have an artificial boundary? Because this model is an emergent design.</p>
<ol>
<li>A company starts with low-level outsourcing.</li>
<li>The offshore developers complain about a lack of growth opportunities (both career and skill).</li>
<li>Executives are not prepared to completely outsource all technical work (risk aversion), or the team is not ready to succeed with that approach.</li>
</ol>
<p>Splitting the “interpret requirements” task from the “design a solution” task is a compromise. It minimizes the risk associated with providing growth opportunities to offshore team members. That risk is minimized by avoiding the high-latency communication channel (from onshore to offshore) when communicating requirements. Instead, the interpretation of the requirements is done onshore, and that interpretation is communicated.</p>
<p>You can argue that this model is the offspring of a trust issue within the organization. A company can absolutely say “We want growth opportunities for our offshore team members” and at the same time say “We are not ready to relinquish complete technical control.” This is definitely a trust issue, and therefore a <em>perceived</em> risk mitigation strategy. The risk may be very real, or non-existent. In either case, it is emotionally present.</p>
<h2>Vague Scope and Role Conflict</h2>
<p>If, while reading this, the notion of splitting interpretation from design feels uncomfortable, that’s because it is. For many teams that are <em>evolving</em> their outsourcing model, it feels uncomfortable, but it feels less uncomfortable than releasing complete technical control.</p>
<p>One problem, which I completely grok as a former developer, is that it is almost impossible to interpret requirements without imagining designs. But this model has different people performing the different tasks. So should the interpreter just discard those designs? Presumably the interpreter is more experienced, certainly more knowledgeable about the domain. It would be a shame to discard those design insights.</p>
<h2>Robbing Peter to Pay Paul</h2>
<p>This approach has clear benefits for the offshore developers who are now presented with growth opportunities. Unfortunately, you run the risk of sucking the fun out of the role of the interpreter &#8211; a senior, experienced developer with domain knowledge. While proper requirements interpretation can be fun, it usually is not fun for a developer. Only requirements people will enjoy those nuances, generally.</p>
<p>You risk eliminating a career path and growth opportunities for your onshore resources with this model.</p>
<h2>Division of Labor</h2>
<p>One approach that keeps the growth opportunities open for your senior onshore technical resources is to have them play multi-product, or architectural roles. This presents an opportunity for these individuals to apply organizational insights across products, finding synergies between applications and driving consistency and consolidation among applications. You essentially split the responsibilities “broad and deep” where the onshore designer is looking across the portfolio and the offshore designer has ownership responsibilities for a single application or scope. This is similar to the division of responsibilities that works well for tackling <a title="enterprise product management is broad and deep" href="../2008/01/23/enterprise-product-management/" target="_blank">enterprise product management</a>.</p>
<p>Instead of preventing communication of requirements across the high-latency channel, it minimizes it. The onshore designer acts as the liaison between multiple offshore designers, fielding interpretation questions, and more effectively, preventing them. Developers have a language all their own. Through a shared perspective on common experiences, they can communicate very efficiently &#8211; by analogy, <a title="symbolism and communication" href="../2006/02/12/symbolism-and-communication/" target="_blank">symbolically</a>, and via design patterns. These communication opportunities (between like-minded individuals) can have very high information density. For example, one developer can say “MVC pattern” to another, and that serves more effectively to communicate an approach to designing a solution (and a context / interpretation of requirements) far more efficiently than a product manager describing requirements that multiple tools and platforms should expose the same set of capabilities or behaviors [and that is overly short, because I don't feel like typing a comprehensive explanation of the <a title="MVC pattern at wikipedia" href="http://en.wikipedia.org/wiki/Model-view-controller" target="_blank">MVC pattern</a>].</p>
<p>Another approach is to <em>silo</em> the developers vertically &#8211; having some applications (or modules) following a low-level outsourcing model, and others practicing complete technical outsourcing. Any given team is operating discretely with a clearly defined set of responsibilities. The teams may just be operating differently. Essentially, you’re saying that your “average” is high level outsourcing, even though it is really a mix of two models. This doesn’t really count, since none of your teams are addressing the communication challenges of this model &#8211; your company is leapfrogging over it, but choosing to mitigate risk by doing it a little bit at a time.</p>
<p>You can also take the approach of having the onshore designer be responsible for over-arching and high-complexity design issues, with offshore designers owning more straightforward and lower risk design activities.</p>
<p>The best approach for maximizing your team’s effectiveness (and your HR goals) will be overwhelmingly determined by the individuals involved. If you’re in a large company, you probably don’t get to maximize team effectiveness &#8211; you are likely to be forced into a particular model. If you’re doing the forcing, recognize that one size does not fit all.</p>
<h2>High Latency Communication And Designing</h2>
<p>When circling back to the main challenge of offshoring &#8211; communication &#8211; you need to look at the nature of the communication that is subject to the high-latency of temporal displacement within the team. The key to making this model work is to leverage the efficiency of cross-talk between developers. That means having experienced people on both the offshore and onshore teams who share common design backgrounds (patterns, analogies, examples) and deep domain understanding (reducing the provision and clarification of <a title="It is all about context" href="../2006/11/09/requirements-context/" target="_blank">context </a>across the communication channel).</p>
<p>Design reviews are also very effective at eliminating the impact of this latency on communication. Design reviews typically happen as follows:</p>
<ol>
<li>Designer A spends time creating design based on an interpretation of requirements.</li>
<li>Designers A &amp; B get together and review the design in a relatively short meeting (or Designer B reviews a design document). Feedback is delivered in a burst.</li>
<li>Designer A spends time updating the design based on feedback from step 2.</li>
<li>Return to step 2 as many times as is needed.</li>
</ol>
<p>There is a big chunk of work involved in incorporating feedback from a design review. This can be folded into the “white space” between communications. In other words, while designer B is sleeping for the night, designer A is making updates. This looks like, <span style="text-decoration: underline;">but is not</span> the <a title="follow the sun" href="http://blogs.computerworld.com/node/1005" target="_blank">follow-the-sun</a> pattern.</p>
<blockquote><p>The follow-the-sun pattern is one where someone is always working. I’ve made this work on a project where there were two teams working 12 hour shifts with a 4 hour overlap (and a 4 hour “blackout”). Note &#8211; that isn’t sustainable, just anecdotal. I think the linked article is right, commonly, follow-the-sun implementation does not work, for the reasons cited in that article.</p></blockquote>
<p>What makes this very different is that we are <em>synchronizing</em> the naturally-occurring time lag between design reviews with the geographically-induced time lag in communication.</p>
<h2>Conclusion</h2>
<p>The strategy for successfully utilizing offshore resources for both implementation and design starts and ends with communication. It also requires attention to your specific people and their career aspirations.</p>
<ul>
<li>Utilize design reviews to take advantage of serendipitous time-lags in the communication cycle.</li>
<li>Assure that your role definitions are clear, and aligned with the aspirations of the people on your team.</li>
<li>Follow the <a title="effective offshore development process" href="../2008/05/05/offshore-development/" target="_blank">tips for effective offshore development</a> &#8211; this strategy builds on that one, it does not replace it.</li>
</ul>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Making+Offshore+Design+Work+http://bit.ly/2QIv6E+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/05/14/offshore-design/&amp;t=Making+Offshore+Design+Work" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/05/14/offshore-design/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Measuring the ROI of Design</title>
		<link>http://tynerblain.com/blog/2007/07/30/measuring-the-roi-of-design/</link>
		<comments>http://tynerblain.com/blog/2007/07/30/measuring-the-roi-of-design/#comments</comments>
		<pubDate>Tue, 31 Jul 2007 04:04:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[measuring design investments]]></category>
		<category><![CDATA[measuring roi]]></category>
		<category><![CDATA[roi of design]]></category>
		<category><![CDATA[ucd]]></category>
		<category><![CDATA[user centered design]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/07/30/measuring-the-roi-of-design/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F07%2F30%2Fmeasuring-the-roi-of-design%2F", "style": "big", "title": "Measuring the ROI of Design" });

Measuring the return on investments in design may be the hardest ROI calculation you can do.  It certainly is one of the rarest.  To measure ROI, you have to be able to determine what would happen without the investment, and what happens [...]]]></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%252F30%252Fmeasuring-the-roi-of-design%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Measuring%20the%20ROI%20of%20Design%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F07%2F30%2Fmeasuring-the-roi-of-design%2F", "style": "big", "title": "Measuring the ROI of Design" });</script></div>
<p><img alt="unicorn" title="unicorn" src="http://sehlhorst.smugmug.com/photos/178789160-M.jpg" /></p>
<p>Measuring the return on investments in design may be the hardest ROI calculation you can do.  It certainly is one of the rarest.  To measure ROI, you have to be able to determine what would happen without the investment, and what happens with the investment.  The difference between them is what happened <em>because</em> of the investment.</p>
<p><span id="more-549"></span></p>
<h2>Fast Company Interview</h2>
<p>Bill Breen posted an <a title="rob wallace" href="http://blog.fastcompany.com/archives/2007/07/26/proving_the_value_of_design.html">interview with Rob Wallace</a> on the Fast Company blog about proving the value of design.  The start of Bill&#8217;s article lets us know that measuring the ROI of design (ROD) is so rare that it may be impossible or impractical to do.  He points to a Whirlpool survey of 15 design-focused companies &#8211; most of whom were &#8220;clueless&#8221; about the return on their design investments.</p>
<p>Rob explains that the reason for measuring the ROI of design investments is that ROI is the language of executives.  &#8220;If you can&#8217;t measure it you can&#8217;t manage it. Businesspeople operate in a world of numbers.&#8221;  Simply put, if you want to make someone invest in design, you have to show them why they should invest in design.  One way to get a company to invest in design is to convince the <a title="voting on scope and vision" href="http://tynerblain.com/blog/2007/04/20/apr-scope-and-vision-vote-1/"><em>benevolent dictator</em> in charge of the product</a> (or company) of the <em>subjective merits</em> of having good design.  Apple is a great example of a company with a leader who is passionate about design.  And you can argue that the Zune (from Microsoft) has had meager success against  Apple&#8217;s iPod due to shortcomings in design.  But can you <em>objectively</em> argue the point?</p>
<h2>Argument by Extension</h2>
<p>After Rob mentions that there is a dearth of measurement of design ROI, Bill challenges Rob&#8217;s premise &#8211; why should we expect that there <em>is</em> an ROI for design?  Rob cites a series of studies done on Fortune 500 companies:</p>
<blockquote><p>On average, based on two dozen case studies with Fortune 500 companies, for every dollar invested in advertising, packaging and promotion, and visual communication at the point of sale, companies realized a $7.21 ROI. But when the advertising didn&#8217;t change (or there was no advertising)—<em>and packaging design was the only thing that did change</em>—there was a $15.17 average ROI on every dollar invested.</p></blockquote>
<p>Based on this data, Rob argues, it is easy to extend that if packaging (design) changes can yield ROI, then so to will product design changes.</p>
<h2>Insights from Adaptive Path</h2>
<p>Peter Merholz, President and founding partner of Adaptive Path wrote on <a title="Value of design" href="http://www.adaptivepath.com/ideas/essays/archives/000045.php">communicating the value of design</a> in Aug. 2002.  In his article, based on a breakout session, the AIGA&#8217;s 5th Advance for Design Summit, he shares a series of internal benefits that they found to be more significant (or at least more measurable) than external benefits.</p>
<blockquote><p>As we continued listing the value of our user experience design work, a more intriguing realization emerged — the bulk of our value comes from the efficiency that we can create in a company’s operations.</p></blockquote>
<p>Some of the areas they identified are:</p>
<ul>
<li>Smarter Product Development Processes</li>
<li>Lowered Maintenance Costs</li>
<li>Less Internal Documentation</li>
<li>Maximized IT Investments</li>
<li>Scalability</li>
</ul>
<h2>Our Concerns</h2>
<p>One challenge for each of these sources of ROI is that you can&#8217;t truly isolate the benefits &#8211; you would never have two teams design products for the same market, with differing levels of design investment, with a resultant analysis of project costs.  Even if you did, you wouldn&#8217;t be able to isolate the impact that the team members had.  You have to look at historical data, which introduces enough variables to question the validity of any quantitative conclusion.</p>
<p>Further, we will show that each of these is either a weak proposition, or potentially very false one.</p>
<p><strong>Smarter Product Development Processes</strong>.   No one has concretely identified a design-centric, purely agile, or structured requirements approach as being the best one.  At least where best is defined as most profitable.  Even the <a title="agile vs ux" href="http://tynerblain.com/blog/2006/03/07/interaction-design-explained-by-alan-cooper/">debate between Alan Cooper and Kent Beck</a> highlighted more &#8220;stylistic differences&#8221; than quantified differences.  There are elements of genius in each approach.  Incorporating the needs of users is key to an effective design.  Incremental delivery and incorporation of feedback is incredibly efficient.  Tracing decisions, designs and requirements to the ultimate goals for the software is key to building the right software.  If there is a &#8220;perfect process&#8221;, it is one that incorporates elements from all three disciplines.  And as such &#8211; there is value to incorporating design into the process.  We can&#8217;t quantify it, but we are convinced that it is there.   And based on the <a title="economics of fixing bugs" href="http://tynerblain.com/nexus/article/show/44-why-agile-software-development-techniques">economics of when software problems are fixed</a>, we believe that investments in design early in the cycle will yield positive returns.</p>
<p><strong>Lowered Maintenance Costs</strong>.  There are a couple ways this benefit might be inferred.  First, <a title="better design yields lower costs" href="http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/">better design yields easier to maintain code</a>.  This is primarily a premise of agile development (where the design decisions are what Cooper calls <em>program design</em>), but perhaps the benefits also apply to interface design.  Often, good interfaces simplify the complexity of, or at least obscure the means of implementation.  Those interfaces are not necessarily easier to maintain.  One reason complexity leaks through to users in a lot of software is that it is easier to code it that way.  This value-prop probably doesn&#8217;t hold water.</p>
<p><strong>Less Internal Documentation</strong>.  The better the design of the interface, the less you need to teach someone how to use it.  There is definitely potential for reduced external documentation, or producing the same amount of documentation may cost less, as it is easier to understand the product.  It isn&#8217;t clear how internal documentation needs can be reduced by good design.  Except perhaps that a picture is worth a thousand words.  But a great picture may take as long to draw as it does to write a thousand words.</p>
<p><strong>Maximized IT Investments</strong><em>.</em>  This is simply self-referential.  Maximizing investments yields higher ROI.  But in what way?</p>
<p><strong>Scalability</strong>. Better design, from a user perspective does not imply that software will be more scalable.  And often in an implementation, when user-tasks are simplified (by automating steps in the process), those decisions don&#8217;t disappear.  By removing the burden from the users, you often add it to the software.  However, Peter may have been talking about scalability of the team &#8211; the ability to leverage design investments across products (sharing branding, metaphors and workflow paradigms).  In other words, design <em>re-use</em>.  In that case, there is definitely a benefit, but re-usable design, while cheaper than green field design, is more expensive than no design.</p>
<p><strong>Support Costs</strong>.  One <em>external</em> benefit that Peter does identify is the reduced burden for training and support.  Many software companies actually have profitable businesses built on support and training.  Unfortunately, reducing the demand for those would reduce the profitability along that dimension.</p>
<h2>Where We See Value</h2>
<p>Fundamentally, we don&#8217;t perceive design investments as being significant cost reductions &#8211; we see them as significant revenue enhancers.  Better design yields increased usage, more efficient usage, increased satisfaction, and <a title="word of mouth marketing from improved usability" href="http://tynerblain.com/blog/2007/01/10/usability-sells-software/">increased word of mouth marketing</a>.</p>
<p><strong>Increased Usage</strong>.  ROI forecasts are often built upon estimations (or suppositions) of levels of user adoption.  As an example, consider the &#8220;Buy it now&#8221; button on eBay auctions.  When people click on the &#8220;Buy it now&#8221; button, the auction is closed, and the transaction occurs at a fixed price.  People are more likely to sell an auctioned item (generating a commission) by encouraging an impulse shopper.  The seller risks getting less than they otherwise would, in exchange for the buyer knowing that they can get the item they want.  Fewer auctions will expire unexecuted.  More commissions are generated for eBay.  Comparisons of final selling prices (and commissions to eBay) of equivalent items with and without the button can be done to measure the return.</p>
<p><strong>More Efficient Usage</strong>.  Better designs make it easier for users to do what they want to do.  Easier often equates to faster.  A call-center application that simplifies data access for the operator will allow them to process calls more quickly.  The employer ends up with higher throughput from the call center.  This throughput can be used to reduce costs, or increase customer satisfaction (with reduced &#8220;time per call&#8221; stats, or better experiences for the callers), or some of each.  Comparing the results of operators using the new system versus the old system will yield measurable data.</p>
<p>Peter mentioned reduced training costs &#8211; and we see that as an external benefit that comes from accelerating a user&#8217;s growth from new user to proficient or even expert user.  <a title="user centered design benefits" href="http://tynerblain.com/blog/2007/02/22/user-centered-design-bridge/">Bridging the canyon of pain</a> to get to higher usage rates and more efficient usage faster.  This also leads to increased satisfaction by creating more satisfied users more quickly.</p>
<p><strong>Increased Satisfaction</strong>.  Customer or user satisfaction surveys may be the only way to approximate (not really measuring) this benefit.  And it isn&#8217;t clear that X% increase in satisfaction leads to Y% increase in sales.  But it is likely to lead to increased sales, and may also lead to increases in sales of other products by the same company.  Apple leverages this affect across its family of synergistic products.  Perhaps a Bayesian analysis of survey results and sales stats could identify the strength of a correlation between satisfaction and sales.  That would be expensive to do, but would lead to quantified <em>estimates</em> of the return.</p>
<p>Ultimately, you raise the <a title="definition of utility" href="http://tynerblain.com/blog/2007/02/06/foundation-series-intro-to-utility-curves/">utility</a> of the software for the user. By increasing the value to the user, you increase their satisfaction, and thereby increase the likelihood that they will encourage other people to buy and use your products.</p>
<p><strong>Increased Word of Mouth Marketing</strong>.  When your customers become your sales people, you get more sales than you would have without those recommendations.  Perhaps comparisons of growth curves for products with varying degrees of customer satisfaction (or varying degrees of &#8220;free publicity&#8221; &#8211; like reviews, blog articles, etc) would yield some predictive insight.  Web 2.0 successes have been predominantly built on word-of-mouth.  And their growth curves are exponential (as would be the propogation of good words from satisfied mouths).  Does anyone know of analyses that validate this?</p>
<h2>Conclusion</h2>
<p>Design investments yield benefits.  <em>The</em> way to measure those benefits is still up for debate.  Some folks believe the benefits are primarily internal &#8211; we believe that the benefits are external</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Measuring+the+ROI+of+Design+http://bit.ly/NoMpz+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/07/30/measuring-the-roi-of-design/&amp;t=Measuring+the+ROI+of+Design" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/07/30/measuring-the-roi-of-design/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>APR: Information Architecture &#8211; Faceted Navigation</title>
		<link>http://tynerblain.com/blog/2007/05/16/apr-ia-faceted-navigation/</link>
		<comments>http://tynerblain.com/blog/2007/05/16/apr-ia-faceted-navigation/#comments</comments>
		<pubDate>Thu, 17 May 2007 03:23:29 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Project: Ratings]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></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[ia]]></category>
		<category><![CDATA[information architecture]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[nexus]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/05/16/apr-ia-faceted-navigation/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F05%2F16%2Fapr-ia-faceted-navigation%2F", "style": "big", "title": "APR: Information Architecture - Faceted Navigation" });

In our previous article in the series on the development of nexus, we discussed navigation and information architecture.  We identified the challenge of filtering articles by category and by level of experience (beginner / expert), while also viewing the articles along a [...]]]></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%252F05%252F16%252Fapr-ia-faceted-navigation%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22APR%3A%20Information%20Architecture%20-%20Faceted%20Navigation%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F05%2F16%2Fapr-ia-faceted-navigation%2F", "style": "big", "title": "APR: Information Architecture - Faceted Navigation" });</script></div>
<p><img title="facets" alt="facets" src="http://sehlhorst.smugmug.com/photos/153425154-M.jpg" /></p>
<p>In our previous article in the series on <a title="open agile project" href="http://tynerblain.com/blog/2007/04/17/agile-software-development-experiment/">the development of nexus</a>, we discussed navigation and <a title="nexus information architecture" href="http://tynerblain.com/blog/2007/05/15/apr-information-architecture/">information architecture</a>.  We identified the challenge of filtering articles by category and by level of experience (beginner / expert), while also viewing the articles along a characteristic (most-viewed, highest-rated, etc).  Between both url-creation and visible site-navigation, the challenge we explored was how to present one facet or dimension as primary and others as secondary.</p>
<p>One of our readers presented a third alternative &#8211; faceted navigation.</p>
<p><span id="more-497"></span><a title="Scott's site" href="http://www.scottweisbrod.com/">Scott Weisbrod</a> commented:</p>
<blockquote><p>Have you considered using faceted navigation? Faceted navigation means that level of expertise, category of article, and chosen approach can all live at the same level.</p>
<p>Therefore, as a user, I can pick the facet by which I want to begin navigating the site. For some, level of expertise is the most sensible place to start. Others will want to begin their search by category or even chosen approach.</p>
<p>Why not surface all of them and let your users pick the most appropriate starting place?</p></blockquote>
<p>He also suggested looking at <a title="The Guardian" href="http://browse.guardian.co.uk/search"><em>The Guardian&#8217;s</em> search page</a>.  You get the idea by interacting with the controls in the sidebar &#8211; we&#8217;ll try and explain here with a static image, but go check it out.<br />
<img title="guardian search-browse filter" alt="guardian search-browse filter" src="http://sehlhorst.smugmug.com/photos/153425174-M.jpg" /></p>
<p>The left sidebar shows a list of &#8220;active filters&#8221; (initially empty), and as you click to &#8220;add search filters&#8221; you narrow down the choices.  Amazon.com also uses this approach, for narrowing by product category, price range, supplier, etc.  While it may encourage an element of precedence, it allows users to filter choices in whatever sequence they desire.  This is very cool presentation (in the two-dimensional sense).</p>
<p>When we started exploring our approaches, we were also concerned about how the URL looks, both for providing context to users and for sharing with others.  Unlike the Guardian, this is the main navigation for our site &#8211; not just an admittedly cool way to do browse/search.  If we look at a URL from their site, with facets selected, we see <code>http://browse.guardian.co.uk/search/all/Politics/Labour+party? month=07&#038;lDim=N%3D4294962719%2B4294962540%2B4294963588%2B3098 &#038;year=2002&#038;N=4294962719+4294962540</code>.  Not a very pretty picture [ed: spaces added to line-wrap the URL].  It exposes the implementation (looks like an <a title="olap cubes explained" href="http://en.wikipedia.org/wiki/OLAP_cube">OLAP cube</a> database to me).  More importantly, it would confuse anyone trying to read it, and might even dissuade them from clicking on the link if it were shared in an email.</p>
<h2>Nexus Implementation</h2>
<p>Luckily for us, we did three things today.  First, we decided that we agreed with Bob, at least enough to include the <em>experience level</em> dimension in our initial implementation (it added less than an hour of work).  Second, we took an implementation approach that would actually support this faceted navigation presentation.  Third, while we implemented it with a <em>hierarchical presentation</em>, we stuck to the Ruby on Rails convention of separating the presentation from the implementation.</p>
<p>This affords us the opportunity to refactor the presentation to look more &#8220;faceted&#8221; and less hierarchical.</p>
<p>Here&#8217;s what the navigation elements in the latest version in source control look like:</p>
<p><img title="nexus navigation bars" alt="nexus navigation bars" src="http://sehlhorst.smugmug.com/photos/153430658-M-0.jpg" /></p>
<p>The top bar is clearly a hierarchical parent.  It establishes context (articles or users, or your own page, etc).  It also shows a &#8220;categories first&#8221; navigation bar.  However, that navigation doesn&#8217;t &#8220;reset&#8221; the other choices.</p>
<p>If you&#8217;re looking at <em>beginner</em> product management articles, organized by their ratings, and you click on &#8220;Business Analysis&#8221; &#8211; you will see business analysis articles, <em>for beginners, organized by highest rating</em>.  In effect, we have a faceted navigation implementation under the hood.  We just presented it hierarchically.  Note that we also agreed with Bob, and put <em>experience level</em> filtering &#8220;above&#8221; the organizational sorting (most read, etc) of the articles.</p>
<p>We critiqued <em>The Guardian</em>&#8217;s URL structure.  We should look at ours.  The URL for an example above would be <code>http://tynerblain.com/nexus/business_analysis/beginner/highest_rated/</code>.  Incredibly easy to know exactly what to expect before clicking on that link.  We can also extend this approach in a couple ways &#8211; we can add more skill levels or categories, we can add more sorting options (highest rated reviews, etc), and we can add subcategories (like testing:test-automation).  We won&#8217;t add any subcategories until we have enough articles to warrant it.  I think we can even add sub-categories selectively (have them for testing, but not business analysis, for example).</p>
<h2>Design Conclusion</h2>
<p>I am happy with the <em>under-the-hood</em> design, for both being extensible enough for likely future needs, and being adaptable enough to work with either a hierarchical or faceted presentation.</p>
<p>In order to get the alpha release launched as soon as possible, we will keep the &#8220;hierarchical-looking, faceted navigation&#8221; in place for the first limited release.</p>
<h2>How You Can Help</h2>
<p>In order to really get a feel for the effectiveness of the navigation, we have to have some critical mass of articles on the site &#8211; I would think at least 100.  Please spend a few minutes to queue up some great articles to be reviewed &#8211; and when we release the alpha, submit those articles.  Every page will include an &#8220;article count&#8221; in the sidebar &#8211; and when we get to 100, start evaluating the navigation and let us know how it works for you.</p>
<p>Thanks in advance!</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+APR%3A+Information+Architecture+%E2%80%93+Faceted+Navigation+http://bit.ly/Tpy5T+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/05/16/apr-ia-faceted-navigation/&amp;t=APR%3A+Information+Architecture+%E2%80%93+Faceted+Navigation" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/05/16/apr-ia-faceted-navigation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APR: Thoughts on Ratings</title>
		<link>http://tynerblain.com/blog/2007/04/26/apr-thoughts-on-ratings/</link>
		<comments>http://tynerblain.com/blog/2007/04/26/apr-thoughts-on-ratings/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 00:58:54 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Project: Ratings]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[agile case study]]></category>
		<category><![CDATA[agile project]]></category>
		<category><![CDATA[agile requirements management]]></category>
		<category><![CDATA[agile software development]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[social software]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/04/26/apr-thoughts-on-ratings/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F04%2F26%2Fapr-thoughts-on-ratings%2F", "style": "big", "title": "APR: Thoughts on Ratings" });

Our agile project is to create a site that lets you rate articles.  In our corporate goals, we defined the goal to make it easier for people to find and read great content.  Last night I was doing some research on social networks [...]]]></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%252F26%252Fapr-thoughts-on-ratings%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22APR%3A%20Thoughts%20on%20Ratings%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F04%2F26%2Fapr-thoughts-on-ratings%2F", "style": "big", "title": "APR: Thoughts on Ratings" });</script></div>
<p><img alt="thinking in a cabin" title="thinking in a cabin" src="http://sehlhorst.smugmug.com/photos/147191350-M.jpg" /></p>
<p>Our <a title="Agile Project Introduction" href="http://tynerblain.com/blog/2007/04/17/agile-software-development-experiment/">agile project is to create a site that lets you rate articles</a>.  In our <a title="Corporate Goals Documented" href="http://tynerblain.com/blog/2007/04/19/apr-corporate-goals/">corporate goals</a>, we defined the goal to make it easier for people to find and read great content.  Last night I was doing some research on social networks and thinking about the nature of our ratings approach.  In this article I share some of those thoughts, and the reason for changing the ratings approach relative to <a title="Design Element Sketches" href="http://tynerblain.com/blog/2007/04/26/apr-design-element-sketches/">previous</a> <a title="Domain Model in UML" href="http://tynerblain.com/blog/2007/04/26/apr-uml-class-diagram-1/">designs</a>.</p>
<p><span id="more-479"></span>An interesting article on <a title="History of social software" href="http://www.lifewithalacrity.com/2004/10/tracing_the_evo.html">the history of social software</a> (going back to the 1940&#8217;s) got me thinking about the timelessness of content, and the fact that there are different approaches to scoring or rating things.</p>
<h2>Our Content Is Almost Timeless</h2>
<p>Generally speaking, the topics we need to read about are &#8220;timeless&#8221; &#8211; at least their relevance can be measured in multiple years, not multiple minutes.  An article can become obsolete, someone can build a &#8220;better&#8221; mousetrap, etc.  But short of that, great articles will be great for a long time.  <em>The Mythical Man-Month</em> is decades old, and still relevant.  We need to make sure that our rating approach will keep &#8220;great&#8221; articles at the top of the heap, rather than bury them under the stack.</p>
<p>I was also looking at one of the<a title="Real-time diggs" href="http://labs.digg.com/stack/"> real-time pages at digg</a>.  What an extremely cool thing to watch.  However &#8211; one thing jumped out at me &#8211; the articles with the most immediacy of content were getting all the attention.  A fifteen minutes of fame thing.  If you look at the &#8220;most digged [Kevin and Alex say <em>digged</em> on their podcast, not <em>dugg</em>] of all time&#8221; &#8211; none of those articles were getting noticeable attention.  They had become old news.</p>
<p>When there is a great resource, like any of Scott Ambler&#8217;s UML 2.0 pages, it needs to be easy to find for people using the site.  Perhaps using a &#8220;rate it 1 to 5&#8243; approach would be more effective.</p>
<h2>Comparing Approaches</h2>
<p>I created a couple bulletted lists of pros and cons of two general approaches &#8211; aggregating ratings and averaging ratings.  Here&#8217;s what I came up with &#8211; feel free to augment or dispute in the discussion on this article.</p>
<p><strong>Sum Of All Scores</strong></p>
<p>An approach that sums all of the scores, so that the number of &#8220;votes&#8221; affects the score.  For example, if 10 people voted &#8220;yes&#8221; for an article, it would have a score of 10.  If 20 people voted, the score would rise to 20.  This is the general approach used at digg.com.</p>
<ul>
<li>The score reflects the number of people who liked the article enough to vote on it.</li>
<li>As the number of people using the site grows, newer articles will tend to get more votes and get more of the attention.</li>
<li>The &#8220;runaway&#8221; article dynamic will happen &#8211; and the crowd will drive attention towards the most attention-getting articles.</li>
</ul>
<p><strong>Average Of All Scores</strong></p>
<p>An approach that averages all of the scores for an article.  For example, if 10 people rated an article an average of &#8220;3&#8243;, the article&#8217;s score would be 3.  If 20 people rated it a 3, the score would be a 3.  This is the general approach used at Amazon (and Tyner Blain) for rating books (and articles).</p>
<ul>
<li>The score obscures the number of people who liked the article enough to vote on it.</li>
<li>Older &#8220;best&#8221; articles will be at the top and all articles will have to play &#8220;king of the hill&#8221; to see which become the top scoring articles.  Tie-breakers can be based on the number of ratings for an article.</li>
<li>Would need some minimum number of ratings for the score to have credibility.  The community would probably self-police this by quickly voting on articles that have &#8220;biased&#8221; initial votes.</li>
<li>As the community grows, <em>obsolete</em> articles will gain new (lower) ratings pushing them off the top of the heap naturally.</li>
</ul>
<h2>Conclusion</h2>
<p>Based on this analysis, the &#8220;scoring&#8221; approach should be the same general approach used to rate articles at Tyner Blain and books at Amazon.  I&#8217;ll update the domain model to reflect this change.  I think a simple 1-5 scale (where 1 is bad and 5 is good) would work effectively.</p>
<p>Chloe had some great comments on the <a title="Use Case Briefs" href="http://tynerblain.com/blog/2007/04/24/apr-use-case-briefs/"><em>Use Case Briefs</em></a> article discussion about people being able to learn from articles with negative reviews or low scores &#8211; as ideas to stay away from.  That &#8220;unintented&#8221; use would also be better served with an averaging-score, if it were easy to display &#8220;low score, high number of ratings&#8221; articles.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+APR%3A+Thoughts+on+Ratings+http://bit.ly/Rc2MP+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/04/26/apr-thoughts-on-ratings/&amp;t=APR%3A+Thoughts+on+Ratings" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/04/26/apr-thoughts-on-ratings/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Make Your Products Too Simple</title>
		<link>http://tynerblain.com/blog/2007/03/23/dont-make-products-too-simple/</link>
		<comments>http://tynerblain.com/blog/2007/03/23/dont-make-products-too-simple/#comments</comments>
		<pubDate>Sat, 24 Mar 2007 04:13:43 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[competent users]]></category>
		<category><![CDATA[hbr]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[word of mouth marketing]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/03/23/dont-make-products-too-simple/</guid>
		<description><![CDATA[Joshua Ledwell wrote a short article expressing his perspective on designing software that is neither too simple nor too complex.  He also links to some excellent other articles on the topic.]]></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%252F03%252F23%252Fdont-make-products-too-simple%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Don%27t%20Make%20Your%20Products%20Too%20Simple%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F03%2F23%2Fdont-make-products-too-simple%2F", "style": "big", "title": "Don't Make Your Products Too Simple" });</script></div>
<p><img title="blocks" alt="blocks" src="http://sehlhorst.smugmug.com/photos/138153684-M.jpg" /></p>
<p>Joshua Ledwell wrote a short article expressing his perspective on designing software that is neither too simple nor too complex.  He also links to some excellent other articles on the topic.</p>
<p><strong>Designing For Competent Users</strong></p>
<p>We&#8217;ve written in the past about how to <a title="Designing for competent users" href="http://tynerblain.com/blog/2006/04/02/competent-users-and-software-design/">design for competent users</a>. In fact, it was Joshua&#8217;s link to that article that helped us find his article &#8211; thanks!  Users start out as novices, and most of them become competent users.  Very few of them reach a level of expertise with your product.  You need to make sure you support both their growth and their likely &#8220;end state&#8221; &#8211; competence.  The feature set needs to support the fact that <a title="UCD and competent users" href="http://tynerblain.com/blog/2007/02/22/user-centered-design-bridge/">most users end up in a state of competence</a>.</p>
<p><strong>Maximizing ROI</strong></p>
<p>One of several good links from Joshua&#8217;s article took us to Luke&#8217;s article on the <a title="lukew" href="http://www.lukew.com/ff/entry.asp?433">sweet spot for selling software</a>.  Luke references an article from the Harvard Business Review and includes an interesting graph that shows the relationships between the number of features and profitability.  In short, more features drive higher initial sales by satisfying the buying persona.  Fewer features drive higher eventual sales through <a title="Usability Sells Software" href="http://tynerblain.com/blog/2007/01/10/usability-sells-software/">word-of-mouth marketing based on improved usability</a>.</p>
<p>The HBR suggests a profit maximizing approach of seeking the middle ground in terms of feature quantity.  Trying to please everyone tends to result in pleasing no one, so we don&#8217;t have a lot of confidence in this approach.  But we still like the graph.</p>
<p>Some great thinking out there, what do y&#8217;all think in here?</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Don%E2%80%99t+Make+Your+Products+Too+Simple+http://bit.ly/16Cc5s+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/03/23/dont-make-products-too-simple/&amp;t=Don%E2%80%99t+Make+Your+Products+Too+Simple" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/03/23/dont-make-products-too-simple/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Wisdom of Crowds Prevents People&#8217;s Passions</title>
		<link>http://tynerblain.com/blog/2007/01/11/wisdom-of-crowds-prevents-passion/</link>
		<comments>http://tynerblain.com/blog/2007/01/11/wisdom-of-crowds-prevents-passion/#comments</comments>
		<pubDate>Fri, 12 Jan 2007 04:00:31 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[brainstorming]]></category>
		<category><![CDATA[collective intelligence]]></category>
		<category><![CDATA[dumbness of crowds]]></category>
		<category><![CDATA[eliciting requirements]]></category>
		<category><![CDATA[idea seeding]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[passion of individuals]]></category>
		<category><![CDATA[prioritizing requirements]]></category>
		<category><![CDATA[requirements elicitation]]></category>
		<category><![CDATA[wisdom of crowds]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/01/11/wisdom-of-crowds-prevents-passion/</guid>
		<description><![CDATA[The wisdom of crowds helps us avoid stupid decisions. Unfortunately, it also prevents innovative, passionate, fantastic decisions. Collective Intelligence is collective insipidness.  We need to keep the inputs of individuals in the mix.]]></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%252F01%252F11%252Fwisdom-of-crowds-prevents-passion%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22The%20Wisdom%20of%20Crowds%20Prevents%20People%27s%20Passions%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2007%2F01%2F11%2Fwisdom-of-crowds-prevents-passion%2F", "style": "big", "title": "The Wisdom of Crowds Prevents People's Passions" });</script></div>
<p><img title="Passion" alt="Passion" src="http://sehlhorst.smugmug.com/photos/122446158-M.jpg" /></p>
<p>The wisdom of crowds helps us avoid <em>stupid</em> decisions.  Unfortunately, it also prevents innovative, passionate, fantastic decisions.  Collective Intelligence is collective insipidness.  We need to keep the inputs of individuals in the mix.</p>
<p><strong>Collective Intelligence</strong></p>
<p>Collective intelligence is the notion that a group of individuals will be smarter than a single individual.  The old adage, <em>two heads are better than one</em>, is extended to mean <em>several heads</em>.  Kathy Sierra goes on <a title="The Dumbness of Crowds" href="http://headrush.typepad.com/creating_passionate_users/2007/01/the_dumbness_of.html">a bit of a rant</a> about how this (narrowly applicable) idea has been twisted into the idea that mobs are better at designing stuff than individuals.</p>
<p><strong>Design By Committee</strong></p>
<p>Since we&#8217;re breaking out the old saws, we should acknowledge that people also have known for a long time that <em>design by committee</em> is a bad idea.</p>
<p>Eliciting and managing requirements requires communication, and prioritization.  Both of these involve collaboration.  When we collaborate, we risk introducing the negative effects of collective insipidity [If I were collaborating on this article with a group of other people, they wouldn't let me use the "word" <em>insipidity</em>].</p>
<p><a title="Brainstorming - How To Do It Well" href="http://tynerblain.com/blog/2006/01/17/brainstorming-making-something-out-of-everything/">Brainstorming</a> involves collaboration in the <a title="Top 5 requirements gathering tips" href="http://tynerblain.com/blog/2006/01/14/top-five-requirements-gathering-tips/">requirements gathering</a> phase of a project.</p>
<p>Prioritization also involves collaboration.  We can prioritize the ideas from a brainstorming session, or we can <a title="three prioritization techniques" href="http://tynerblain.com/blog/2006/01/18/prioritizing-requirements-three-techniques/">prioritize requirements</a>, or the sequence of use case delivery.  Basically any process that involves filtering or sorting is a prioritization exercise.<br />
Kathy concludes her passionate article with a great quote:</p>
<blockquote><p>No matter what, I believe that in our quest to exploit the &#8220;We&#8221; in Web, we must not sacrifice the &#8220;I&#8221; in Internet.</p></blockquote>
<p>So how do we avoid the dillutive effects of the crowd&#8217;s concensus?</p>
<p><strong>Dictators Dodge Dillution</strong></p>
<p>One way is to follow apple&#8217;s model &#8211; have a dictator.  As long as the person calling the shots has good instincts, she&#8217;ll make good decisions.  If she doesn&#8217;t, we&#8217;re toast.  With this approach, we get both the downside (possible bad decisions) and the upside (possible great decisions).Another approach is to allow passion to stand out, when interpreting the inputs of the masses.</p>
<p><strong>Weighted Prioritization</strong></p>
<p>We wrote an article last September with <a title="Getting Value from Brainstorming" href="http://tynerblain.com/blog/2006/09/27/getting-value-from-brainstorming/">tips to maximize the benefits of brainstorming</a>.</p>
<p>The idea starts with having people vote on the ideas that were generated in a brainstorming session.  This alone is a mathematical embodiment of the <em>commonness</em> of crowds.  We end up with the lowest common denominator.</p>
<p>We then added the notion of &#8220;voting again with a 5X impact&#8221; on those items people feel passionate about.  This allows the strongly held notions to compete with the universally not-unappealing ones. Read the article for more details.</p>
<p><strong>Bypass Brainstorming</strong></p>
<p>The guys at OK/Cancel are super effective at creating great content.  They do it by using <a title="Idea Seeding is better than brainstorming" href="http://tynerblain.com/blog/2006/12/06/idea-seeding/"><em>idea seeding</em></a> instead of brainstorming.</p>
<p>In a nutshell, the two of them collaborate with an iterative process that involves creating ideas independently, transferring &#8220;ownership&#8221; of those ideas to each other, and then improving upon them.  Really a novel concept &#8211; check it out.</p>
<p><strong>Conclusion</strong></p>
<p>Crowds can be leveraged to prevent mistakes.  They can&#8217;t be leveraged to create greatness.  Crowds serve to filter out the extremes on both ends.  There is value in avoiding the mistakes, but the cost of avoiding greatness is too high.  Whenever we bring in the crowds, we have to keep the individuals in the loop too.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+The+Wisdom+of+Crowds+Prevents+People%E2%80%99s+Passions+http://bit.ly/oBfT5+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2007/01/11/wisdom-of-crowds-prevents-passion/&amp;t=The+Wisdom+of+Crowds+Prevents+People%E2%80%99s+Passions" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2007/01/11/wisdom-of-crowds-prevents-passion/feed/</wfw:commentRss>
		<slash:comments>0</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>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Fifteen+Ways+to+Shut+Down+http://bit.ly/LK2tt+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/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/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></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>Goal Driven Upgrades</title>
		<link>http://tynerblain.com/blog/2006/10/11/goal-driven-upgrades/</link>
		<comments>http://tynerblain.com/blog/2006/10/11/goal-driven-upgrades/#comments</comments>
		<pubDate>Thu, 12 Oct 2006 03:00:30 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Prioritization]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[documenting upgrades]]></category>
		<category><![CDATA[goal-driven documentation]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[passion threshold]]></category>
		<category><![CDATA[prioritizing upgrades]]></category>
		<category><![CDATA[software documentation]]></category>
		<category><![CDATA[software upgrade]]></category>
		<category><![CDATA[suck threshold]]></category>
		<category><![CDATA[upgrade prioritization]]></category>
		<category><![CDATA[upgrade priority]]></category>
		<category><![CDATA[upgrades]]></category>
		<category><![CDATA[user centric documentation]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/10/11/goal-driven-upgrades/</guid>
		<description><![CDATA[Kathy Sierra writes (another) great article at Creating Passionate Users.  This time, she talks about why users don't upgrade and presents ways to get users to install the latest version.  We focus in this article on one way in particular - using goal-driven documentation to encourage upgrading.]]></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%252F11%252Fgoal-driven-upgrades%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Goal%20Driven%20Upgrades%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F10%2F11%2Fgoal-driven-upgrades%2F", "style": "big", "title": "Goal Driven Upgrades" });</script></div>
<p><img title="upgraded seat" alt="upgraded seat" src="http://sehlhorst.smugmug.com/photos/101780463-M.jpg" /></p>
<p>Kathy Sierra writes (another) great article at <em>Creating Passionate Users</em>.  This time, she talks about why users don&#8217;t upgrade and presents ways to get users to install the latest version.  We focus in this article on one way in particular &#8211; using goal-driven documentation to encourage upgrading.</p>
<p><strong>Background On Documentation</strong></p>
<p>Over the last couple of days, we&#8217;ve written about how to structure documentation to define what users can do with the software, instead of capturing what the software can do for users.  This reverse <a title="Goal driven documentation" href="http://tynerblain.com/blog/2006/10/09/goal-driven-documentation/">approach uses user goals</a> to guide our documentation.  We also presented, more concretely, <a title="Use Cases drive documentation" href="http://tynerblain.com/blog/2006/10/10/use-case-driven-documentation/">how to trace and manage our goal-driven documentation</a> with use cases.</p>
<p>We can leverage this documentation approach to achieve two additional benefits:</p>
<ul>
<li>Encourage users to install new upgrades</li>
<li>Encourage users to migrate from other applications to ours</li>
</ul>
<p>The same factor is at play in both situations &#8211; users already know how to use their existing software, either a previous version of our software or a competitors software.  The fundamental question for users is &#8220;How will I do what I need to do?&#8221;  This is a major barrier to both upgrades and migration from other applications.</p>
<p><strong>Kathy On Upgrades</strong></p>
<p>Kathy&#8217;s <a title="Why users won't upgrade" href="http://headrush.typepad.com/creating_passionate_users/2006/09/why_they_dont_u.html">article on why users don&#8217;t upgrade</a> is awesome.  She creates a great visual graph (shared via her CC license) of the user&#8217;s perspective on upgrades:</p>
<blockquote><p><img title="Sierra's Graph" alt="Sierra's Graph" src="http://sehlhorst.smugmug.com/photos/101774347-M.jpg" /></p>
<p><cite><a title="Sierra's article" href="http://headrush.typepad.com/creating_passionate_users/2006/09/why_they_dont_u.html">Why they don&#8217;t upgrade (and what to do about it)</a></cite></p></blockquote>
<p>Kathy goes on to list several approaches to address the problem, all of them fall into either &#8220;make them want it&#8221; or &#8220;make it easier.&#8221;  We will focus specifically on how writing goal-driven documentation can help.</p>
<p><strong>Make Them Want It</strong></p>
<p>We must apply the same <a title="Three approaches to prioritization" href="http://tynerblain.com/blog/2006/01/18/prioritizing-requirements-three-techniques/">prioritization</a> approach to defining upgrades as we do to defining the initial release.  This assures that the most valuable not-yet-implemented goals are addressed in the new version of the software.  If we are using <a title="Prioritizing with Kano" href="http://tynerblain.com/blog/2006/02/27/prioritizing-software-requirements-kano-take-two/">Kano as a framework for prioritization</a>, we have the added benefit of <a title="Making software easier to use" href="http://tynerblain.com/blog/2006/04/14/goldilocks-and-the-three-products/">effectively lowering the suck-threshold</a>.</p>
<p><strong>Make It Easier</strong></p>
<p>We can make design decisions that make software easier to use.  We can also follow Kathy&#8217;s other good suggestions.  And we can write our documentation to make it easier for users to make the change.</p>
<p>Goal-driven documentation has two effects on the curve Kathy drew above.  Here&#8217;s the same curve, representing a typical software upgrade:</p>
<p><img alt="typical upgrade" title="typical upgrade" src="http://sehlhorst.smugmug.com/photos/101774341-O.png" /></p>
<p>With goal-driven documentation, the curve is shifted up and to the left:</p>
<p><img alt="shifting the curve" title="shifting the curve" src="http://sehlhorst.smugmug.com/photos/101774346-M.png" /></p>
<p>This shift can be analyzed as two different factors:</p>
<p><img alt="two factors" title="two factors" src="http://sehlhorst.smugmug.com/photos/101774331-M.png" /></p>
<p>The goal-driven documentation allows users to climb become more competent more quickly &#8211; effectively lowering the suck-threshold.  When applied to upgrades, it reduces the size of the drop &#8211; preventing users from re-entering the suck-zone.</p>
<p><strong>Faster Climb</strong></p>
<p><a title="Competent users" href="http://tynerblain.com/blog/2006/04/02/competent-users-and-software-design/">Competence</a> is not a measure of how quickly users can do everything the software can do &#8211; it is a measure of how quickly users can do everything <em>they need to do</em> with the software.  When we define our software to prioritize solving the most valuable problems for our customers, we are defining the set of activities that the users <em>need to do</em>.  And we identify this as a set of use cases.</p>
<p>We then document how users will follow those use cases, with the implementation we&#8217;ve given them.</p>
<p><img alt="structured doc" title="structured doc" src="http://sehlhorst.smugmug.com/photos/101635387-M.jpg" /></p>
<p>This <em>goal-driven</em> approach to documentation helps users climb the competence curve much faster, immediately reaching the &#8220;Finally I can actually DO something&#8221; point (above the suck threshold).  As long as we document <a title="Prioritizing essential requirements" href="http://tynerblain.com/blog/2006/02/17/prioritizing-software-requirements-am-i-hot-or-not/">the right <em>somethings</em></a>, we&#8217;re all set.</p>
<p><strong>Shorter Drop</strong></p>
<p>We apply this same approach to our upgrades.  Those use cases that we&#8217;ve added in a new release yield new documentation.  Those implementation areas we&#8217;ve modified as part of the upgrade yield updates to previously released docs.</p>
<p>Users will have an easy answer for &#8220;how do I do it <em>now?&#8221;</em> as well as &#8220;What can I do <em>now?</em>&#8221;</p>
<p><strong>Collateral Benefit</strong></p>
<p>We also get the benefit of making it <em>much</em> easier for users to migrate from other software packages (not just our earlier releases).  There are books out there where authors address exactly this problem &#8211; <em>Microsoft Word for Wordperfect Users</em> and <em>Java For Cobol Programmers</em> come to mind.  By showing users how to do <em>what they need to do</em>, we make it easy for them to switch.</p>
<p><strong>Conclusion</strong></p>
<ul>
<li>Goal driven documentation makes it easier for users to learn how to use our software.</li>
<li>Goal driven documentation makes it easier for users to switch from other software programs to ours.</li>
<li>Goal driven documentation makes it easier for users to upgrade to new versions of our software.</li>
</ul>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Goal+Driven+Upgrades+http://bit.ly/gGxFD+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/10/11/goal-driven-upgrades/&amp;t=Goal+Driven+Upgrades" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/10/11/goal-driven-upgrades/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Case Driven Documentation</title>
		<link>http://tynerblain.com/blog/2006/10/10/use-case-driven-documentation/</link>
		<comments>http://tynerblain.com/blog/2006/10/10/use-case-driven-documentation/#comments</comments>
		<pubDate>Wed, 11 Oct 2006 04:00:42 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Requirements Models]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Use Cases]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[doc]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[help file design]]></category>
		<category><![CDATA[interaction design and documentation]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[software doc]]></category>
		<category><![CDATA[software documentation]]></category>
		<category><![CDATA[structured requirements]]></category>
		<category><![CDATA[structured requirements and documentation]]></category>
		<category><![CDATA[use case analysis]]></category>
		<category><![CDATA[use cases]]></category>
		<category><![CDATA[writing doc]]></category>
		<category><![CDATA[writing documentation]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/10/10/use-case-driven-documentation/</guid>
		<description><![CDATA[Yesterday we wrote about focusing our documentation on what our users are trying to accomplish.  With a structured requirements approach, or with an interaction-design driven approach, we've already solved half the problem - determining what to document.]]></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%252F10%252Fuse-case-driven-documentation%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Use%20Case%20Driven%20Documentation%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F10%2F10%2Fuse-case-driven-documentation%2F", "style": "big", "title": "Use Case Driven Documentation" });</script></div>
<p><img alt="drilling" title="drilling" src="http://sehlhorst.smugmug.com/photos/101627752-M.jpg" /></p>
<p>Yesterday we wrote about <a title="Goal driven doc" href="http://tynerblain.com/blog/2006/10/09/goal-driven-documentation/">focusing our documentation</a> on what our users are trying to accomplish.  With a structured requirements approach, or with an interaction-design driven approach, we&#8217;ve already solved half the problem &#8211; determining what to document.</p>
<p>Our proposed documentation approach is to write about what users are doing with the software, not what the software can do for the users.  Using a power drill as an example, we proposed the following representative approach:</p>
<blockquote>
<ol>
<li>How to drill a hole in a flat surface (wood or plastic, metal, masonry).</li>
<li>How to select the right screw for fastening items.</li>
<li>How to drive screws (phillips, flat-head) with your drill.</li>
<li>How to stir paint with your drill.</li>
<li>etc…</li>
</ol>
<p>Suddenly, the documentation is helping us to achieve our goals.</p></blockquote>
<p><strong>Extending Structured Requirements </strong></p>
<p>When we use a <a title="Foundation Series on structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements</a> approach, we have established a framework for defining the problems that our software will solve.  We articulate how people solve those problems with use cases.  These use cases define <em>exactly</em> what we need to document.</p>
<p>When we view structured requirements, they look like the following diagram:</p>
<p><img alt="structured requirements" title="structured requirements" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" /></p>
<p><cite>From <a title="Non-func ERA" href="http://tynerblain.com/blog/2006/05/23/non-functional-requirements-era/">Non-Functional Requirements Equal Rights Amendment</a></cite></p>
<p>We extend this structure by leveraging the fact that the use cases identify the highest priority tasks that users will perform to achieve goals.  These are therefore the highest priority tasks to document.  The documentation represents how a user would achieve a use case, with the implementation that we&#8217;ve created.</p>
<p><img title="structured documentation" alt="structured documentation" src="http://sehlhorst.smugmug.com/photos/101635387-O.png" /></p>
<p>We can even trace each portion of our documentation work to the use case that it supports.</p>
<p><strong>Extending Interaction Design</strong></p>
<p>With<a title="Interaction Design process overview" href="http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/"> interaction design</a>, we are again focusing on what people intend to achieve while using our software.  Even if we are writing game software (which is designed to be played without a &#8220;goal&#8221; in the traditional sense), the user still has a goal of &#8220;being entertained.&#8221;</p>
<p>With interaction design, we would write documentation that demonstrates the way that scenarios play out with the given implementation that we created.</p>
<p>Even when <a title="Interaction Design and Structured Requirements" href="http://tynerblain.com/blog/2006/03/23/interaction-design-and-structured-requirements/">combining interaction design and structured requirements</a> into a hybrid approach, we still have a source from which to define our documentation needs &#8211; the scenario.</p>
<p><strong>Summary</strong></p>
<p>We&#8217;ve previously defined <a title="goal-driven documentation" href="http://tynerblain.com/blog/2006/10/09/goal-driven-documentation/">the benefits of documenting what users do</a> with our software instead of documenting what our software can do for users.  In this article we present a framework for defining and tracing that documentation &#8211; building upon use cases or scenarios.  This documentation approach makes for software that is easier to use, and therefore better.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Use+Case+Driven+Documentation+http://bit.ly/4hdzF+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/10/10/use-case-driven-documentation/&amp;t=Use+Case+Driven+Documentation" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/10/10/use-case-driven-documentation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flesh Out Those Wireframes</title>
		<link>http://tynerblain.com/blog/2006/09/22/flesh-out-those-wireframes/</link>
		<comments>http://tynerblain.com/blog/2006/09/22/flesh-out-those-wireframes/#comments</comments>
		<pubDate>Sat, 23 Sep 2006 04:15:50 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[content and layout]]></category>
		<category><![CDATA[information architecture]]></category>
		<category><![CDATA[layout and content]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[wireframes]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/09/22/flesh-out-those-wireframes/</guid>
		<description><![CDATA[Stephen Turbek, at Boxes and Arrows, tells us how to get better results from our wireframes.  Wireframe prototyping can provide feedback early in the design cycle, reducing costs and improving the quality of the final software.  By putting a little flesh on the bone, we can get even better results.]]></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%252F22%252Fflesh-out-those-wireframes%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Flesh%20Out%20Those%20Wireframes%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F09%2F22%2Fflesh-out-those-wireframes%2F", "style": "big", "title": "Flesh Out Those Wireframes" });</script></div>
<p><img title="Wire frame man" alt="Wire frame man" src="http://sehlhorst.smugmug.com/photos/97216504-O.jpg" />(<a title="Sculptor" href="http://www.yummymudpuddle.com/john/wire.htm">John Richards</a>)</p>
<p>Stephen Turbek, at Boxes and Arrows, tells us how to get better results from our wireframes.  Wireframe prototyping can provide feedback early in the design cycle, reducing costs and improving the quality of the final software.  By putting a little flesh on the bone, we can get even better results.</p>
<p><strong>Hooked From the Start</strong></p>
<p>Stephen starts <a title="wireframes and then some" href="http://www.boxesandarrows.com/view/real_wireframes">his article</a> with the following quote&#8230;</p>
<blockquote><p>How many times have you been asked, “So, is the new website going to be black and white too?” after presenting your wireframes to a client or a usability test subject?</p></blockquote>
<p>A very solid opening to his position that when you only use wireframes, you introduce problems.  Wireframes are designed to eliminate problems and &#8220;clutter&#8221; from the feedback session.  Feedback sessions provide us with a lot of information, and the challenge is to separate the noise from the signal.  The goal of wireframes is to eliminate sources of noise, to make it easier to focus on the signal.  But using wireframes also introduces noise into the data.<br />
He goes on to provide a real world example of a website under development for Verizon &#8211; showing wireframes and &#8220;low fidelity prototypes&#8221; that include more information than just the wireframes.</p>
<p><strong>Why Wireframes?</strong></p>
<p>Stephen makes an interesting point &#8211; wireframes (named after 3D modeling techniques) were initially designed to provide quick feedback and insight into 3D models, without the expense of complete rendering.  As technology reduced the cost of of rendering, rendering cycles began to replace wireframes as early prototyping tools.</p>
<p>A wireframe, in the user interface world, is a minimalist visualization of a website or application.  It shows where information will reside on a page, and what information will be shown.  When using a wireframe to get feedback, it allows a designer to (attempt to) isolate the feedback about content and layout from other data (like feedback on color schemes and graphics).  It also allows for more rapid prototyping because the prototype can be built as soon as a layout is done, without waiting for colors and graphics and branding to be incorporated into the design.</p>
<p><strong>Why Not Wireframes?</strong></p>
<p>Expanding on Stephen&#8217;s point, the lack of information detracts from an understanding of the usability of a design.  Colors (such as blue hyperlinks) do provide visual cues for users.  Branding and navigation elements provide a sense of context and comfort.  The absence of these things can distract the people we were trying so hard to not distract.</p>
<p><strong>What About Cost?</strong></p>
<p>Another goal of using wireframes is to reduce the cost (and time equals money) of prototyping.  Stephen shows how in less than 15 minutes, a wireframe prototype is converted into a prototype that leverages existing branding, navigation, colors, and images.  15 minutes is not a long time to spend to achieve this striking difference (check out the images in Stephen&#8217;s article).  When showing multiple screens in a site with structured navigation, most of those investments will be re-used across multiple screens.</p>
<p><strong>Why It Will Work</strong></p>
<p>The ability to re-use the &#8220;extra bits&#8221; is the key to <em>why it will work</em> and not just the key to <em>why it won&#8217;t cost more</em>.</p>
<p>People who think about website advertising worry a lot about <em>ad-blindness</em>, or the ability of people to ignore ads over time.  We actually depend on it here, to allow our regular readers to tune-out ads that appear in consistent locations and formats and instead focus on the content of the articles.  This same phenomenon applies to these augmented wireframes.</p>
<p>The lack of context that a wireframe creates can be disconcerting or even confusing.  The (valid) concern that drives the use of wireframes is that providing all the other stuff will distract the users and prevent them from providing feedback on content and layout.</p>
<p>The <em>ad-blindness</em> effect will quickly allow people to ignore the &#8220;other stuff&#8221; and focus on providing feedback on the content and layout of a page.  People are good at scanning pages &#8211; they have an autopilot that takes them directly to the &#8220;meat&#8221; of the page.  And the presence of the extra content allows them to do that &#8211; where the absence of that richness will immediately trigger a &#8220;what&#8217;s wrong?&#8221; or &#8220;what&#8217;s different?&#8221; analysis.</p>
<p><img alt="manikin" title="manikin" src="http://sehlhorst.smugmug.com/photos/97225733-O.gif" /></p>
<p><strong>Tips to Making It Work</strong></p>
<p>Stephen provides eight tips, which we really like.  We are concerned about one of the tips &#8211; to use &#8220;real data&#8221; instead of fake data.  I had always learned that real data risked distracting the users, who might fixate on the fact that you chose incorrect data to display.</p>
<p>Today, after a prototype review session, we got feedback from our reviewers that it would help them if we used real data.  The reviewers of our (fleshed out) wireframes were unable to visualize how the interface might behave with some real-world data examples.  The data we were presenting and manipulating is fairly complex, and the contrived examples didn&#8217;t do a very good job of showing how the interface would handle the complexity it would need to support.</p>
<p>Using representative data is definitely a good idea &#8211; and as good as Stephen&#8217;s other ideas are, we&#8217;ll take his word for it that real data is even better.</p>
<p><strong>Conclusion</strong></p>
<p>Spend the incremental effort to make wireframes &#8220;feel real&#8221; by fleshing out some of the <em>context</em> that wraps the prototyped pages.  That context will provide more comfort than distraction for users.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Flesh+Out+Those+Wireframes+http://bit.ly/v6HZe+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/09/22/flesh-out-those-wireframes/&amp;t=Flesh+Out+Those+Wireframes" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/09/22/flesh-out-those-wireframes/feed/</wfw:commentRss>
		<slash:comments>0</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>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Writing+Design-Free+Requirements+http://bit.ly/rYkqG+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/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/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></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>Interaction Design Process Overview</title>
		<link>http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/</link>
		<comments>http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/#comments</comments>
		<pubDate>Wed, 22 Mar 2006 05:55:25 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[alan cooper]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[requirements elicitation]]></category>
		<category><![CDATA[requirements management]]></category>
		<category><![CDATA[requirements prioritization]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/</guid>
		<description><![CDATA[Interaction design, as described by Alan Cooper in The Inmates are Running the Asylum, is a process for designing software by focusing on the most important users.  Unlike traditional requirements gathering and solution design processes, interaction design focuses on the goals of a specific class of users, represented as a persona.  Those goals are considered when defining scenarios that represent how the primary persona will use the software.  The combination of goals and scenarios leads to design artifacts and a functional specification.  We will explore these steps in more detail in this post.]]></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%252F03%252F21%252Finteraction-design-process-overview%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Interaction%20Design%20Process%20Overview%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F03%2F21%2Finteraction-design-process-overview%2F", "style": "big", "title": "Interaction Design Process Overview" });</script></div>
<p><img title="middle manager using computer" src="http://sehlhorst.smugmug.com/photos/60909468-M.jpg" alt="middle manager using computer" /></p>
<p><strong>Interaction design creates a focus on (some of) the users</strong></p>
<p>Interaction design, as described by Alan Cooper in <a title="Cooper's book at Amazon" href="http://www.amazon.com/exec/obidos/ASIN/0672326140/tynerblain-20"><em>The Inmates are Running the Asylum</em></a>, is a process for designing software by focusing on the most important users.  Unlike traditional requirements gathering and solution design processes, interaction design focuses on the goals of a specific class of users, represented as a persona.  Those goals are considered when defining scenarios that represent how the primary persona will use the software.  The combination of goals and scenarios leads to design artifacts and a functional specification.  We will explore these steps in more detail in this post.</p>
<p><span id="more-148"></span></p>
<p><strong>Persona selection</strong></p>
<p>There are typically many users for an application.  A persona is an imaginary user, who is representative of a class of users with common goals and roles.  This is completely different from the <a title="The evils of user representatives" href="http://tynerblain.com/blog/2005/12/20/stay-away-from-my-users/"><em>user proxy (or surrogate)</em></a> who we know to avoid when <a title="Top five requirements elicitation techniques" href="http://tynerblain.com/blog/2006/01/14/top-five-requirements-gathering-tips/">gathering requirements</a> in <a title="Introduction to structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">Wiegers-esque</a> fashion.  The first thing an interaction designer does is create a detailed persona for each class of user.  Users who share goals and roles will be represented by a common persona.  The interaction designer will often include a picture that represents the persona &#8211; our picture for this post might represent Steve Marshall, 20-year veteran enterprise software salesman.</p>
<p>Goals for a persona are defined in two distinct areas &#8211; practical goals and personal goals. Practical goals are goals related to the role of the individual (meet sales quota, close at least one multi-million dollar deal each quarter).  Personal goals are the tricky ones.  Tricky for programmers anyway, because they appear to be completely irrelevant.  Personal goals include things like don&#8217;t feel stupid, play 18 holes of golf every week, travel less, etc.  However irrelevant they may seem, they are key to gaining insight to how the particular persona would interact with the software &#8211; expectations, prejudgements, tolerance level for bugs or confusing interfaces.</p>
<p>Once all the persona are defined, one or two <em>primary</em> persona are identified as the key users of the application.  All requirements and feature development are done specifically for the primary persona.  Other user&#8217;s needs are ignored.  Programmers (<em>homo-logicus</em>, as Cooper calls them) will argue that &#8220;someone&#8221; will want feature X, and work to include it in the scope.  If the persona doesn&#8217;t need it, the software doesn&#8217;t get it.  Capabilities that optimize on <a title="Requirements definition to close the sale" href="http://tynerblain.com/blog/2006/03/14/we-must-sell-the-software-first/"><em>selling</em> the software</a>, versus using the software, are also ignored.<br />
Selection of the primary persona is a prioritization exercise.  The persona with the combination of most-valuable corporate goals and most-frequent use of the system is the logical choice.  There can be two primary personas &#8211; for example, the main person who enters information into a system and the main person who consumes the information from the system.  Including any secondary or tertiary personas will result in dillution of the power of the software.  The theory is that trying to be all things to all people results in <a title="Users say: This software sucks!" href="http://tynerblain.com/blog/2006/03/02/this-software-sucks-say-users/">sucky, bloated software</a> that is difficult for all of the users to master.</p>
<p><strong>Scenario definition</strong></p>
<p>Scenarios describe what our primary persona needs to accomplish while using the software.  The interaction designer first identifies all of the things that the persona needs to accomplish with the software.  Each of those activities represents a scenario.  The scenarios are categorized as <em>daily use, necessary use, and edge case</em> scenarios.</p>
<ul>
<li><strong>The edge cases are immediately discarded</strong> by the interaction designer &#8211; these happen so infrequently that the penalty of enabling them outweighs the benefit.  The penalties are not just measured in implementation costs, but costs to the user of having to understand, ignore, or otherwise work around the added capabilities needed to support the edge cases.</li>
<li><strong>Necessary use scenarios are scenarios that must happen, but happen very infrequently</strong>.  The requirements specification will include the functional capabilities needed to support these scenarios.  Interaction design effort will not be spent on optimizing these scenarios, however.  The theory is that since they are so infrequent, users will tolerate whatever implementation exists to make them happen.</li>
<li><strong>Daily use scenarios are the ones that the primary persona performs most often</strong>.  Most users will have one or two <em>daily-use</em> scenarios.  More than three is rare according to Cooper.  This is where new users must get up to speed the fastest, benefits from good design are reaped the most, and the lion&#8217;s share of interaction design effort is applied.</li>
</ul>
<p><strong>Designing the solution</strong><br />
Cooper doesn&#8217;t talk much about creating the requirements to support the daily use scenarios &#8211; he proposes moving directly into design of the solution.  This differs from the more traditional technique of <a title="Use cases are supported with functional requirements" href="http://tynerblain.com/blog/2006/02/10/writing-functional-requirements-to-support-use-cases/">writing functional requirements to support use cases</a>.  Cooper also breaks down design into two components &#8211; program design and interaction design.  Program design is everything you don&#8217;t see.  Interaction design is everything you do see.</p>
<p>The interactions are designed to support the scenarios (which are built in the context of the practical goals).  The design decisions are made to best support the persona in the context of his personal goals.  This is the point in the post where design professionals are cheering and programmers are jeering.  Programmers want to know how in the world knowledge of a persona&#8217;s hypothetical desires (play more golf) influence individual decisions about how to render a user interface or design an interaction.  Draftsmen want to know what&#8217;s so special about Picaso&#8217;s paintings &#8211; the perspective lines are all messed up.  This is simply a left-brain versus right-brain issue.</p>
<p>Usability helps to bridge the chasm between these two camps, and it definitely plays a role.  Programmers can appreciate that testing, statistics, analysis and experience can drive decisions about how people should use a computer to achieve a (practical) goal.  But the usability specialists tend to fall into one of two camps &#8211; data-driven, or insight-driven.  [Ed: I apologize, I saw this idea presented on one of the blogs I read, but can't find it anywhere]  This leaves the gap unfilled.<br />
Cooper argues that designing the interaction should happen before any code is written.  He uses a construction analogy to drive home his perspective &#8211; you can&#8217;t pour the concrete before you build the forms.  Kent Beck, founder of the XP programming philosophy disagrees with the premise.  Beck believes that the cost of changing software is low, and the imagery Cooper uses is hyperbole.  We touch on, and <a title="Cooper vs Beck" href="http://tynerblain.com/blog/2006/03/07/interaction-design-explained-by-alan-cooper/">link to that debate in this post</a>.</p>
<p><strong>Conclusion</strong></p>
<p>There are some fantastic ideas in this approach.  The prioritization of the most important users, and their associated daily use scenarios is very much like the requirements prioritization techniques we talk about <a title="Three techniques for prioritizing requirements" href="http://tynerblain.com/blog/2006/01/18/prioritizing-requirements-three-techniques/">here</a> and <a title="Prioritizing software requirements across releases" href="http://tynerblain.com/blog/2006/03/08/prioritizing-software-requirements-across-releases/">here</a>.  The focus on <a title="Only do the most important stuff" href="http://tynerblain.com/blog/2006/02/17/prioritizing-software-requirements-am-i-hot-or-not/">minimizing features to maximize the usefulness of the software</a> resonates as well.  The lack of discussion of creating a software requirements specification or functional specification is concerning.</p>
<p>The jury is still out on this issue for us:</p>
<p>Should this process supplant or augment more traditional requirements gathering processes?  Is it better or worse?  <strong>What do you think?</strong></p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Interaction+Design+Process+Overview+http://bit.ly/1cFcN8+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/&amp;t=Interaction+Design+Process+Overview" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Software design and specification and making movies</title>
		<link>http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/</link>
		<comments>http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/#comments</comments>
		<pubDate>Tue, 21 Mar 2006 04:07:40 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[alan cooper]]></category>
		<category><![CDATA[design process]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[software development process]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/</guid>
		<description><![CDATA[Alan Cooper presents the analogy that software development is like making movies in his book, The Inmates are Running the Asylum.  Cooper is presenting the analogy in the context of validating the business case for investing in interaction design, but it holds true for requirements as well.
]]></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%252F03%252F20%252Fsoftware-design-and-specification-and-making-movies%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Software%20design%20and%20specification%20and%20making%20movies%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F03%2F20%2Fsoftware-design-and-specification-and-making-movies%2F", "style": "big", "title": "Software design and specification and making movies" });</script></div>
<p><img title="movie reel" alt="movie reel" src="http://sehlhorst.smugmug.com/photos/60845646-M.jpg" /></p>
<p>Alan Cooper presents the analogy that software development is like making movies in his book, <a title="The inmates are running the asylum, at Amazon" href="http://www.amazon.com/exec/obidos/ASIN/0672326140/tynerblain-20">The Inmates are Running the Asylum</a>.  [This is a fantastic book for getting an understanding of exactly how Cooper's perspective evolved over the last decade.]  Cooper is presenting the analogy in the context of validating the business case for investing in interaction design.</p>
<p>Cooper points out that they&#8217;ve been making movies for a lot longer than we&#8217;ve been making software, and he&#8217;s exactly right that there is something to learn from the film industry.</p>
<p><strong>How the movie industry works</strong></p>
<p>The movie industry manages movies in three phases:</p>
<ul>
<li>Pre-production.  Determining what the movie will be about, raising funds, storyboarding and designing the movie, getting actors signed, writing the script, etc.</li>
<li>Production.  Shooting the film.  Directors, actors, and crew all working very expensively to get the film shot.</li>
<li>Post-production.  Tweaking and finalizing the film.</li>
</ul>
<p><strong>How software development parallels movie making</strong></p>
<p>Software development involves three phases as well: <a title="Foundation series: Software process overview" href="http://tynerblain.com/blog/2006/01/03/foundation-series-software-process-waterfall-process-versus-incremental-process/">Decide what to do, do it, and deliver it</a>.</p>
<p>The interesting thing to note is that the film industry universally invests time upfront in pre-production, to minimize the costs of production.  They recognize that production is more expensive than pre or post-production.  Many software teams take the same approach, although Agile development explicitly does not.  We gleaned some insight into Cooper&#8217;s perspective from <a title="Interaction design explained by Alan Cooper" href="http://tynerblain.com/blog/2006/03/07/interaction-design-explained-by-alan-cooper/">our coverage of a debate between Cooper and Kent Beck</a>.</p>
<p>If we accept Cooper&#8217;s premise that production is more expensive than pre-production, then software should follow the same model.</p>
<p>It&#8217;s worth noting that <a title="Agile requirements" href="http://tynerblain.com/blog/2005/12/05/agile-requirements/">an agile process</a> results in more design, not less.  Beck might argue that redesigning as we go is less expensive, because we improve our ability to understand what we actually want to create during the process of creating it.  Cooper disagrees.</p>
<p>As much as we like Cooper&#8217;s insights, the movie cost structure is not paralleled in the software development structure.  When we hire developers, it is analogous to the old movie studios keeping actors on retainer &#8211; the cost is &#8220;fixed.&#8221;  And the infrastructure costs of production (set creation, for example) are not affected by the time spent in production &#8211; they too are fixed.  If we have a project with contractor developers, then we have a variable cost, and we lose money while those developers are &#8220;sitting around.&#8221;  However, today&#8217;s projects leverage outsourced overseas contractors more and more &#8211; and these <em>actors</em> are a lot cheaper than <em>script writers</em>.</p>
<p><strong>What we know in spite of the analogy&#8217;s flaws</strong></p>
<p>We absolutely save time and money by <a title="Why we should invest in requirements management" href="http://tynerblain.com/blog/2005/12/28/why-we-should-invest-in-requirements-management/">defining requirements before we write the software</a>.  We also know that it is important to <a title="Software development process example" href="http://tynerblain.com/blog/2006/02/20/software-development-process-example/">design before we code</a>.</p>
<p>Neither of these statements conflicts with agile philosophies, if we take the approach of treating &#8220;design everything&#8221; with &#8220;design this one thing&#8221; similarly.  An agile approach will simply have multiple design/implement cycles, each focused on a subset of the software (and allowing for a redesign phase prior to delivery).</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Software+design+and+specification+and+making+movies+http://bit.ly/wlLPu+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/&amp;t=Software+design+and+specification+and+making+movies" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Software Testing Series: Organizing a Test Suite with Tags Part Three</title>
		<link>http://tynerblain.com/blog/2006/02/18/software-testing-series-organizing-a-test-suite-with-tags-part-three/</link>
		<comments>http://tynerblain.com/blog/2006/02/18/software-testing-series-organizing-a-test-suite-with-tags-part-three/#comments</comments>
		<pubDate>Sun, 19 Feb 2006 04:08:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[managing data]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/02/18/software-testing-series-organizing-a-test-suite-with-tags-part-three/</guid>
		<description><![CDATA[This is the third in a three-part post about using tags as a means to organize an automated unit test suite.

Part 3 of this post can be read as a standalone article. If it were, it would be titled Design elements of an automated unit test framework using tags. If you're only reading this post and not parts 1 and 2, pretend that this is the title.]]></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%252F02%252F18%252Fsoftware-testing-series-organizing-a-test-suite-with-tags-part-three%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Software%20Testing%20Series%3A%20Organizing%20a%20Test%20Suite%20with%20Tags%20Part%20Three%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F02%2F18%2Fsoftware-testing-series-organizing-a-test-suite-with-tags-part-three%2F", "style": "big", "title": "Software Testing Series: Organizing a Test Suite with Tags Part Three" });</script></div>
<p><img alt="organizing into bins" title="organizing into bins" src="http://sehlhorst.smugmug.com/photos/49901557-M.jpg" /></p>
<p><strong>Organizing a test suite with tags (part 3)</strong></p>
<p>This is the third in a three-part post about using tags as a means to organize an automated unit test suite.</p>
<p>Part 3 of this post can be read as a standalone article.  If it were, it would be titled <strong><em>Design elements of an automated unit test framework using tags</em></strong>.  If you&#8217;re only reading this post and not parts 1 and 2, pretend that this is the title.</p>
<ul>
<li><a title="Organizing a test suite with tags part 1" href="http://tynerblain.com/blog/2006/02/06/software-testing-series-organizing-a-test-suite-with-tags-part-one/">In part one of this post</a> we developed an understanding of tagging as a technology, including its pros and cons.</li>
<li><a title="Organizing a test suite with tags part 2" href="http://tynerblain.com/blog/2006/02/08/software-testing-series-organizing-a-test-suite-with-tags-part-two/">In part two of this post</a> we defined the top five opportunities and problems inherent in the organization of automated test suites.</li>
<li>In part three of this post we will consider the key design associated with using tags as a mechanism for organization.</li>
</ul>
<p><strong>Setting expectations</strong></p>
<p>We designed a custom unit test automation system based on the use of tags to organize automated tests for a client.  That system isn&#8217;t the subject of this post, but it did provide us with context and insight into the problem we&#8217;ve addressed.  In this post we won&#8217;t be presenting a completed design &#8211; there are many good tools out there already for automating unit tests.  We will be talking about a subset of the design decisions that are associated with the use of tags as a mechanism to organize the unit testing within the suite.  In <a title="Creating a unit testing tool" href="http://tynerblain.com/blog/2005/12/16/marc-clifton%e2%80%99s-advanced-unit-testing-articles/">Marc Clifton&#8217;s advanced unit testing articles</a>, he walks readers through the creation of a test automation tool for C#.  The concepts presented here can be incorporated into a design relatively easily, but the details of doing that are a little too off-topic for most of our readers.</p>
<p>We are writing about designing software that tests other software.  To keep our language consistent and easy to follow in this post, we will use two terms.  <em>Tool</em> represents the test automation software that we are designing.  <em>Application</em> represents software being tested with the tool, or more specifically, with tests maintained within the tool.</p>
<p><strong>Design approach</strong></p>
<p>After identifying the use cases and functional requirements for the tool, we began iterating on screen designs, business (requirement) object models and architectural (implementation) object models.  We created an object oriented analysis (OOA) diagram to represent the concept concisely.<br />
<strong>OOA diagram</strong></p>
<p><img title="OOA diagram" alt="OOA diagram" src="http://sehlhorst.smugmug.com/photos/56694465-M.png" /></p>
<p>An <a title="Object oriented requirements" href="http://tynerblain.com/blog/2005/12/09/a-picture-is-worth-a-thousand-requirements/">object oriented analysis diagram</a> of the key relationships between scripts, inspections and tags.<br />
A script is the embodiment of a user session in the application &#8211; it represents a set of actions that a user of the application would take.  The user of the tool will create a script (as a separate file), and will create a reference to that script in the tool.</p>
<p>An inspection is an unit test of the application.  The inspection evaluates a particular condition or makes a specific assertion about the state of the application (a properly filled out order is submitted when the user clicks &#8220;submit&#8221;) .  The code that executes that inspection is represented outside of the tool.  The user of the tool will create a reference to the inspection within the tool.</p>
<p>Inspections can be associated explicitly with any number of scripts (including none).  An association between inspection 1 and script A is an instruction to the tool to run script A within the application, and evaluate inspection 1 against the script.</p>
<p>The processing of scripts and inspections is outside the scope of this document, but is covered in many other references, including <a title="Marc Clifton links" href="http://tynerblain.com/blog/2005/12/16/marc-clifton%e2%80%99s-advanced-unit-testing-articles/">Marc Clifton&#8217;s</a>.</p>
<p>Any number of tags can be associated with each script.  Tags could be used to represent different user actions (like deleting items from a shopping cart), different specific selections (user adds 1000 of an item to the shopping cart), different situations (shipping address does not match billing address), or any other relevant descriptor of the user session.  A single script could have multiple tags.</p>
<p>Each inspection can be transitively associated with a set of scripts by explicitly associating it with one or more tags.  By associating an inspection with a tag, we are instructing the tool to dynamically associate the inspection with all scripts that are associated with all of the identified tags.  There are two benefits to this approach.  First, this approach reduces the amount of time that a user of the tool must spend to associate an inspection with a set of relevant existing scripts.  Second, this indirect mapping is utilized to assure that an inspection that is mapped to a tag will also <em>automatically</em> become associated with any future scripts that are added &#8211; as long as they have associations with the same tag or tags as the script.  This reduces the cost of creating future mappings when scripts are added to the suite in the future.</p>
<p>We expect this design approach to provide significant labor savings in maintaining a test suite.  We built our business case for this project upon that assumption.  We also expect that this design approach will result in better testing coverage of the application by users of the tool.  We did not incorporate that expectation into our cost benefit analysis when calculating the <a title="Definition of ROI" href="http://tynerblain.com/blog/2006/02/01/definition-of-roi-return-on-investment/">ROI</a> of this project.</p>
<p><strong> Followup</strong></p>
<p>We will follow-up some months from now when we can evaluate data and draw conclusions from use of a tool built along similar lines for a client.  Until then, we have confidence that it will work very well, but no tangible data.</p>
<p><strong>Summary</strong></p>
<ul>
<li><a title="Organizing a test suite with tags part 1" href="http://tynerblain.com/blog/2006/02/06/software-testing-series-organizing-a-test-suite-with-tags-part-one/">In part one of this post</a> we developed an understanding of tagging as a technology, including its pros and cons.</li>
<li><a title="Organizing a test suite with tags part 2" href="http://tynerblain.com/blog/2006/02/08/software-testing-series-organizing-a-test-suite-with-tags-part-two/">In part two of this post</a> we defined the top five opportunities and problems inherent in the organization of automated test suites.</li>
<li>In part three of this post we considered the key design elements associated with using tags as a mechanism for organization.</li>
</ul>
<p>- &#8211; -Check out the <a title="Software testing series index" href="http://tynerblain.com/blog/software-testing-series-index/">index of <em>software testing series posts</em></a> for more articles.</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Software+Testing+Series%3A+Organizing+a+Test+Suite+with+Tags+Part+Three+http://bit.ly/4BfbMO+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/02/18/software-testing-series-organizing-a-test-suite-with-tags-part-three/&amp;t=Software+Testing+Series%3A+Organizing+a+Test+Suite+with+Tags+Part+Three" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/02/18/software-testing-series-organizing-a-test-suite-with-tags-part-three/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Describing the Software Development Process</title>
		<link>http://tynerblain.com/blog/2006/01/29/describing-the-software-development-process/</link>
		<comments>http://tynerblain.com/blog/2006/01/29/describing-the-software-development-process/#comments</comments>
		<pubDate>Mon, 30 Jan 2006 02:28:09 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[design documents]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[MRD]]></category>
		<category><![CDATA[PRD]]></category>
		<category><![CDATA[requirements documents]]></category>
		<category><![CDATA[requirements process]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[software process]]></category>
		<category><![CDATA[value prop]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/01/29/describing-the-software-development-process/</guid>
		<description><![CDATA[Software development involves determining what to develop, documenting this decision, determining how to develop it, and actually developing it.We present a framework for describing this process in terms of layers of activity. Many people use pyramid analogies, which show the magnitude of effort in each layer (lines of code versus lines of requirements, for example). Many other people use inverted pyramids to reflect the importance (or impact) of work done at different layers (a sentance defining a strategy has more impact than a line of code). Some people show PERT diagrams of waterfalls or pretty circular arrows charts showing iterative lifecycles, or any of many good analogies.]]></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%252F01%252F29%252Fdescribing-the-software-development-process%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Describing%20the%20Software%20Development%20Process%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F01%2F29%2Fdescribing-the-software-development-process%2F", "style": "big", "title": "Describing the Software Development Process" });</script></div>
<p><img alt="Peeling an onion" title="Peeling an onion" src="http://sehlhorst.smugmug.com/photos/53683228-M.jpg" /></p>
<p><strong>Describing the software development process</strong></p>
<p>Software development involves determining what to develop, documenting this decision, determining how to develop it, and actually developing it.</p>
<ul>
<li>How do we separate these very different processes so that we can talk about them?</li>
<li>How do we staff a team to accomplish them?</li>
</ul>
<p>We present a framework for describing this process in terms of layers of activity.  Many people use pyramid analogies, which show the magnitude of effort in each layer (lines of code versus lines of requirements, for example).   Many other people use inverted pyramids to reflect the importance (or impact) of work done at different layers (a sentance defining a strategy has more impact than a line of code).  Some people show PERT diagrams of waterfalls or pretty circular arrows charts showing iterative lifecycles, or any of many good analogies.</p>
<p><strong>We think of it as an onion.</strong></p>
<p>When describing any software, we can discuss the software at any of multiple levels of abstraction.  The heart of the onion is a secret to those who never cut onions &#8211; they only see the outside.  The center is strong, but if you aren&#8217;t used to it it can make you cry.<br />
Different people in an organization will discuss a software solution at the different layers.  It isn&#8217;t because they are <em>unable</em> to discuss at a different level, it is because the level they discuss it at is most germaine to the decisions they are making.  A developer will make decisions that are much more focused than a CIO.  And a product manager will apply policy decisions at a different level from either of the others.</p>
<p>We will describe out framework in terms of different layers of abstraction.  We&#8217;ll start at the inner level, or smelliest part of the onion and work our way out to the skin.  We&#8217;ll move from the concrete to the abstract.  From the implementation details to the goals.<br />
<strong>The layers of abstraction</strong></p>
<ol>
<li><strong>Implementation</strong>.  The actual code that is written and running.  The user interface that is presented.  The tests that are included in a regression suite.  We do what we&#8217;re asked, in the way that we&#8217;re asked.</li>
<li><strong>Design</strong>.  The architectural description of the implementation, UI and test suite.  Design decisions define much of the reality for developers &#8211; good design decisions make implementation and maintenance easy.  Bad design decisions can make for disaster.</li>
<li><strong>Requirements</strong>.  Different processes will use different names for these.  In a process that uses <a title="Introduction to structured requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements</a>, this is the functional requirements, user requirements and business requirements.  These can be captured in an <a title="Requirements document proliferation" href="http://tynerblain.com/blog/2006/01/20/document-proliferation/">FRS, SRS, or PRD (but please no, not all three!)</a>.</li>
<li><strong>Market analysis</strong>.  The problems or opportunities that express potential <a title="Definition of return on investment (ROI)" href="http://tynerblain.com/blog/2006/02/01/definition-of-roi-return-on-investment/">ROI</a> opportunities.  These can be captured in an MRD.</li>
</ol>
<p><strong>How do organizations handle this?<br />
</strong></p>
<p>Most software is driven from the top down (4,3,2,1) and it can be like peeling an onion.  First identify a value prop.  Then figure out how to achieve that value in software.  Create a design that will work, and implement it.  Each step is peeling another layer from the onion.</p>
<p>There are exceptions to this rule &#8211; many startups have a &#8220;<em>this is cool, what can we use it for?</em>&#8221; mindset.  Also, more mature businesses will often task someone with <em>leveraging existing assets</em> &#8211; which means &#8220;find out how to make more money from what we already have.&#8221;  There are absolutely good examples of this both in software and in hardware.  But that&#8217;s really not what software processes target.</p>
<p>Different people in the organizations have different responsibilities &#8211; they tend to operate exclusively at one layer of our framework or at most two layers.</p>
<p><strong>Wearing one hat or two?</strong><br />
Looking at common roles within companies or on projects, we often find people doing two of the jobs in our four-layer framework.</p>
<ul>
<li><strong>Design/Implement</strong> is a common pairing (combining 2 &#038; 1).  Architect/developer is a practical and common senior position.  The skills required to design and implement are complimentary &#8211; one is expressly a superset of the other.</li>
<li><strong>Market/Spec</strong> is another common one (combining 4 &#038; 3).  A product manager often plays both roles (<em>outbound </em>and <em>inbound </em>are the industry jargon terms for &#8220;focus on the market&#8221; and &#8220;focus on the product&#8221;).  There are synergies between understanding what problems need to be solved, and identifying what problems need to be solved <em>with software</em>.</li>
</ul>
<p><strong>A bad idea is combining the roles of &#8220;decide what to do&#8221; and &#8220;decide how to do it&#8221;.</strong></p>
<ul>
<li><strong>Spec/Design</strong> is rarely done intentionally.  We&#8217;ve done this once, and succeeded only because we rigorously separated the two roles.  Technically, I played a Spec/Design/Implementation role, while managing other developers and building a relationship with the clients.  We do not encourage staffing people with this combination of responsibilities.  It is no more natural as juggling while swimming.</li>
</ul>
<p><strong>Final thoughts</strong></p>
<p>There are four roles in our framework, from identifying valuable opportunities to writing great code.  It is a good idea to combine design and implementation responsibilities in a senior person on the development team.  We would have avoided <a title="Putting implementation details in a requirements document" href="http://tynerblain.com/blog/2006/01/25/a-requirements-documentation-mistake/">our requirement writing mistake</a> if we had done that on our previous project.  Combining <em>inbound</em> and <em>outbound</em> product management responsibilities makes sense for smaller teams and exceptional individuals.</p>
<p>Asking the same person (or the same document) to define both <em>what software should do</em> and <em>how the software should do it</em> is a bad combination for any but the most nimble <a title="Different people have different areas of expertise" href="http://tynerblain.com/blog/2005/12/02/intimate-domains-%e2%80%93-navigating-areas-of-expertise/">switch-hitter</a>.  <a title="See the comments for a related debate" href="http://tynerblain.com/blog/2005/12/29/cruddy-use-cases-and-shakespeare/">Shakespeare would qualify as a nimble switch-hitter</a>.</p>
<p>[Update: We've created a few followup posts that talk about these topics in more detail</p>
<ul>
<li><a title="Foundation series: User experience disciplines" href="http://tynerblain.com/blog/2006/03/03/foundation-series-user-experience-disciplines/">Foundation series: User experience disciplines</a></li>
<li><a title="Software development process example" href="http://tynerblain.com/blog/2006/02/20/software-development-process-example/">Software development process example</a></li>
<li><a title="Requirements versus design - which is which and why" href="http://tynerblain.com/blog/2006/02/11/requirements-vs-design-which-is-which-and-why/">Requirements versus design - which is which and why</a></li>
<li><a title="Software requirements - process and roles" href="http://tynerblain.com/blog/2006/02/13/software-requirements-process-and-roles/">Software requirements - process and roles </a></li>
</ul>
<p>]</p>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Describing+the+Software+Development+Process+http://bit.ly/3M4j6B+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/01/29/describing-the-software-development-process/&amp;t=Describing+the+Software+Development+Process" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/01/29/describing-the-software-development-process/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Top five usability blunders (and fixes)</title>
		<link>http://tynerblain.com/blog/2006/01/07/top-five-usability-blunders-and-fixes/</link>
		<comments>http://tynerblain.com/blog/2006/01/07/top-five-usability-blunders-and-fixes/#comments</comments>
		<pubDate>Sat, 07 Jan 2006 06:31:49 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Lists]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[blunders]]></category>
		<category><![CDATA[expert user]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[novice user]]></category>
		<category><![CDATA[Software Reviews]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tyner blain]]></category>
		<category><![CDATA[tynerblain]]></category>
		<category><![CDATA[user]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/01/07/top-five-usability-blunders-and-fixes/</guid>
		<description><![CDATA[
topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F01%2F07%2Ftop-five-usability-blunders-and-fixes%2F", "style": "big", "title": "Top five usability blunders (and fixes)" });

Five easy steps to alienating your users with bad usability

Fail to simplify a comprehensive interface so that new users can quickly climb past the suck threshold.
Build an inconsistent UI layout or interaction design that varies throughout the application, creating a sense of dissonance [...]]]></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%252F01%252F07%252Ftop-five-usability-blunders-and-fixes%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Top%20five%20usability%20blunders%20%28and%20fixes%29%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F01%2F07%2Ftop-five-usability-blunders-and-fixes%2F", "style": "big", "title": "Top five usability blunders (and fixes)" });</script></div>
<p><img title="frustrated user" alt="frustrated user" src="http://sehlhorst.smugmug.com/photos/48096078-M.jpg" /></p>
<p><strong>Five easy steps to alienating your users with bad usability</strong></p>
<ol>
<li><strong>Fail to simplify</strong> a comprehensive interface so that new users can quickly <a title="users must develop skills quickly" href="http://tynerblain.com/blog/2005/12/14/getting-past-the-%e2%80%99suck-threshold%e2%80%99/">climb past the suck threshold</a>.</li>
<li><strong>Build an inconsistent</strong> UI layout or interaction design that varies throughout the application, creating a sense of dissonance for the users.</li>
<li><strong>Interrupt the user</strong>&#8217;s workflow with pop-ups and other modal interruptions.</li>
<li><strong>Limit expert users</strong> to following &#8220;new user&#8221; workflow, one tedius, repetitive step at a time when shortcuts would work.</li>
<li><strong>Don&#8217;t suggest solutions</strong> when an error message is displayed.</li>
</ol>
<p><strong> Five difficult steps to making your users fall in love with your application</strong></p>
<ol>
<li><strong>Plan for new users</strong>.  Incorporate training, documentation, guides (or wizards), and feedback (breadcrumbs, confirmations) into your design.  All of these &#8220;new user&#8221; solutions can be ignored once the users become experts.</li>
<li><strong>Plan a consistent UI</strong>.  Share a common stylesheet across web pages.  Keep screenshots of the application taped to the wall where UI designers and developers can quickly assure commonality.  Reuse interace code &#8211; derive from (or reference) common search widgets, sortable grids, etc.  Make sure part of design reviews explicitly ask &#8220;is this the same as what&#8217;s already there&#8221; or &#8220;are we updating the existing stuff to match this?&#8221;</li>
<li><strong>P</strong><strong>rovide passive warnings</strong>.  Provide feedback in the status bar or page header when something &#8220;might not be right&#8221;.  Add &#8220;Don&#8217;t ask me again&#8221; checkboxes to the &#8220;Are you sure you want to do this?&#8221; interuptions &#8211; let each user decide when they <em>know what they&#8217;re doing</em> and don&#8217;t want the interruption.  Add undo capabilities for when users mess up.</li>
<li><strong>See #1</strong>&#8217;s solution approach.</li>
<li><strong>Add a &#8220;Fix this for me&#8221; button</strong> whenever a modal message must be displayed.  At a minimum, offer targeted advice on how to fix the problem manually &#8211; right in the dialog.  Add logging of all modal interruptions, so that developers can design new automated fixes (or prevent errors entirely) in future releases.</li>
</ol>

<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Top+five+usability+blunders+%28and+fixes...+http://bit.ly/tsYcF+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/01/07/top-five-usability-blunders-and-fixes/&amp;t=Top+five+usability+blunders+%28and+fixes..." title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/01/07/top-five-usability-blunders-and-fixes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
