<?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; Foundation series</title>
	<atom:link href="http://tynerblain.com/blog/category/foundation-series/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Thu, 11 Mar 2010 17:11:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Foundation Series: Cross-Selling and Upselling</title>
		<link>http://tynerblain.com/blog/2009/10/28/cross-sell-and-upsell/</link>
		<comments>http://tynerblain.com/blog/2009/10/28/cross-sell-and-upsell/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 04:40:20 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[eCommerce]]></category>
		<category><![CDATA[cross-sell]]></category>
		<category><![CDATA[crosssell]]></category>
		<category><![CDATA[up-sell]]></category>
		<category><![CDATA[upsell]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=1099</guid>
		<description><![CDATA[
You have an eCommerce site.  You sell products online.  Do you cross-sell additional products?  Do you upsell to better products?  This article explains the difference between cross-sell and upsell, and looks at some real-world data about the effectiveness of both.
Cross-Sell and Upsell &#8211; What Are They?
Cross-selling and upselling are marketing techniques that are applied during [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="ecommerce classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" alt="" width="250" height="195" /></p>
<p>You have an eCommerce site.  You sell products online.  Do you cross-sell additional products?  Do you upsell to better products?  This article explains the difference between cross-sell and upsell, and looks at some real-world data about the effectiveness of both.</p>
<h2><span id="more-1099"></span>Cross-Sell and Upsell &#8211; What Are They?</h2>
<p>Cross-selling and upselling are marketing techniques that are applied during the sales process to increase the value of the transaction to both the buyer and the seller.  Technically, they only increase the value to the seller &#8211; but they <em>should</em> also be increasing the value to the buyer.</p>
<p>The key idea behind both cross-selling and upselling is that you are changing a transaction that is <em>already in process</em>.  You might think that marketing ends once buying begins.  Not so.  Marketing is about getting the right message (buy something from us) to the right person (someone who needs our products) at the right time (when they are ready to buy).</p>
<ul>
<li><em>What better time to market</em> than when someone is in the process of buying already?</li>
<li><em>Who better to market to</em> than someone who is in the process of buying from us?</li>
</ul>
<p>The trick then, is in sending the right marketing message.</p>
<p>Cross-selling and upselling only make sense in the context of an ongoing sales process.  For an eCommerce retailer (a company that sells a product online), that means that the customer (technically, the prospective customer, also known as a prospect) is in the process of making a purchase &#8211; either looking for the right product, evaluating a specific product, or having selected (but not yet purchased) a product.</p>
<ul>
<li><strong>Cross-selling</strong> is defined as selling an additional product when the customer is purchasing the original product.</li>
<li><strong>Upselling </strong>is defined as selling a more expensive product instead of the product that the customer was originally purchasing.</li>
</ul>
<p>As a retailer, you have to know when to attempt to cross-sell, and when to propose an upsell &#8211; and when to do both.  To decide when to try and modify (and risk losing) a sale, you have to look at the economic impact on your business of trying to change an ongoing sale.  Cross-selling does not help you make a sale that you wouldn&#8217;t already have made &#8211; although an upsell suggestion may help a customer discover a &#8220;better&#8221; product for their needs, and close a sale that would have been abandoned otherwise.</p>
<p>Note &#8211; to keep the language of this article easier to read, the word &#8220;product&#8221; is being used to represent (traditional) products and services &#8211; anything a business would sell.</p>
<h2>Economics of Selling</h2>
<p>To evaluate the economics of cross-selling, you have to first establish the economic measures of selling.  When you sell something you have the following:</p>
<ul>
<li><strong>Price </strong>- the price the customer pays for the product being purchased.  This is also known as revenue.</li>
<li><strong>Cost </strong>- the cost to the merchant to acquire or create the product being purchased.  Also known as &#8220;COGS&#8221; &#8211; an acronym for cost of goods sold.</li>
<li><strong>Gross Profit</strong> &#8211; the price paid by the customer minus the cost of the product.</li>
<li><strong>Cost of Sale</strong> &#8211; the cost the merchant incurs to make the sale.  For an individual transaction, this is called &#8220;cost per quote&#8221; or &#8220;cost per order&#8221; or &#8220;cost per sale.&#8221;</li>
<li><strong>Net Profit</strong> &#8211; the gross profit minus the cost per sale.  This is also known as operating income.</li>
</ul>
<p>As an online retailer, you will likely track all of the above.  Your <em>Cost of Sale</em> is potentially difficult to measure &#8211; you will probably have a mixture of <a title="how to measure costs" href="http://tynerblain.com/blog/2007/02/05/calculating-roi-and-measuring-costs/">variable costs and fixed costs</a> that can be allocated to the cost of sales.</p>
<ul>
<li>If you pay $1,000 per month to host your eCommerce website (making sales possible) and you make 1,000 sales per month, you could allocate $1 per sale as a cost per sale.</li>
<li>If you pay 2.5% of the price collected to a credit card processing service, and you sold a product for $100, you would incur a $2.50 cost per sale for that transaction.</li>
</ul>
<p>A financial analysis of your business will involve aggregating all of the revenue and costs, and calculating the total operating income (all revenue minus all costs) for a period of time.  Since you sell different products (with different costs) at different prices, any given transaction will have a different net profit.  As part of managing your sales and pricing, you may also measure</p>
<ul>
<li><strong>Average Revenue per Order </strong>- 100 orders for a total $1,500 in revenue would yield and average revenue per order of $15.  Calculated as Revenue / Number of Orders &#8211; in this example $1,500/100 = $15.</li>
<li><strong>Average Gross Profit per Order</strong> &#8211; 100 orders at $1,500 in revenue with $1,100 in COGS would yield an average gross profit of $4 per order.  Calculated as (Total Revenue &#8211; Total COGS)/Number of Orders &#8211; in this example ($1,500 &#8211; $1,100)/100 = $4.</li>
<li><strong>Gross Profit Margin (Percentage)</strong>- a product purchased for $100 for which the retailer paid $60 to acquire the product has a gross profit margin of 40%.  Calculated as (Revenue &#8211; COGS)/Revenue &#8211; in this example ($100 &#8211; $60)/$100 = 40%.</li>
</ul>
<h2>Economics of Cross-Selling</h2>
<p>Cross-selling is when you convince a customer (who is in the process of buying something) to buy an additional product.  When you successfully cross-sell a product, you are increasing the revenue for the order.  This results in an increase in average revenue per order.  The sale of the additional product will also increase the average gross profit per order.  The cross-sell <em>may</em> increase the gross profit margin of the order, or it may not.  When the product originally being purchased is less profitable than the additional product being cross-sold, the margin is increased.  When the original product is more profitable than the additional product, the margin is decreased.</p>
<p>If your current operations strategy involves increasing your profit <em>margins</em>, you need to make sure your cross-sell activities only recommend additional products with <em>higher</em> margins than the products against which they are being cross-sold.  When your strategy is prioritizing growth over profitability, your cross-sell activities should focus on <em>conversion</em> &#8211; increasing the percentage of the time are you successfully cross-selling additional products.</p>
<h2>Economics of UpSelling</h2>
<p>Upselling is when you convince a customer (who is in the process of buying something) to buy something else &#8211; specifically, something more expensive.  This replacement of the original item with a new item is known in economics as product substitution.  Since the products are not identical (one is more expensive and presumably &#8220;better&#8221; than the other), the products are by definition <em>imperfect</em> substitutes.  A <em>perfect</em> substitute is one that would be identical to the product it replaced.</p>
<p>[Update: Check out <em><a title="complementary products and product substitution" href="http://tynerblain.com/blog/2009/12/07/substitutes-and-complements/">Complementary and Substitute Products</a></em> for more on product substitution.]</p>
<p>Successfully upselling a product results in an increase in revenue, and ideally an increase in profits.  It may also result in an increase in profit margin (but may not).  Consider a customer who intends to purchase a 200GB hard drive for $100 (at a cost of $45).  This purchase would yield $100 is revenue, and $55 dollars in profit at a 55% profit margin.  If you successfully upsold the customer to purchase a 500GB hard drive for $200 (at a cost of $100), the purchase would yield $200 in revenue, and $100 in profit at a 50% profit margin.</p>
<p>You have to understand if your strategy is prioritizing an increase in revenue, profits, or profit margins.  This will determine which upselling recommendations you want to make to customers.</p>
<h2>Measuring Cross-Selling and Upselling</h2>
<p>In addition to measuring your sales you want to specifically measure the impact that cross-selling and upselling has on your measurements.  Those measurements are described above.  You may be breaking those measurements down by product category, product price levels, market segments, or any other decomposition that helps guide future decisions.  You also want to measure the effectiveness of your cross-selling and upselling solutions.  You do that by measuring conversion &#8211; the percentage of customers that change their purchases in response to your cross-sell and upsell marketing.</p>
<p>Get Elastic, the eCommerce blog,<a title="measuring cross-sell" href="http://www.getelastic.com/measuring-cross-sell-success/"> shares some 2009 survey data</a> provided by <a title="etailing group survey data" href="http://www.internetretailer.com/article.asp?id=30618">the e-tailing group</a> on cross-sell and upsell conversion statistics.  Two-thirds of retailers that measure cross-sell and upsell conversion rates reported less than 5% conversion rates.  At the same time, Get Elastic reports that Amazon reported 35% of their 2006 revenue came from cross-sells.</p>
<p>If you&#8217;re adding cross-selling and upselling capabilities to your eCommerce website, you should set your initial expectations of effectiveness low, and your aspirations high.  You won&#8217;t start out with results like Amazon&#8217;s &#8211; no more than 98% of retailers that measure conversion see results far lower than Amazon&#8217;s.  In fact, most of them see results <em>an order of magnitude</em> smaller.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Cross-Selling+and+Upselling+http://bit.ly/AgLtQ+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2009/10/28/cross-sell-and-upsell/&amp;t=Foundation+Series%3A+Cross-Selling+and+Upselling" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/10/28/cross-sell-and-upsell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Price Elasticity</title>
		<link>http://tynerblain.com/blog/2009/06/01/price-elasticity/</link>
		<comments>http://tynerblain.com/blog/2009/06/01/price-elasticity/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 22:09:02 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[economics]]></category>
		<category><![CDATA[price elasticity]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=932</guid>
		<description><![CDATA[
When prices go up, demand goes down.  But how much does it go down?  Price elasticity of demand is the term economists use for the math that describes this behavior.

Cause and Effect
Prices go up and sales go down.  Prices go down, and sales go up.  There is definitely a correlation &#8211; and economists will argue [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="economics classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" alt="" width="250" height="195" /></p>
<p>When prices go up, demand goes down.  But how much does it go down?  Price elasticity of demand is the term economists use for the math that describes this behavior.</p>
<p><span id="more-932"></span></p>
<h2>Cause and Effect</h2>
<p>Prices go up and sales go down.  Prices go down, and sales go up.  There is definitely a correlation &#8211; and economists will argue that it is cause and effect.  I think they&#8217;re right &#8211; and here&#8217;s the rationale.</p>
<p>Imagine an apple, a group of people who are interested in buying that apple.  Each person would be willing to pay a different amount for that apple, because each person assigns a different value, or <a title="intro to utility curves" href="http://tynerblain.com/blog/2007/02/06/foundation-series-intro-to-utility-curves/">utility</a>, to having that apple.   Even two identical twins who normally would value the apple the same might value it differently <em>right now</em>.  Imagine that one of our twins has not eaten in a couple days, and the other just finished a very large meal.  They would realize different amounts of utility <em>right now</em> from that same apple.  Or imagine a millionaire and a pauper, who value apples equally, but place less importance on a small amount of money.  Or imagine someone with a bushel of apples, and someone with none &#8211; to whom is &#8220;one more apple&#8221; worth more?</p>
<p>Because different people are willing to pay different amounts (for different reasons) to buy an apple, we have the effect of demand (a proxy for eventual sales) that varies with price.</p>
<p>At price X, half of this group of people would be willing to buy the apple.  Some people might see it as a great bargain, while others are only just barely willing to pay the price of X.  There are also some people who are almost willing, but the price is just a bit too high.  And finally, some people for whom a price of X is just unreasonable.</p>
<p>If you lower the price, all of the people who were previously willing to buy the apple are still willing.  The people who were almost willing before will now buy the apple.  If, on the other hand, you had raised the price, the people who were just barely willing to buy will instead not buy.</p>
<p><img class="alignnone" title="price elasticity" src="http://sehlhorst.smugmug.com/photos/552079332_BBBNq-L.png" alt="" width="352" height="352" /></p>
<p> </p>
<p>The graph above shows price on the vertical axis, and quantity on the horizontal.  When you lower the price from P0 to P1, the quantity that will be sold increases from Q0 to Q1.</p>
<h2>Price Elasticity of Demand</h2>
<p>When you&#8217;re talking about pricing impacts on demand, you&#8217;ll usually just say &#8220;price elasticity&#8221; but it is worth remembering the &#8220;of demand&#8221; part.  For example &#8211; there&#8217;s also <em>Price Elasticity of Supply</em>.  Think of the apple example above.  Imagine that the group of people are all selling apples, and there&#8217;s a single buyer.  Depending on the price the buyer sets, some people would be willing to sell, and others unwilling.  Change that market price, and the number of available apples for sale will change.  For now, we&#8217;ll focus on the impact of changing prices on demand.</p>
<p>The reason price elasticity is interesting is because it gives us some insight into how <em>much</em> the quantity will change when prices change.</p>
<p>Economists have a couple formulas for price elasticity (of demand), including e = % change in quantity / % change in price.</p>
<p>When the relative quantity changes by exactly the same amount as the relative price, you have e=-1, referred to as <em>unitary</em> elasticity.  If you reduce your price by 10%, you increase the quantity sold by 10%.</p>
<p><img class="alignnone" title="unitary elasticity" src="http://sehlhorst.smugmug.com/photos/552108894_q2vGF-L.png" alt="" width="352" height="352" /></p>
<p>As a numerical example, you price bags of apples at $10 each, and are able to sell 20 bags of apples for $200.  With e=-1, unitary elasticity, if you lowered the price to $9, you would then sell 22 bags for $198.  If you had raised the price to $11 per bag, you would have sold 18 bags for $198.  If you dropped the price to $5 per bag, you would have sold 40 bags for $200.  Ignoring rounding errors, you would always have the same revenue.</p>
<p><img class="alignnone" title="revenue as area" src="http://sehlhorst.smugmug.com/photos/552116832_CG8Fi-L.png" alt="" width="352" height="352" /></p>
<p>The areas of the two rectangles formed by matching price and quantity are identical.  This leads to the conclusion that you will get the same revenue (assuming you can meet demand) regardless of the price you set for your product.  However, don&#8217;t worry about this too much &#8211; as far as I know, no real-world products have unitary elasticity.</p>
<h2>Changes, More or Less</h2>
<p>Elasticity is still useful for understanding the magnitude of change in demand that results from changes in price.  Does demand change by more than your change in price, or by less?</p>
<p>An <em>inelastic</em> demand curve has an elasticity value between 0 and -1.</p>
<p><img class="alignnone" title="inelastic demand curve" src="http://sehlhorst.smugmug.com/photos/552108937_e5ZpV-L.png" alt="" width="352" height="352" /></p>
<p>The resultant <em>relative </em>changes in quantity from a given change in price are smaller than the change in prices.  You can see from the steepness of the cuve in the inelastic demand curve above that a large drop in price (from P0 to P1) results in a small increase in quantity sold (from Q0 to Q1).  However, the converse is also true &#8211; a relatively large increase in price will cause a proportionally smaller decrease in demand.</p>
<p>This tends to be the case with products that people &#8220;must have.&#8221;  In other words, people don&#8217;t have good alternatives (substitute goods, or doing without).  When the price of gas doubled, did you reduce the amount of gas you purchase by half, or by less than half?  On the whole, demand for gas dropped by less than 50% when the price doubled.  Another example is anti-biotics.</p>
<p>An <em>elastic</em> demand curve is one where the quantity is very sensitive to changes in price, and has elasticity values below -1.</p>
<p><img class="alignnone" title="elastic demand curve" src="http://sehlhorst.smugmug.com/photos/552108985_ZLiFU-L.png" alt="" width="352" height="352" /></p>
<p>Small changes in price result in large changes in quantity with an elastic demand curve.  This tends to happen when there are reasonable alternatives to purchasing the product.  For example, when mass-scale production of chicken started and poultry prices dropped in the US, demand increased faster than prices dropped.  This happened at the expense of beef and pork purchases.</p>
<h2>Conclusion</h2>
<p>Understanding price elasticity of demand is important to making decisions about pricing your products.  There are many factors that determine price elasticity.  The value of your product is a key driver, as it determines the utility curve on which a customer places your product &#8211; how much is &#8220;what your product does&#8221; worth to your potential customer.  Understanding the alternatives your customer has are important &#8211; are you selling a commodity product like typing paper, or a unique product like a Tesla?  The more &#8220;perfect substitutes&#8221; there are for your product, the more elastic your demand curve will be.  If the problem you&#8217;re solving can also be solved in other ways, you are again facing substitution.  A pencil is an &#8220;imperfect substitute&#8221; for a pen, for customers that care only about recording messages on paper.  These also tend to make your demand curve more elastic.</p>
<p>In <em><a title="predictably irrational at amazon" href="http://www.amazon.com/dp/0061854549?tag=tbrb-20&amp;link_code=as3&amp;creativeASIN=0061854549&amp;creative=373489&amp;camp=211189">Predictably Irrational</a></em>, the authors identify several pricing concepts, like <em>anchoring</em> where people are psychologically influenced to believe one product is more valuable than another.  They look at some very interesting experiments that appear to highlight things that influence people&#8217;s <em>perception of</em> utility &#8211; making them willing to pay different prices.  An interesting extension of their ideas is that you can influence the price elasticity of demand for your product through positioning and marketing actions.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Price+Elasticity+http://bit.ly/5vrxU+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2009/06/01/price-elasticity/&amp;t=Foundation+Series%3A+Price+Elasticity" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2009/06/01/price-elasticity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foundation Series: SaaS Economics (Software as a Service)</title>
		<link>http://tynerblain.com/blog/2008/08/13/foundation-series-saas-economics/</link>
		<comments>http://tynerblain.com/blog/2008/08/13/foundation-series-saas-economics/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 02:55:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Slightly off-topic]]></category>
		<category><![CDATA[foundation]]></category>
		<category><![CDATA[kadient]]></category>
		<category><![CDATA[saas]]></category>
		<category><![CDATA[software as a service]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=695</guid>
		<description><![CDATA[
There are a bunch of new* ways of selling software these days.  SaaS (Software as a Service) has been in the consumer space for a while, and is making significant inroads into the enterprise software space today.    If you&#8217;re considering purchasing or using software, you should understand what SaaS means and how it is different [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" alt="foundation series classroom" width="250" height="195" /><br />
There are a bunch of new* ways of selling software these days.  SaaS (Software as a Service) has been in the consumer space for a while, and is making significant inroads into the enterprise software space today.    If you&#8217;re considering purchasing or using software, you should understand what SaaS means and how it is different from the software products of the past.*<br />
<span id="more-695"></span><br />
*Note: None of these are truly new ideas &#8211; time-shares on mainframes, &#8220;dumb&#8221; terminals (like the IBM 3270, aka &#8220;green screen&#8221;) remote / shared storage have been around since the 70&#8217;s.  Application Service Providers (ASP) were big (big flops) in the 1990s.  But people have short memories, so &#8220;new&#8221; is how too many people think about SaaS today.</p>
<h2>From The Customer&#8217;s Point of View</h2>
<p>If you&#8217;re selling software as a service, you hopefully don&#8217;t need a <em>Foundation Series</em> introduction to SaaS.  If you&#8217;re considering purchasing software as a service, then maybe you do.  This article is not an article about the challenges of product management for a SaaS <em>product</em>, nor is it about multi-tenant architectures and other SaaS implementation details.</p>
<p>This article looks to simply compare, <em>from the customer&#8217;s point of view</em>, software purchased as a service versus software purchased as a product.</p>
<h2>Software as a <em>Service</em>?</h2>
<p><img src="http://www.smugmug.com/photos/351371919_3Sw6P-L.jpg" alt="service" width="250" height="188" /></p>
<p>Software as a <em>service</em>, is an interesting name.  It implies that instead of purchasing the software, you are purchasing a service &#8211; and that service is the ability to use the software.  You are also (usually) purchasing a hosting and infrastructure service.  The SaaS provider will maintain the hardware, perform upgrades, backup your data (sometimes), and otherwise perform all of the &#8220;keep the lights on&#8221; services and activities required to keep the software running.</p>
<p>Imagine a typical, 1990&#8217;s style software purchase.  You buy a source code control system.  You set up a server somewhere, and install the software.  You have ongoing support costs &#8211; providing power to the server, keeping the server cool, applying security and operating system updates to the server.  You have costs associating with administering the hardware.  You also, when you get updates to the software, and when you purchase upgrades to the software, have to spend money (labor costs) to update the software.</p>
<p>You also carry the risk of a botched upgrade.  And you carry the risk of a hardware failure causing downtime, or causing you to lose data.  You also have to bear the costs of security &#8211; do you allow your people to access the software (on the server) from other computers on your network?  Do you allow them to access the software when they are not on the network (travelling, working from home, etc)?  You have to invest in designing and maintaining a secure system &#8211; to prevent your competitors from stealing &#8211; or even worse &#8211; destroying your data.</p>
<p>Now imagine that you&#8217;re outsourcing all of the &#8220;keep the lights on&#8221; activities above.  You pay an IT services firm to manage the hardware and the software for you, including the security model &#8211; and you just use it.  That&#8217;s one of the benefits of purchasing software as a service.  To really grasp the economics of SaaS you have to contrast it with the economics of software license purchases.</p>
<h2>Widespread Misunderstanding</h2>
<p>There is a widespread misunderstanding about <em>purchasing</em> software.  In the last section, we used the word &#8220;purchase&#8221; but that isn&#8217;t actually correct.  You don&#8217;t purchase a copy of the software &#8211; you purchase a <em>license</em> to use the software (with restrictions).  You probably have heard the phrase &#8220;site license&#8221;, which means that you are purchasing the right for everyone in your building (or company) to use the software.  Sometimes software is sold in terms of &#8220;numbers of seats&#8221; &#8211; the number of people that are licensed to use the software at any one time.  You could have 100 engineers, who all share ten seats (single-seat licenses) of analysis software.  Since each engineer only spends about 5% of their time using the software, they can easily share licenses.  At any given time, five engineers (on average) will need to use the software.  With a license for ten simultaneous users, each engineer is likely to be able to use the software whenever they desire.</p>
<p>The point of these examples is to point out that even when you think (or say) you are <em>purchasing</em> software, you aren&#8217;t.</p>
<p>Now that we have that behind us, the idea of purchasing <em>a service</em> is not as different from purchasing <em>a license</em>.  In neither case are you purchasing software.  In both situations, you are purchasing the right to use the software.</p>
<h2>Economics of Software Licensing</h2>
<p>There are an infinite number of creative ways to purchase a software license.  The most common situation is that you purchase a license, and then later purchase upgrades.</p>
<blockquote><p>An obvious example is Microsoft Office (productivity software).  Microsoft releases a new version of Office every couple of years.  If you own the previous version, you can purchase an upgrade for less than the cost of buying the software for the first time.  You are not <em>required</em> to purchase an upgrade, but you may want to.  If the people you work with all upgrade, you may want to upgrade too &#8211; so that you can use the documents that they create.  Microsoft does a good job of providing free utilities to read documents from the newer versions, and allowing people with newer versions to create documents that can be used by people with older versions.  Microsoft, therefore, gives you a choice.  They rely on market forces to create the pressure to upgrade, but you never <em>have to</em> upgrade.</p>
<p>Intuit, makers of Quickbooks (small business accounting software), is a little pushier.  They release a new version of the software every year.  And you can continue to use your old version.  Unless, however, you use one of the services that they also sell.  Intuit sells services that integrate with Quickbooks.  And at least with some releases, when a new version of Quickbooks comes out, they will stop supporting the integration of those services with older versions of Quickbooks.  If you need those services, you <em>must</em> upgrade.</p></blockquote>
<p>When companies sell software (licenses), they usually sell a version of the software, and then make updates to that software with some frequency, from daily to annually.  Companies also manage those updates as two distinct types of updates &#8211; major and minor.  Minor updates are usually free, and major updates usually require you to purchase an upgrade.  Minor updates might be bug fixes, or features that were intended to be in the major release, but were delayed.  Or they might just be the introduction of capabilities with &#8220;small&#8221; value to their customers.  A lot of software will automatically notify you, download the update, and install it for you.  That&#8217;s great service.  Major updates are usually more significant &#8211; they introduce capabilities that have &#8220;large&#8221; value to their customers, or are intended to make the product appealing to additional markets.</p>
<p>To understand the economics of software license purchases, you have to look at both the value over time and the costs over time of purchasing a software license.</p>
<p>To keep this simple, we&#8217;ll assume the model described above &#8211; minor updates happen frequently and are free, and major updates require the purchase of an upgrade to the latest version of the software.  We&#8217;ll also assume that every new update introduces something valuable to you as a customer.</p>
<p>Starting with the value model for the software, from the software company&#8217;s perspective:</p>
<p><img src="http://www.smugmug.com/photos/351367411_RuRnv-L.gif" alt="software potential value" width="450" height="303" /></p>
<p>The axes represent increasing value (up) versus the passage of time (to the right).  Time starts when you purchase a license to use the software.  You&#8217;re immediately getting value.  As minor updates are made (and minor releases are made &#8211; sharing the updates with customers), the value gets marginally higher.  Whenever a major release (a major update) is made, the value curve jumps up dramatically.  This represents the introduction of new, valuable capabilities.</p>
<p>As each new customer purchases a license to the latest version of the software, the company gets more revenue.  As each existing customer purchases upgrades to their existing software, the company gets more revenue.  A company makes money from finding new customers and from keeping existing customers.  Companies make more (per purchase) from finding new customers than from getting existing customers to upgrade.  Until a product builds a large base of existing customers, the company&#8217;s financial focus will be on finding new customers.  Satisfying existing customers is at risk of becoming a secondary priority, purely based on economics.  And yes, this is an incomplete picture, there are indeed other factors.  But it is absolutely an influence.</p>
<h2>Software License Benefits</h2>
<p>We started this article with a promise to look at this from a customer&#8217;s perspective.  If the model above represents how a software company views its products, here&#8217;s how a customer would view the same thing.  Remember &#8211; in our example, we have a perfect product manager &#8211; every update has the same perceived value to customers as it does to the company.  This chart shows the same value-model, but overlays your purchasing behavior as a customer.</p>
<p><img src="http://www.smugmug.com/photos/351367432_DEBEL-L.gif" alt="software license value" width="450" height="434" /></p>
<p>As a customer, you make an initial purchase (the left-most callout), and then get free incremental increases in value from each minor release.  You also purchase an upgrade to the latest version of the software as soon as it is available.  You then start getting incremental value from the minor updates to <em>that</em> version of the software.   The older version does not keep getting updates, so if you don&#8217;t purchase the upgrade, you don&#8217;t get the benefits of the latest minor releases.  A second major release happens, but you don&#8217;t purchase it for a short while.  Then a minor release is made, with a fix to an annoying bug that really bothers <em>you</em>.  So you purchase another upgrade.</p>
<p>The value <em>to you</em> looks like the following:</p>
<p><img src="http://www.smugmug.com/photos/351367437_PAVoM-L.gif" alt="value of license purchases over time" width="450" height="438" /></p>
<p>The green area represents the value you get*.  Notice that you did not get the value of the last major release until you actually purchased it.  You also did not get the incremental value of minor releases that happened after that release.  Once you did purchase the upgrade, you immediately got the benefits of all the minor releases.  You got &#8220;back in the game.&#8221;</p>
<p>*The value is often a function of how much you use the software (enabling the benefit), and as such, it is a function of time.  The more you use it, the more value you get.  So showing this as an area is informative.</p>
<h2>Software License Costs</h2>
<p>Your costs over time are also important.</p>
<p><img src="http://www.smugmug.com/photos/351367440_P8Eui-L.gif" alt="cost of license purchase" width="450" height="214" /></p>
<p>The obvious costs are the checks you write to the software company to pay for the software and for the major upgrades.  The chart above can be a little misleading &#8211; we are depicting &#8220;one time costs&#8221; that add up over time.  Showing this as a stair-step area instead of a series of spikes will make sense in a moment.  The key thing to appreciate is that once you make a purchase, your license purchasing costs do not go up again until you make another purchase.</p>
<p>At the start of the article, we identified several &#8220;cost of ownership&#8221; costs &#8211; supporting the software and hardware, for example.  It is critical that you keep those costs in mind when evaluating software license purchases.  These costs are ongoing costs &#8211; the more you use the software, the more the costs add up.</p>
<p>There are also <em>training costs</em> &#8211; the cost of lost productivity as people learn to use the software and adapt to changes in the software.</p>
<p><img src="http://www.smugmug.com/photos/351367453_X3vyC-L.gif" alt="ongoing software licensing costs" width="450" height="214" /></p>
<p>When you combine these, you get a model for the total cost of purchasing a software license over time.  The jargon term for this is Total Cost of Ownership (TCO).</p>
<p><img src="http://www.smugmug.com/photos/351367456_5Gvmg-L.gif" alt="tco for license purchases" width="450" height="214" /></p>
<p>As you can see, &#8220;purchasing&#8221; software one time actually has a continuously increasing total cost of ownership.  Different types of software will have different relative costs for infrastructure support, training expense, and license fees.  But generally, training expenses are much lower than the other costs of ownership.</p>
<h2>SaaS &#8211; A Simple Definition</h2>
<p>Software as a service is usually provided as follows:</p>
<ol>
<li>A company creates a software product and hosts that product on multiple servers.  The company manages the hardware and software &#8211; and realizes the cost of that management.</li>
<li>Customers <em>subscribe</em> to the service &#8211; getting the right to use the software, for as long as they continue to pay the recurring subscription fees.</li>
<li>The company makes both major and minor updates to the software, and the customers <em>automatically</em> get those updates as part of their subscription.</li>
</ol>
<p>There are many examples, some obvious ones are <a title="sfdc" href="http://www.salesforce.com/">Salesforce.com</a>, Kadient&#8217;s <a title="inciteKnowledge" href="http://www.kadient.com/tabid/264/Default.aspx">inciteKnowledge</a>, and 37signals&#8217; <a title="basecamp" href="http://www.basecamphq.com/">Basecamp</a>.</p>
<h2>SaaS Economics</h2>
<p>Software as a service is purchased with the same mechanics as subscribing to a magazine or cable television or satelite radio.  You pay a recurring fee for the right to use the software, just as you pay a recurring fee for the right to watch cable television.  You might even get a discount for purchasing a longer-term subscription and paying up front.  When you want to stop using the service, you stop paying the fee.</p>
<p>The model for creating value with SaaS products is the same as with licensed software.</p>
<p><img src="http://www.smugmug.com/photos/351367411_RuRnv-L.gif" alt="saas value model" width="450" height="303" /></p>
<p>The graph looks the same as the first one in this article, because it is the same graph.  Where things change <em>slightly</em> is in the value model from the perspective of the customer.</p>
<p><img src="http://www.smugmug.com/photos/351367462_SwtD7-L.gif" alt="saas value realization" width="450" height="438" /></p>
<p>There is a single trigger to the realization of value &#8211; starting the subscription.  You automatically get the minor and major updates &#8220;for free&#8221; by continuing to pay the subscription fee.</p>
<h2>SaaS Costs Are Different</h2>
<p>Where software as a service differs from the purchase of a license to use software is on the cost side.</p>
<p><img src="http://www.smugmug.com/photos/351367468_w72VA-L.gif" alt="saas cost model" width="450" height="214" /></p>
<p>The training costs associated with using software have nothing to do with the mechanism for payment, so those costs are the same.  The cost of subscribing to the service (blue cross-hatched region) is new, and goes up over time.  It is also typically higher than the training costs.  Note that there are no &#8220;large purchase&#8221; spikes in the costs &#8211; because you never purchase a license.  And there are no infrastructure costs, because the company that provides the service realizes those costs.</p>
<p>The idea is that this approach is more cost-effective when it comes to infrastructure costs, so the company can pass on those savings to you.</p>
<p>Comparing the two cost models side by side is the way to really see the difference:</p>
<p><img src="http://www.smugmug.com/photos/351367471_vmdcq-L.gif" alt="comparing saas and licensing costs" width="450" height="435" /></p>
<p>Both models have costs that increase over time.  For many technical reasons, the SaaS architecture is more efficient and has lower costs for the software company &#8211; which tends to result in lower costs for the customers.  This is not always the end result, but it is directionally correct.</p>
<p>Another interesting factor to consider is the financial pressure on the SaaS provider.  Where a software licensing model creates pressure to prioritize finding new customers, a SaaS model creates pressure to keep existing customers.  SaaS providers get the same revenue from a new customer as from an existing customer, instead of the &#8220;new vs. upgrade&#8221; dynamic seen with software licensing models.  It is always cheaper to keep an existing customer than to find a new one.  The net result &#8211; financial pressure to retain existing customers.  This can drive a different behavior, more like that of a retail sales model, where <a title="the non-customer is always right" href="http://tynerblain.com/blog/2008/07/15/the-non-customer-is-always-right/">keeping your existing customers is critical</a>.</p>
<h2>Conclusion</h2>
<p>The SaaS model ultimately provides the same type of products as a software licensing model.  But with a better economic model &#8211; one that is lower in cost to me, and one that is structurally inclined to keep getting better <em>for me</em> with every new release.</p>
<p>Personally, I really like the idea of purchasing from a company that is financially motivated to keep me happy, not one who&#8217;s pressured to find another customer as soon as I&#8217;ve written my check.</p>
<p>The best companies try to reinvent themselves and improve their products continuously.  Over time, the best companies will move to SaaS models, which align their financials with their objectives.</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  Series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+SaaS+Economics+%28Software+as+a+Service%29+http://bit.ly/2NFi7L+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/08/13/foundation-series-saas-economics/&amp;t=Foundation+Series%3A+SaaS+Economics+%28Software+as+a+Service%29" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/08/13/foundation-series-saas-economics/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Foundation Series: The Difference Between Correlation and Causality</title>
		<link>http://tynerblain.com/blog/2007/10/16/correlation-and-causality/</link>
		<comments>http://tynerblain.com/blog/2007/10/16/correlation-and-causality/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 02:04:28 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[causal]]></category>
		<category><![CDATA[causality]]></category>
		<category><![CDATA[correlated]]></category>
		<category><![CDATA[correlation]]></category>
		<category><![CDATA[correlation and causality]]></category>
		<category><![CDATA[dependent variable]]></category>
		<category><![CDATA[independent variable]]></category>
		<category><![CDATA[managing data]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/10/16/correlation-and-causality/</guid>
		<description><![CDATA[
One of the most common mistakes people make when looking at data is to jump to conclusions about the data.  We all live in a world of cause and effect.  It is only natural that when we see data that appears to show cause and effect, we assume that it does.  But [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="classroom setting" title="classroom setting" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /><br />
One of the most common mistakes people make when looking at data is to jump to conclusions about the data.  We all live in a world of cause and effect.  It is only natural that when we see data that appears to show cause and effect, we assume that it does.  But it often doesn&#8217;t.  This article shows the difference between cause and effect relationships and correlated data.</p>
<p><span id="more-583"></span></p>
<h2>A Simple Experiment</h2>
<p><img alt="potted grass" title="potted grass" src="http://sehlhorst.smugmug.com/photos/209223967-M.jpg" /></p>
<p>Studies have shown that the temperature of soil has an effect on the germination rates of seeds.  But does soil temperature affect the rate of growth of plants?  You decide to find out, and you pot a bunch of grass in individual containers, stick thermometers in each pot, and measure the grass height and temperature every day.  You spread the pots out in your back yard in areas that get different amounts of sunlight.  The pots that get the most light are hottest, the ones that get the least light are the coolest.  All plants get the same amount of water.  Assume all of your data from measurement is accurate.<br />
Imagine that you had data that showed the following combinations of soil temperature and plant growth.</p>
<ul>
<li>Soil temperature: 70 F.  Grass growth: 1 inch</li>
<li>Soil temperature: 72 F.  Grass growth: 2 inches</li>
<li>Soil temperature: 74 F.  Grass growth: 3 inches</li>
<li>Soil temperature: 76 F.  Grass growth: 4 inches</li>
<li>Soil temperature: 78 F.  Grass growth: 5 inches</li>
<li>Soil temperature: 80 F.  Grass growth: 6 inches</li>
</ul>
<p>Can you conclude that warmer soil temperatures between 70 and 80 degrees cause grass to grow more?</p>
<p>That is the common mistake that many people make when looking at data.</p>
<p>You could just as easily conclude that faster growing grass causes warmer soil temperatures, and you would be just as correct.  Or rather, incorrect.</p>
<h2>Correlation</h2>
<p>Correlation between two sets of data means that they have related trends.  The data in our example above are correlated.  Rising temperatures <em>coincide with</em> increasing growth rates.  Increasing growth rates <em>coincide with</em> warmer soil temperatures.</p>
<p>When you can not say that one factor <em>caused</em> the other, you have a correlation.</p>
<p>Consider another experiment &#8211; you plant the same grass in the same pots.  This time, you install heaters under each pot, and you control the temperature of all of the pots.  You create pots with each of the different temperatures you observed in the previous experiment.  Then you put them all of the pots in a dark closet with no light.</p>
<p>None of the grass grows.</p>
<h2>Causation</h2>
<p>The grass didn&#8217;t grow in the closet because the warmth isn&#8217;t what <em>caused</em> the grass to grow.</p>
<p>In the first experiment, the pots were placed in areas of the yard that got varying amounts of sunlight.  The sunlight caused the grass to grow <em>and it caused</em> the soil to get warmer.  If you had measured the amount of sunlight, as well as the soil temperature and the grass growth you would have seen three values that were <em>correlated</em>.</p>
<p>To confirm that sunlight was the <em>causal,</em> or <em>independent</em> variable, you can inspect the pots that were warmed in the dark.  You could also run an experiment that combined the variation in sunlight with constant soil temperatures &#8211; isolating the sunlight variable.  You might even have to do that experiment to rule out the possibility that fresh air contributes to grass growth (because fresh air is present in the outside experiment, but not when the pots are put in the closet).</p>
<h2>Jumping to Conclusions</h2>
<p>One of the goals in writing software requirements is to <a title="measurable requirements" href="http://tynerblain.com/blog/2006/06/13/writing-verifiable-requirements/">make them measurable</a>.  Some requirements are easily measurable &#8211; the query returns results in 10 seconds, for example.  You write a query, test it, and look at the results.  If the code is too slow, you rewrite and test again, until you meet the requirement as defined.</p>
<p>Other requirements, while easily measurable, may be hard to control.  Consider <a title="usability and product management" href="http://tynerblain.com/blog/2007/03/05/product-management-and-ux/">a usability requirement</a> like &#8220;A novice user will be able to complete the task in 2 minutes.&#8221;  This is easily measurable &#8211; but if you run the test, and the novice user takes 3 minutes &#8211; what do you change to reduce the amount of time?  Do you add interactive help?  This would certainly make it easier for the user once she becomes competent &#8211; but she will have to spend time reading the instructions when she is still a novice.</p>
<p>[As an aside - <a title="measuring the roi of design" href="http://tynerblain.com/blog/2007/07/30/measuring-the-roi-of-design/">measuring the impact of usability investments is very hard</a> - and one of the reasons is the challenge of separating causality and correlation.]<br />
We run the risk of jumping to conclusions when defining these metrics.  Image that you are doing an analysis of a shopping cart, as part of designing a new one.  You find that 80% of the users who add an item to the shopping cart (from a product page) never purchase the product.  You also find that there are 8 steps required to complete a purchase, starting with adding the item to the cart (and then viewing the cart, confirming your order, etc&#8230;).  You may notice that almost all of these users stay on the site until the 7th step &#8211; where only a few ultimately purchase.</p>
<p>You could write a requirement that says that purchasing a product requires no more than 6 steps.  If you did, you would be jumping to the conclusion that the number of steps <em>causes</em> the users to abandon the purchase.  You would also be <a title="specifying design in requirements is bad" href="http://tynerblain.com/blog/2006/06/02/writing-design-free-requirements/">specifying design (which is bad)</a>.  It may be that step 7 requires them to enter their social security number &#8211; and that this is the deal-breaker.  If your developers implement a solution that only has 4 steps, but keep the social security number requirement, do you expect to get a massive improvement in your funnel?</p>
<p>Writing <em>good</em> measurable requirements is hard, not because measuring is hard (although sometimes it is), but because <a title="correlation and causality" href="http://tynerblain.com/blog/2006/02/07/outside-reading-correlation-and-causality/">correlation is often mistaken for causality</a> &#8211; and we therefore choose bad things to measure.  Choosing what to measure is the hard part.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+The+Difference+Between+Correlation+and+Causality+http://bit.ly/ePXai+" 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/10/16/correlation-and-causality/&amp;t=Foundation+Series%3A+The+Difference+Between+Correlation+and+Causality" 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/10/16/correlation-and-causality/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Intro To Utility Curves</title>
		<link>http://tynerblain.com/blog/2007/02/06/foundation-series-intro-to-utility-curves/</link>
		<comments>http://tynerblain.com/blog/2007/02/06/foundation-series-intro-to-utility-curves/#comments</comments>
		<pubDate>Wed, 07 Feb 2007 04:00:27 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[indifference curve]]></category>
		<category><![CDATA[indifference curve analysis]]></category>
		<category><![CDATA[indifference curve upward]]></category>
		<category><![CDATA[indifference curves]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[prioritization of requirements]]></category>
		<category><![CDATA[requirements prioritization]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[utility curves]]></category>
		<category><![CDATA[why indifference curves never intersect]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/02/06/foundation-series-intro-to-utility-curves/</guid>
		<description><![CDATA[Utility is an abstract concept usually relegated to economics. What is it? How does it work?]]></description>
			<content:encoded><![CDATA[<p><img title="economics class" alt="economics class" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<p>Utility is an abstract concept usually relegated to economics.  What is it?  How does it work?</p>
<p><strong>Definition of Utility</strong></p>
<p>The economic definition of utility is</p>
<blockquote><p>An economic term referring to the total satisfaction received from consuming a good or service</p>
<p><cite><a title="free dictionary" href="http://financial-dictionary.thefreedictionary.com/Utility+(economics)">The Free Dictionary</a></cite></p></blockquote>
<p>That doesn&#8217;t helps us very much &#8211; but visuals make this concept strikingly clear.</p>
<p>Consider money.  Everyone likes money.  People derive satisfaction, or <em>utility</em> from money.  The more money they have, the more satisfaction they get from it.</p>
<p><img title="utility of money" alt="utility of money" src="http://sehlhorst.smugmug.com/photos/127589841-M.png" /></p>
<p>Note that the law of diminishing returns is a factor here.  As someone acquires more money, the same size of increase in money does not result in the same size increase in utility.  $10,000 would provide a lot of satisfaction to someone working at minimum wage.  It would provide much less (but not zero) satisfaction to a billionaire.  That&#8217;s the law of diminishing returns.</p>
<p>Looking at another concept &#8211; leisure time.  When someone increases their leisure time, it increases their satisfaction.</p>
<p><img title="utility of leisure time" alt="utility of leisure time" src="http://sehlhorst.smugmug.com/photos/128157944-M.png" /></p>
<p>Again, we have the law of diminishing returns.  An extra hour of leisure time in a week is very valuable to a single parent working two jobs and raising three kids.  That same hour is less valuable if the person has no responsibilities or time commitments.</p>
<p><strong>Tradeoffs</strong></p>
<p>While both graphs make sense, what they can&#8217;t tell us is if someone would rather have more leisure time, or more money.  When we present this as a tradeoff, we need a way to describe how people make those tradeoffs.</p>
<p>Our intuition is that people with a lot of free time would rather have more money, and people with a lot of money would rather have more free time.  That&#8217;s good intuition.  When we graph leisure time versus money, we have a utility curve.</p>
<p><img title="utility curve of time vs money" alt="utility curve of time vs money" src="http://sehlhorst.smugmug.com/photos/128157948-M.png" /></p>
<p>Economists also refer to this as an <em>indifference curve</em>.  For someone who is on any point on the curve, they are <em>indifferent</em> to being on any other point on the same curve.  When a person has very little money, they will trade a lot of leisure time for more money.  When they have a lot of money, they will trade a lot of it for a small increase in leisure time.</p>
<p>This is one of the reasons our economy works.  People with a lot of time sell something cheap (their time) to people with a lot of money, who will pay dearly for something that is expensive to them (their time).</p>
<p>Not everyone has the same <em>shape</em> of utility curve.</p>
<p><img alt="utility curve shapes" title="utility curve shapes" src="http://sehlhorst.smugmug.com/photos/128157942-M.png" /></p>
<p>Some people inherently like money more than time, or vice versa.  Or a person&#8217;s situation is such that they temporarily shift their values.  Each individual has a unique curve at a unique point in time.  And for that person, all points on the curve provide equivalent satisfaction.</p>
<p><strong>Improvements</strong></p>
<p>OK, understanding tradeoffs is nice, but what we want to understand more is how to improve the human condition.  Products are not very compelling when people are indifferent about buying them.  How do we make people want to buy our products?</p>
<p>People want to increase their utility.  If someone is indifferent to trading an hour for a dollar, they would be excited to trade half an hour for a dollar.  Conversely, they are uninterested in trading two hours for a dollar.  Graphically, in addition to being <em>indifferent</em> to all points on their curve, they are excited about all points above their curve, and uninterested in moving to a point below their curve.</p>
<p><img alt="increasing utility" title="increasing utility" src="http://sehlhorst.smugmug.com/photos/128157940-M.png" /></p>
<p>Rational people (and economists make a point of excluding <em>irrational</em> people from most of their work) will at least be content, and usually prefer to increase their utility.</p>
<p><strong>Why Indifference Curves Never Intersect</strong></p>
<p>You&#8217;ll notice that the two curves in the figure above are never cross each other.  Indifference curves never intersect, because by definition, all points on the same curve represent equivalent satisfaction.  If two curves were to overlap, then that would create a graph (for a single individual) that looked like the previous graph (with red and green curves).</p>
<p>Pick a single point on the &#8220;Money&#8221; axis.  There are two intersections along the &#8220;leisure Time&#8221; axis &#8211; one each for the red and green curves.  The red data point must have the same utility as the place where the curves cross.  The green data point will also have the same utility as the place where the indifference curves intersect.  This would require both the red and green data points (with different values for &#8220;leisure Time&#8221; and identical values for &#8220;Money&#8221; would represent the same amount of utility.</p>
<p>That would violate the premise that &#8220;more leisure time is always better, when all else is equal.&#8221;  This also hilights a limitation of using utility curves &#8211; they only apply to <a title="Monotonic Functions" href="http://en.wikipedia.org/wiki/Monotonic_function">monotonically increasing functions</a>.  Only when &#8220;a little bit more&#8221; is <u>always better</u>, can a utility curve be drawn.<br />
<strong>Practical Application</strong></p>
<p>This is fine, if theoretical.  How do we use this as part of developing great software?</p>
<p>Now that we understand how people treat tradeoffs, we can look at prioritization of requirements.  The key is to recognize that there are tradeoffs.  As creators of software, we are faced with internal tradeoffs.  We can only accomplish so much.  We can only release a certain number of features in a given timebox.  And we make those tradeoffs based on ROI, or our perception of the balance between costs and return.</p>
<p>Sometimes return is measured in purely financial terms.  Sometimes, that return is measured in utility.  Consider the decision process around a set of usability requirements.  Should we make the application easier to learn, or faster to use?</p>
<p>A utility curve helps us visualize this tradeoff.</p>
<p><img title="speed of learning vs ease of use" alt="speed of learning vs ease of use" src="http://sehlhorst.smugmug.com/photos/127589836-M.png" /></p>
<p>The answer is some of both.  But we have to balance the need to get past the <a title="Getting Past the Suck Threshold" href="http://tynerblain.com/blog/2005/12/14/getting-past-the-%E2%80%99suck-threshold%E2%80%99/">suck-threshold</a> with creating <a title="Usability Sells software" href="http://tynerblain.com/blog/2007/01/10/usability-sells-software/">word-of-mouth marketing</a> and driving user adoption by designing for the <a title="Designing for Competent Users" href="http://tynerblain.com/blog/2006/04/02/competent-users-and-software-design/">competent user</a>.  Understanding that each user has their personal set of tradeoffs helps us make these decisions.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Intro+To+Utility+Curves+http://bit.ly/dB3xx+" 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/02/06/foundation-series-intro-to-utility-curves/&amp;t=Foundation+Series%3A+Intro+To+Utility+Curves" 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/02/06/foundation-series-intro-to-utility-curves/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Inbound and Outbound Product Management</title>
		<link>http://tynerblain.com/blog/2007/01/18/foundation-series-inbound-pm-and-outbound-pm/</link>
		<comments>http://tynerblain.com/blog/2007/01/18/foundation-series-inbound-pm-and-outbound-pm/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 03:57:23 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[brand product management]]></category>
		<category><![CDATA[inbound]]></category>
		<category><![CDATA[inbound pm]]></category>
		<category><![CDATA[inbound product management]]></category>
		<category><![CDATA[inbound product manager]]></category>
		<category><![CDATA[inbound role definition]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[new product management]]></category>
		<category><![CDATA[outbound]]></category>
		<category><![CDATA[outbound pm]]></category>
		<category><![CDATA[outbound product management]]></category>
		<category><![CDATA[outbound product manager]]></category>
		<category><![CDATA[outbound role definition]]></category>
		<category><![CDATA[pm role definition]]></category>
		<category><![CDATA[product manager role definition]]></category>
		<category><![CDATA[product marketing management]]></category>
		<category><![CDATA[role definition]]></category>
		<category><![CDATA[software product manager]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2007/01/18/foundation-series-inbound-pm-and-outbound-pm/</guid>
		<description><![CDATA[Inbound product manager or outbound product manager - what's the difference?  We'll look at the overall role, and the breakdown of responsibilities.  We also follow-up with some suggested detailed reading.]]></description>
			<content:encoded><![CDATA[<p><img title="Product Management Class" alt="Product Management Class" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<p>Inbound product manager or outbound product manager &#8211; what is the difference?  We&#8217;ll look at the overall role, and the breakdown of responsibilities.</p>
<p><strong>Product Manager Role Definition</strong></p>
<p>More often than not, people talk about product managers without the qualifier of inbound or outbound.  We wrote an article last spring where we discussed the <a title="PM role definition" href="http://tynerblain.com/blog/2006/04/09/product-manager-role-definition/">role of the product manager</a>.   Michael Shrivathsan defined the role of product management as being split into six areas:</p>
<ol>
<li>Market Research</li>
<li>Product Definition and Design</li>
<li>Project Management</li>
<li>Evangelize the Product</li>
<li>Product Marketing</li>
<li>Product Life Cycle Management</li>
</ol>
<p>For more details on those six areas, check out our <a title="defining the product manager" href="http://tynerblain.com/blog/2006/04/09/product-manager-role-definition/">earlier article</a>, as well as <a title="Product Management and Product Marketing" href="http://feeds.feedburner.com/MichaelHighTechPM?m=12">Michael&#8217;s</a> article.</p>
<p><strong>Everywhere At Once</strong></p>
<p>The product manager is responsible for interacting with customers, marketing, and sales teams.  This communication helps the product manager develop an understanding of the market.  The product manager also researches the market &#8211; understanding competitors and existing products.   From the understanding he gains, the product manager can identify needs and opportunities.</p>
<p>The product manager then works to turn this understanding of market needs into a set of requirements that drive the creation of a product.</p>
<p>Product managers shepherd the product through its life cycle.  Product managers identify how the product will evolve and adapt to changing market needs.  The product manager may drive the evolution of the product to compete in additional markets.</p>
<p>Product managers also help prepare the company to successfully sell the product.  They define strategies for attacking the target market.  They help the sales team understand what the product does, and how to position it against competitors.  And they support the sales team in the field.</p>
<p>How do we split this up into inbound and outbound?</p>
<p><strong>Inbound Product Management</strong></p>
<p>The <em>inbound</em> part of of the job focuses on understanding what the product needs to be.<br />
Inbound activities include</p>
<ul>
<li>Understanding the market needs and our capability to meet them.</li>
<li>Defining a product strategy to meet those needs.</li>
<li>Planning the creation of the product, including documenting requirements.</li>
</ul>
<p><strong>Outbound Product Management</strong></p>
<p>The <em>outbound </em>part of the job focuses on making sure that the product is a success in the market.<br />
Outbound activities include</p>
<ul>
<li>Defining a go-to-market strategy.</li>
<li>Preparing the sales team with an understanding of the product and market.</li>
<li>Supporting the sales team in execution with a focus on multi-customer activities.</li>
</ul>
<p><strong>Soundbite</strong></p>
<p>Inbound product management is more about listening, and outbound product management is more about talking.</p>
<p>- &#8211; -Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/foundation-series-index/"><em>Foundation Series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Inbound+and+Outbound+Product+Management+http://bit.ly/3Aw5B7+" 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/18/foundation-series-inbound-pm-and-outbound-pm/&amp;t=Foundation+Series%3A+Inbound+and+Outbound+Product+Management" 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/18/foundation-series-inbound-pm-and-outbound-pm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foundation Series: JAD Sessions</title>
		<link>http://tynerblain.com/blog/2006/12/01/foundation-series-jad-session/</link>
		<comments>http://tynerblain.com/blog/2006/12/01/foundation-series-jad-session/#comments</comments>
		<pubDate>Sat, 02 Dec 2006 04:00:24 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[brainstorming]]></category>
		<category><![CDATA[gathering requirements]]></category>
		<category><![CDATA[jad]]></category>
		<category><![CDATA[jad session]]></category>
		<category><![CDATA[jad sessions]]></category>
		<category><![CDATA[jad workshop]]></category>
		<category><![CDATA[joint application development]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[requirements elicitation]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/12/01/foundation-series-jad-session/</guid>
		<description><![CDATA[JAD is an acronym that stands for Joint Application Design. JAD sessions are collaborative meetings where the customers meet with developers to determine what the product needs to be or do.]]></description>
			<content:encoded><![CDATA[<p><img title="jad session" alt="jad session" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<p>JAD is an acronym that stands for Joint Application Design.  JAD sessions are collaborative meetings where the customers meet with developers to determine what the product needs to be or do.</p>
<p><strong>JAD Beginnings</strong></p>
<p>Chuck Morris and Tony Crawford of IBM created the idea of JAD sessions in the 1970s (<a title="scholarly article" href="http://www.umsl.edu/~sauter/analysis/JAD.html">Yatco</a>).  JAD sessions were designed to gather good requirements and specifications. JAD sessions are often referred to as JAD <em>workshops</em>.  JAD has been used as a name to describe <a title="Brainstorming guide" href="http://tynerblain.com/blog/2006/01/17/brainstorming-making-something-out-of-everything/">brainstorming</a> sessions, formal requirements gathering sessions, and even interface design meetings.</p>
<blockquote><p>Today, JAD is commonly used for strategic business planning, strategic IS plans, IS architecture definition, re-engineering business processes, detailed system design, process and data modeling, and project management.This might be the broadest application of JAD so far.</p>
<p><cite><a title="analysis" href="http://www.umsl.edu/~sauter/analysis/JAD.html">Mei C Yatco</a></cite></p></blockquote>
<p>Although different people use &#8220;JAD&#8221; in different ways to solve different problems, there is a common theme &#8211; JAD sessions are facilitated requirements gathering sessions.</p>
<p><strong>JAD Benefit</strong></p>
<p>JAD sessions are believed to reduce the time required to gather requirements and develop software.  At the time of their creation, JAD sessions were certainly more cost effective than existing &#8220;build, feedback, fix&#8221; cycles.  It isn&#8217;t clear if JAD sessions themselves are more effective than other requirements elicitation techniques.  JAD sessions are probably best used as one of <a title="10 Elicitation techniques" href="http://tynerblain.com/blog/2006/11/21/ten-requirements-gathering-techniques/">many tools for gathering requirements</a>.</p>
<p><strong>JAD Session Structure</strong></p>
<p>A JAD session has a facilitator, a scribe, participants and observers.</p>
<ul>
<li>The Facilitator &#8211; Guides the participants through the process of gathering requirements.</li>
<li>The Scribe &#8211; Diagrams models, takes notes, records information.</li>
<li>Participants &#8211; Business users and subject matter experts (SMEs) who contribute the content in the session.</li>
<li>Observers &#8211; Developers who observe the process.</li>
</ul>
<p>There are 9 steps to a JAD session (<a title="wiki on jad" href="http://en.wikipedia.org/wiki/Joint_application_design">wikipedia</a>):</p>
<ol>
<li>Identify project objectives and limitations</li>
<li>Identify critical success factors</li>
<li>Define project deliverables</li>
<li>Define the schedule of workshop activities</li>
<li>Select the participants</li>
<li>Prepare the workshop material</li>
<li>Organize workshop activities and exercises</li>
<li>Prepare, inform, educate the workshop participants</li>
<li>Coordinate workshop logistics</li>
</ol>
<p><strong>More Reading</strong></p>
<p>A top rated JAD book at Amazon is <a title="JAD at amazon" href="http://www.amazon.com/exec/obidos/ASIN/0471042994/tynerblain-20"><em>Joint Application Development</em></a> by Jane Wood and Denise Silver.</p>
<p>[Update 2007/02/08.  I have really been enjoying the book that Kevin reccommended in the comments below &#8211; <a title="JAD Sessions book at Amazon" href="http://www.amazon.com/exec/obidos/ASIN/0201786060/tynerblain-20"><em>Requirements by Collaboration: Workshops for Defining Needs</em></a> by Ellen Gottesdiener.  Thanks Kevin for the great tip!</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+JAD+Sessions+http://bit.ly/471yyq+" 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/12/01/foundation-series-jad-session/&amp;t=Foundation+Series%3A+JAD+Sessions" 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/12/01/foundation-series-jad-session/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Data Dictionary Definition</title>
		<link>http://tynerblain.com/blog/2006/07/13/foundation-series-data-dictionary-definition/</link>
		<comments>http://tynerblain.com/blog/2006/07/13/foundation-series-data-dictionary-definition/#comments</comments>
		<pubDate>Fri, 14 Jul 2006 03:55:44 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Business Analysis]]></category>
		<category><![CDATA[data dictionary]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[managing requirements]]></category>
		<category><![CDATA[object oriented analysis]]></category>
		<category><![CDATA[ooa]]></category>
		<category><![CDATA[UML Modeling]]></category>

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

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/26/foundation-series-how-to-read-a-formal-use-case/</guid>
		<description><![CDATA[Use cases represent the activities that people do when interacting with a system to achieve their goals.  Use cases are a very effective tool for communicating and documenting what a system is intended to accomplish.  Formal use cases are use cases that use a specific structure to represent the information.  Knowing how to read a formal use case is important.]]></description>
			<content:encoded><![CDATA[<p><img title="Use case classroom" alt="Use case classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<p>Use cases represent the activities that people do when interacting with a system to achieve their goals.  Use cases are a very effective tool for communicating and documenting what a system is intended to accomplish.  Formal use cases are use cases with a specific structure to represent the information.  Knowing how to read a formal use case is important.</p>
<p><strong>Formal Use Case</strong></p>
<p>We wrote previously about <a title="Formal Use Cases" href="http://tynerblain.com/blog/2005/12/20/use-case-series-formal-use-case/">formal use cases</a>, covering the pros and cons with a brief overview, as part of our <a title="Introduction to the Use Case Series" href="http://tynerblain.com/blog/2005/12/18/use-case-series-introduction/">use case series</a>.  In this article, we focus on the elements of a formal use case, and how to interpret them.</p>
<p>When using a <a title="Foundation Series on Structured Requirements" href="http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/">structured requirements</a> approach to creating software, use cases represent the activities of classes of users, as they relate to the software being developed.  Each goal, or market requirement, will have one or more use cases that support it.  The easy way to think about it is that for a company to achieve a goal, someone has to do something (Make the Sale, Answer the Support Call, Update Account Information, etc).  The use cases capture those <em>somethings</em>.<br />
Here are the elements of a formal use case, with explanations:</p>
<p><strong>Meta data</strong></p>
<p>This is the information that identifies when the use case was first written and by whom.  It may also include revision information, who made the changes, what was changed, and when and why it was changed.  Revision history is a common <em>meta data</em> element in most business documents &#8211; we just normally don&#8217;t call it &#8220;meta data.&#8221;  That&#8217;s an example of software <a title="Very Funny Jargon Video" href="http://tynerblain.com/blog/2006/02/15/jargon-gone-amuck/"><em>jargon</em></a>.</p>
<p><strong>Title</strong></p>
<p>The title of a use case is more than just a heading like &#8220;My Summer Vacation.&#8221;  The title is intended to provide enough information to identify what the use case represents without reading the use case.  This can be useful when getting an overview of a planned project, validating requirements, or when scanning use cases as part of reviewing materials.  The title should provide enough information for someone conversant in the domain, while being short.  The ideal length is between 4 and 8 words and is a sentance fragment.  Anything longer than a sentance is a horrible title.  The format is <em>subject verb object</em>.  Someone does something to or with something else.<br />
Some examples:</p>
<ul>
<li>Pilot performs pre-flight safety check.</li>
<li>Author adjusts plot element timelines.</li>
<li>Accountant reconciles accounts-receivable ledger.</li>
</ul>
<p><strong>Description</strong></p>
<p>A brief description of the activity represented in the use case.  One to five sentances &#8211; no more than a single paragraph &#8211; describing the activity or process represented by the use case.  The description does not include the full details, but does provide the &#8220;next level of insight&#8221; into understanding what the use case covers.  Someone who is <em>not</em> experienced in the domain can get a base understanding of the contents of the use case from reading a description.<br />
Some examples:</p>
<ul>
<li>A pilot peforms an FAA mandated list of equipment and operational inspections prior to every flight.  All inspections must pass before the flight is allowed to take off per corporate policy.</li>
<li>An author will review the timelines, or sequences of events for each plot and subplot within their novel.  The author is assuring that the sequence of intended events is internally consistent, and achieves the desired pacing effects for the book.  Any needed changes to the timeline are made.</li>
<li>Accountants regularly validate that the entries in the accounts-receivable ledger are consistent with the recent sales and current payments.  This validation is required for all GAAP public reporting on a quarterly basis, and may be required more frequently for internal management accounting purposes.</li>
</ul>
<p><strong>Primary Actor</strong></p>
<p>The primary actor is the person who is the <em>subject</em> of the use case, performing the <em>verb</em> of the use case on the <em>object</em>.  A use case may have multiple actors but has one most important person.  The term <em>actor</em> represents the person who takes action &#8211; not someone playing a role.  Other actors may be involved, either as participants, or as infrequent or secondary performers of the use case.<br />
Some examples:</p>
<ul>
<li>Primary Actor: Pilot.  Secondary Actors:Flight Crew, Sr. Maintenance Technician</li>
<li>Primary Actor: Author.</li>
<li>Primary Actor: Financial Accountant.  Secondary Actor: Financial Accounting Manager</li>
</ul>
<p><strong>Triggers</strong></p>
<p>A trigger is the outside event that <em>triggers</em> the beginning of a use case.  This is an event that initiates a use case.  Many use cases do not have an obvious trigger &#8211; and the trigger will be documented as &#8220;User decides to do X.&#8221;  This <em>invisible</em> decision represents the trigger.</p>
<p>Some examples:</p>
<ul>
<li>Pilot receives flight plan.</li>
<li>Author initiates review of the novel.</li>
<li>It is the first day of the last month of the quarter.</li>
</ul>
<p><strong>Preconditions</strong></p>
<p>Preconditions are the set of things that <em>must be true</em> for the use case to occur.  These represent a contract of sorts &#8211; the use case will not happen unless all of the preconditions are met.  If a situation is optional, it is not a precondition.</p>
<p>Some examples:</p>
<ul>
<li>Flight plan has been approved.</li>
<li>None.  (In our example, the author can review timelines before during or after completing a draft of the novel.)</li>
<li>Accounts receivable entries have been made in the ledger.</li>
</ul>
<p><strong>Post-conditions</strong></p>
<p>Post-conditions represent the other side of the contract.  If the normal course (see below) of the use case has been completed, then these things must be true.</p>
<p>Some examples:</p>
<ul>
<li>The plane has been confirmed to be safe and ready for the approved flight plan.</li>
<li>The timeline is updated to reflect the author&#8217;s desired result.</li>
<li>All accounting entries have been reconciled or identified as being incorrect.</li>
</ul>
<p><strong>Normal Course</strong></p>
<p>The preferred, desired, or most common sequence of events that represent the use case.  This sequence of events must be followable in the solution.  If no alternate courses are defined, then this sequence of events must be followed (with no alternatives) in the solution.  The normal course is documented as a series of <em>single actor, single action</em> sentences, each with a number.</p>
<p>An example:</p>
<ol>
<li>Accountant accesses current quarter accounts-receivable ledger information.</li>
<li>Each of the following steps is repeated for every entry in the ledger.</li>
<li>Accountant confirms transaction record matches appropriate other ledger (sales, billing, etc).</li>
<li>Accountant updates ledger to indicate that the entry was confirmed.</li>
</ol>
<p><strong>Alternate Courses</strong></p>
<p>Alternate course are supported alternatives to the normal course.  Each variation is identified as an alternative, and each step that varies from the normal course will be explicitly defined within the alternative course.  Each variant step is identified with a number, and all unidentified steps are explicitly defined to be the same as they are in the normal course.</p>
<p>An example:</p>
<p>A1:  Incorrect ledger entry identified.</p>
<p>A1.3. Accountant confirms that the ledger record does not match the appropriate other ledger.</p>
<p>A1.4. Accountant updates ledger to reflect inconsistency.</p>
<p>A1.5. Accountant identifies proper value to reflect in the ledger.</p>
<p>A1.6. Accountant updates the ledger with the proper value.</p>
<p>A common naming convention is to begin the numbering with the letter &#8220;A&#8221; to represent that it is an alternate course, followed by a number indicating which alternative it is. In the example above, we have a single alternate course, &#8220;A1: Incorrect ledger entry identified&#8221;.  In this example, steps 1 and 2 of the normal course are identical, steps 3 and 4 are replaced with new steps, and steps 5 and 6 have been added.</p>
<p>If another alternate course were defined, it would be numbered &#8220;A2&#8243;, and if it provided an alternate for step 3 in the normal course, that step would be numbered &#8220;A2.3.&#8221;</p>
<p>[Update]</p>
<p>Another situation that happens with alternate courses is that a single step in the normal course can be replaced with multiple steps in an alternate course.  To represent this, we add a letter, denoting that the steps are all combined to replace a single step.  In the example above, we replaced step 4 and added steps 5 and 6. An alternate course may also be documented as follows:</p>
<p>Another example:</p>
<p>A1:  Incorrect ledger entry identified.</p>
<p>A1.3. Accountant confirms that the ledger record does not match the appropriate other ledger.</p>
<p>A1.4.a. Accountant updates ledger to reflect inconsistency.</p>
<p>A1.4.b. Accountant identifies proper value to reflect in the ledger.</p>
<p>A1.4.c. Accountant updates the ledger with the proper value.</p>
<p><strong>Exception Courses</strong></p>
<p>An exception course identifies how the system should behave when something goes wrong in the normal course (or an alternate course).  If there are multiple exception behaviors, they will be called out as separate exception courses.</p>
<p>An example:</p>
<p>E1: Unable to access accounts receivable ledger</p>
<p>E1.1. Accountant fails to access accounts receivable ledger information.</p>
<p>E1.2. System presents error message to accountant explaining access failure and reported cause of failure.</p>
<p>An exception course is identified with the letter &#8220;E&#8221;, and otherwise follows the same numbering conventions as the alternate courses.</p>
<p><strong>Includes</strong></p>
<p>Sometimes use cases are broken down into smaller, reusable use cases (such as login steps, using a search window to find an account, etc).  A reference to another use case from the <em>includes</em> section indicates that the referenced use case is a subset of this use case.</p>
<p>An example:</p>
<p>The use case of &#8220;Accountant Prepares Quarterly Report&#8221; could include  the use case of &#8220;Accountant reconciles accounts-receivable ledger&#8221;.</p>
<p><strong>References/Traces</strong></p>
<p>Each use case is written to support one or more market requirements (goals).  The specific goals that are being supported will be identified as references, or traces.</p>
<p>Each use case is also <a title="Writing functional requirements to support use cases" href="http://tynerblain.com/blog/2006/02/10/writing-functional-requirements-to-support-use-cases/">supported by one or more functional requirements</a>.  References or traces to each of these requirements will be identified in this section.  These references allow product / program managers to understand the impacts of changes and delays in implementation on the overall product delivery schedule.</p>
<p><strong>Assumptions</strong></p>
<p>All assumptions that are implicit in the rest of the use case will be explicitly documented here.</p>
<p>Examples:</p>
<ul>
<li>Pilot is certified to run a safety-check.</li>
<li>Airport allows pilot to run her own safety-check.</li>
</ul>
<p><strong>Notes</strong></p>
<p>Any text that helps the author or potentially helps the reader is documented as notes.  These are not <em>requirement</em>s documented in the use case, any more than notes in the margin of a book are part of the book.</p>
<p><strong>Conclusion</strong></p>
<p>With this understanding, reading any formal use case will be a breeze.</p>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+How+To+Read+a+Formal+Use+Case+http://bit.ly/oXLk+" 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/26/foundation-series-how-to-read-a-formal-use-case/&amp;t=Foundation+Series%3A+How+To+Read+a+Formal+Use+Case" 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/26/foundation-series-how-to-read-a-formal-use-case/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Functional Testing of Software</title>
		<link>http://tynerblain.com/blog/2006/05/17/foundation-series-functional-testing-of-software/</link>
		<comments>http://tynerblain.com/blog/2006/05/17/foundation-series-functional-testing-of-software/#comments</comments>
		<pubDate>Thu, 18 May 2006 03:55:35 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[automated testing]]></category>
		<category><![CDATA[black box testing]]></category>
		<category><![CDATA[blackbox testing]]></category>
		<category><![CDATA[blackbox tests]]></category>
		<category><![CDATA[functional testing]]></category>
		<category><![CDATA[functional tests]]></category>
		<category><![CDATA[graybox testing]]></category>
		<category><![CDATA[graybox tests]]></category>
		<category><![CDATA[keyword table testing]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[qtp]]></category>
		<category><![CDATA[software development process]]></category>
		<category><![CDATA[software process]]></category>
		<category><![CDATA[software product success]]></category>
		<category><![CDATA[software quality]]></category>
		<category><![CDATA[system testing]]></category>
		<category><![CDATA[testing automation]]></category>
		<category><![CDATA[unit testing]]></category>
		<category><![CDATA[white box testing]]></category>
		<category><![CDATA[whitebox testing]]></category>
		<category><![CDATA[whitebox tests]]></category>
		<category><![CDATA[winrunner]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/05/17/foundation-series-functional-testing-of-software/</guid>
		<description><![CDATA[Functional Testing, also referred to as System Testing of software is the practice of testing the completed software to confirm that it meets the requirements defined for the software.  A functional test is typically a test of user interactions, but can also involve communication with external systems.  We contrast functional testing with unit testing.  We also show how functional testing provides different benefits than unit testing.]]></description>
			<content:encoded><![CDATA[<p><img alt="Functional testing class" title="Functional testing class" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<p>Functional Testing, also referred to as <em>System Testing</em> of software is  the practice of testing the completed software to confirm that it meets the  requirements defined for the software.  A functional test is typically a test of  user interactions, but can also involve communication with external systems.  We  contrast functional testing with <a title="Foundation series on unit testing of software" href="http://tynerblain.com/blog/2006/01/19/foundation-series-unit-testing-software/">unit testing</a>.  We also show how functional  testing provides different benefits than unit testing.</p>
<p>This is a relatively long post for a <em>Foundation Series</em> post, so sit back with some coffee and relax.  This primer will be worth it if its a new topic.  If you know this stuff already, check out the links to other articles that go into more depth on points we make.</p>
<p><strong>An Application is a Series of Flows</strong></p>
<p>We can think of an application from the perspective of a user, as a series of  interactions, or flows through the user interface.</p>
<p><img alt="Application flow" title="Application flow" src="http://sehlhorst.smugmug.com/photos/70145401-M.png" /></p>
<p>People are not usually forced to follow a fixed set of instructions, or a  predefined sequence of actions in an application.  They can interact with  controls in a random order, skip controls entirely, or otherwise do stuff that  developers don&#8217;t expect.</p>
<p><strong>Unit Tests are Whitebox Tests</strong></p>
<p>Unit testing, as we detailed in our telephone example, provides targeted test  coverage of specific areas of the code inside the application.  Unit tests are  written by developers, to allow them to test that the implementation that they  created is behaving as they intended.  Unit tests don&#8217;t implicitly provide the  start-to-finish coverage that functional tests usually provide.  Unit tests are  <a title="Foundation Series on Blackbox and Whitebox testing" href="http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/">whitebox tests </a>that assure that a specific behavior intended by the developer is  happening.  A weakness of using unit tests alone is that they will not <a title="Where bugs come from" href="http://tynerblain.com/blog/2006/01/22/where-bugs-come-from/">identify  when the developer <em>misinterpreted</em> the requirements</a>.</p>
<p><img alt="unit testing" title="unit testing" src="http://sehlhorst.smugmug.com/photos/70145383-M.png" /></p>
<p><strong>Functional Tests are Blackbox Tests</strong></p>
<p>A functional test, however, is designed without insight into how the  implementation works.  It is <a title="Software testing series on Blackbox Testing and Whitebox Testing" href="http://tynerblain.com/blog/2006/01/13/software-testing-series-black-box-vs-white-box-testing/">a blackbox test</a>.  A functional test represents a  set of user interactions with the application.  The concept behind a functional  test is to validate something about the state of the application after a series  of events.  According to <a title="Aberro Software homepage" href="http://www.aberrosoftware.com/index.php">Aberro Software</a>, 80% of all functional tests are  performed manually.  That means that the most common functional test involves a  tester making selections in a series of controls, and then evaluating a  condition.  This evaluation is called an assertion.  The tester <em>asserts</em>  that the software is in a specific state (an output is created, a control is  filtered in a specific way, a control is enabled, a navigation option is  disabled, etc).</p>
<p><img alt="full functional testing" title="full functional testing" src="http://sehlhorst.smugmug.com/photos/70145408-M.png" /></p>
<p>Good <a title="Writing functional requirements unambiguously" href="http://tynerblain.com/blog/2006/02/14/writing-requirements-unambiguously/">functional requirements are written as concisely as possible</a>.  A <a title="Writing functional requirements to support use cases" href="http://tynerblain.com/blog/2006/02/10/writing-functional-requirements-to-support-use-cases/">requirement that supports a particular use case</a> might  state that the user specifies A, B, and C, and the application responds with D.   A functional test designed to validate that requirement will almost always mimic  this <em>most common</em> flow of events.  The <em>script</em> that the tester  follows will be to specify A, then B, then C.  The tester will then evaluate the  assertion that D is true.  If D is false, then the test has failed.</p>
<p>A functional test may not cover the entire set of likely user interactions,  but rather a subset of them.</p>
<p><img alt="Targeted functional testing" title="Targeted functional testing" src="http://sehlhorst.smugmug.com/photos/70145423-M.png" /></p>
<p>One problem with this approach is that it does not account for a user  specifying (A, B, X, C) or (A, C, B).  These variations in order of operations  <em>might</em> cause the underlying code to execute differently, and might  uncover a bug.  For a tester to get complete coverage of the requirement (A + B  + C => D), he would have to create multiple scripts.  This is expensive,  tedious, and often redundant.  But a tester has no way to know if the multiple  scripts are redundant, or required.</p>
<p><strong>Combining Unit Tests and Functional Tests</strong></p>
<p>When we combine both unit testing and functional testing approaches, we are  implementing what is called graybox testing (greybox testing).  This is also  referred to as <em>layered testing</em>.  Graybox testing provides two types of  feedback into the <a title="Software development process example" href="http://tynerblain.com/blog/2006/02/20/software-development-process-example/">software development process</a>.  The unit tests provide feedback  to the developer that her implementation is working as designed.  The functional  tests provide feedback to the tester that the application is working as  required.</p>
<p><img alt="Layered testing" title="Layered testing" src="http://sehlhorst.smugmug.com/photos/70145416-M.png" /></p>
<p>Graybox testing is the ideal approach for any software project, and is a key  component of any <a title="Foundation Series on Continuous Integration" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">continuous integration strategy</a>.  Continuous integration is a  process where the software is compiled and tested every day throughout the  release cycle &#8211; instead of waiting until the end of the cycle to test.  Read  this <a title="Ten Essential Elements of Continuous Integration" href="http://tynerblain.com/blog/2006/05/09/ten-essential-practices-of-continuous-integration/">plan for implementing continuous integration</a> if you want more details.</p>
<p><strong>Automating Functional Tests</strong></p>
<p>Automating unit testing is both straightforward, and relatively inexpensive.   Automating functional testing is more expensive to set up, and much more  expensive to maintain.  Each functional test represents a script of specific  actions.  A tester (with programming skills) can utilize software packages like  WinRunner to create scripts of actions followed by assertions.  This represents  an upfront cost of programming a script to match the application, in parallel  with the development of the application &#8211; and it requires a tester with  specialized skills to program the script.</p>
<p>The maintenance cost of automating functional tests is magnified in the early  development stages of any application, and throughout the life of any  application developed with an agile process.  Whenever an element of the user  interface is changed, every script that interacts with that element can be  broken (depending on the nature of the change).  These broken scripts have to be  manually updated to reflect these ongoing changes.  In periods of heavy  interface churn, the cost of maintaining the test suite can quickly become  overwhelming.</p>
<p>In the real world, apparently 80% of teams find that <a title="Measuring the Cost of Quality" href="http://tynerblain.com/blog/2006/02/22/software-testing-series-measuring-the-cost-of-quality/">this overwhelming cost  of automated testing </a>outweighs even the high cost of manual functional testing.</p>
<p><strong>Improved Automation of Functional Tests</strong></p>
<p>We can reduce the maintenance cost of keeping automated scripts current with  the user interface by abstracting the script-coding from the script-definition.   This is referred to as <em>keyword and table</em> scripting.  A set of objects  are coded by the tester and given keywords.  Each object represents an element  in the user interface.  Script behavior (sequence of interaction) is defined in  terms of these keywords.  Now, when a UI element is changed, the keyword-object  is updated and all of the scripts that reference it are repaired.</p>
<p>This, however, does not address issues where one control is refactored into  two controls, the adding or removing of controls, or changes in the desired flow  of interaction.  There is still a very large (albeit smaller) maintenance  burden.  And the applications that use this approach (such as QTP) can cost in  the tens of thousands of dollars.  Another reason to do functional testing  manually.</p>
<p><strong>Conclusion</strong></p>
<p>Functional testing is important to validating requirements.  It is an  important element of assuring a level of software quality.  And it is still  expensive with the best of today&#8217;s proven solutions.  Even with the high cost,  it is much cheaper than the risk of delivering a solution with poor quality.   Plan on having functional testing as a component of any process to achieve  software product success.</p>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  series</em> posts</a> which will be updated whenever new posts are added.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Functional+Testing+of+Software+http://bit.ly/160bLF+" 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/05/17/foundation-series-functional-testing-of-software/&amp;t=Foundation+Series%3A+Functional+Testing+of+Software" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/05/17/foundation-series-functional-testing-of-software/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Continuous Integration</title>
		<link>http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/</link>
		<comments>http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/#comments</comments>
		<pubDate>Tue, 09 May 2006 04:55:40 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[agile process]]></category>
		<category><![CDATA[agile testing]]></category>
		<category><![CDATA[automated testing]]></category>
		<category><![CDATA[build automation]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[incremental delivery]]></category>
		<category><![CDATA[incremental process]]></category>
		<category><![CDATA[iterative delivery]]></category>
		<category><![CDATA[iterative process]]></category>
		<category><![CDATA[managing data]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/</guid>
		<description><![CDATA[Continuous Integration is the software development and quality process where all team members merge their code and verifies it frequently - at least daily. This verification project includes both an automated build process and automated testing. The main benefits of continuous integration come from risk-reduction and cost-reduction.]]></description>
			<content:encoded><![CDATA[<p><img title="Continuous Integration classroom" alt="Continuous Integration classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<h2>Continuous Integration</h2>
<p>Continuous Integration is the software development and quality process where all team members merge their code and verify it frequently &#8211; at least daily.  This verification project includes both an automated build process and automated testing.  The main benefits of continuous integration come from risk-reduction and cost-reduction.</p>
<p>Integration has to happen.  Making it continuous reduces its cost.  There are also efficiencies for developers who can write better code faster when they are writing it in the context of the latest (most up-to-date) version of the code.</p>
<p>Risk is reduced in two ways.  First, continuous integration causes fewer bugs to be created, thereby reducing risk.  Second, when bugs are created, they are identified at the earliest possible moment (same day as their creation).  This maximizes the time available to resolve them.  No surprises at the end of the release cycle.</p>
<h2>Merging Code</h2>
<p>When a single software developer is writing code, she writes her code, saving frequently, and archiving it.  But she is the only person working on the code.  Other than the developer, no one cares how often she checks it in, as long as she can deliver the software on the release date.</p>
<p>When multiple developers work together, they depend upon each other.  On any given day, different developers are writing different pieces of software &#8211; usually objects with today&#8217;s languages.  These objects talk to each other, depend upon each other, or at least co-exist with each other in the completed software.  This stuff is all &#8220;under the hood&#8221; for users, but imperative to understand when trying to manage a development process or team.</p>
<h2>Why Merging Matters</h2>
<p>After the developers go off into their offices and create their objects independently, some or all of the team members have to stop what they are doing, and integrate all of those objects back into a common code-base (aka &#8216;the software).  When a developer fixes a bug in one or more objects, those fixes need to be incorporated back into the common code-base.  With multiple developers, there are multiple elements that all have to be rolled back together again into the code.  Developers often refer to this as merging or promoting into the trunk, or tip, or main branch.</p>
<p>Each change has a set of predicted effects on the rest of the software.  These changes can be tested by the developer before integrating her code into the trunk.  Each change also has a set of unpredicted effects on the rest of the software.  And combinations of changes can &#8216;create&#8217; effects that did not occur with either change individually.  &#8216;Unpredicted effects&#8217; is fancy-talk for &#8216;bugs&#8217;.  The more changes we integrate into the trunk at a time, the more bugs we create.  And this is an accelerating effect &#8211; the complexity of integration increases faster than the number of changes being integrated.</p>
<h2>Increased Complexity Drives Higher Costs</h2>
<p>As we increase the frequency of integration, we decrease the quantity of changes per integration.  This decreases both the cost per integration and the total cost of integration.  It is much cheaper to integrate five changes 100 times than to integrate 100 changes five times.</p>
<p><img title="4 objects, 10 sources" alt="4 objects, 10 sources" src="http://sehlhorst.smugmug.com/photos/68586280-M.png" /></p>
<p><img title="10 objects, 30 sources" alt="10 objects, 30 sources" src="http://sehlhorst.smugmug.com/photos/68586308-M.png" /></p>
<p>Each object and each connection in these diagrams represent a potential source of error.  With 4 objects, we have 10 sources.  With 7 objects, we have 30 sources of error.  This represents an accelerating increase in the cost of integration.</p>
<p><img title="accelerating increase" alt="accelerating increase" src="http://sehlhorst.smugmug.com/photos/68586129-M.png" /></p>
<p>To minimize the costs, we need to minimize the number of objects being integrated.  We do that by minimizing the time between integrations.</p>
<h2>Overhead</h2>
<p>The main resistance to frequent merging is the <a title="Software Testing Series on Measuring the Cost of Quality" href="http://tynerblain.com/blog/2006/02/22/software-testing-series-measuring-the-cost-of-quality/">cost of testing</a>.  Testing involves building the merged code, <a title="Foundation series on unit testing" href="http://tynerblain.com/blog/2006/01/19/foundation-series-unit-testing-software/">running the tests</a>, and evaluating the results.  When the building and testing (the integrating) are automated, the cost of evaluating test results can be minimized.  When test-evaluation is also automated, we can bypass test-result evaluation except when the system notifies us that something is broken.</p>
<p>Continuous integration is only feasible when the overhead of integrating (merging and verifying) is trivialized through automation.</p>
<h2>Conclusion</h2>
<p>Agile processes depend upon continuous integration, but any software development process is improved with continuous integration.  This is one of the enablers of <a title="Two big benefits of incremental delivery" href="http://tynerblain.com/blog/2006/04/18/two-big-benefits-of-incremental-delivery/">iterative development processes.</a>  It reduces the cost of quality (or allows us to achieve higher quality levels at the same cost).  It also makes development more enjoyable because developers spend less time on fixing bugs and more time implementing solutions.</p>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Continuous+Integration+http://bit.ly/YqgSi+" 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/05/08/foundation-series-continuous-integration/&amp;t=Foundation+Series%3A+Continuous+Integration" 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/05/08/foundation-series-continuous-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Basic PERT Estimate Tutorial</title>
		<link>http://tynerblain.com/blog/2006/04/13/foundation-series-basic-pert-estimate-tutorial/</link>
		<comments>http://tynerblain.com/blog/2006/04/13/foundation-series-basic-pert-estimate-tutorial/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 03:54:39 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[estimating]]></category>
		<category><![CDATA[estimation]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[pert]]></category>
		<category><![CDATA[pert analysis]]></category>
		<category><![CDATA[pert analysis estimates]]></category>
		<category><![CDATA[pert duration estimates]]></category>
		<category><![CDATA[pert estimate]]></category>
		<category><![CDATA[pert estimating]]></category>
		<category><![CDATA[pert estimation]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[project management pert]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/04/13/foundation-series-basic-pert-estimate-tutorial/</guid>
		<description><![CDATA[PERT is a technique for providing definitive estimates of how long it will take to complete tasks.  We often estimate, or scope, the amount of time it will take us to complete a task or tasks.  PERT allows us to provide not only an estimate, but a measure of how good the estimate is.  Good estimates are a critical element in any software planning strategy.  In this post, we will present an introduction to using PERT, explain how it works and how to interpret PERT estimates.]]></description>
			<content:encoded><![CDATA[<p><img title="estimation classroom" alt="estimation classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<h2>PERT = Program Evaluation Review Technique</h2>
<p>PERT is a technique for providing definitive estimates of how long it will take to complete tasks.  We often estimate, or scope, the amount of time it will take us to complete a task or tasks.  PERT allows us to provide not only an estimate, but a measure of <em>how good the estimate is</em>.  Good estimates are a critical element in any <a title="Using timeboxes to schedule delivery" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">software planning strategy</a>.  In this post, we will present an introduction to using PERT, explain how it works and how to interpret PERT estimates.</p>
<p><span id="more-167"></span></p>
<h2>Multiple estimates</h2>
<p><img title="ice cream" alt="ice cream" src="http://sehlhorst.smugmug.com/photos/64350206-M.jpg" /></p>
<p>Imagine we&#8217;ve been asked to predict how long it will take us to go to the store and get some vanilla ice cream.  &#8220;It depends,&#8221; we think.   If the traffic is light, and there is a short line at the checkout counter, 15 minutes.  If traffic is average and we have to wait behind several people at the checkout line, 30 minutes.  If there&#8217;s an accident on the way and traffic is backed up, it could take an hour.</p>
<p>We may not realize it, but we just created a PERT estimate.</p>
<h2>Definition of PERT</h2>
<p>A PERT estimate uses three estimates for any given task, to provide both an expected duration for the task and an understanding of how much we might be off in our estimate.  To create a PERT estimate, we first create three seperate estimates of the time it will take to complete the task.</p>
<ol>
<li>Optimistic, or best-case scenario.  15 minutes to get ice cream, if <em>everything</em> goes right.</li>
<li>Likely scenario.  30 minutes is how long we think it will probably take to get the ice cream.</li>
<li>Pessimistic, or worst-case scenario.  60 minutes if everything bad that could reasonably happen happens.</li>
</ol>
<p>Next, we combine these estimates to create a single number that best predicts how long it will take.  We create a weighted-average of the three values, but we count the &#8220;likely&#8221; estimate as being four-times more likely than either the optimistic or pessimistic estimate.  This represents the <em>mean</em> estimate.<br />
mean = (optimistic + (4 * likely) + pessimistic) / 6</p>
<p>The PERT <em>mean</em> estimate for our ice cream delivery is (15 + (4 * 30) + 60) / 6 = 32.5 minutes.  We often see PERT estimates documented as all three values, 15/30/60.</p>
<h2>Basic PERT interpretation</h2>
<p>A PERT estimate includes an approximation of standard deviation (stdev) based on the optimistic and pessimistic values.   Stdev provides us with insight into the shape of the probability curve represented by the estimates.</p>
<p>stdev = (pessimistic &#8211; optimistic) / 6</p>
<p>The PERT stdev for our ice cream delivery is (60 &#8211; 15) / 6 = 7.5 minutes.</p>
<p>The PERT estimate is a representation of a beta distribution.  The math is pretty complex, and applying it to a single estimate can give us a false sense of precision.  Remember that the numbers we put together in the first place are our best guesses, so doing more precise math on rough estimates doesn&#8217;t give us a more precise PERT estimate, just more math.</p>
<p>The beta distribution is very similar to a normal distribution (the familiar bell curve), when it is balanced.  This similarity is used to simplify the application of PERT.  The standard simplification in using PERT is to treat estimates as if they represented the following probabilities:</p>
<ul>
<li>Optimistic: 5% of the time we will complete our task in less than the optimistic time estimate.</li>
<li>Likely: 50% of the time we will complete our task in less time than the likely time estimate.</li>
<li>Pessimistic: 95% of the time we will complete our task in less than the pessimistic time estimate.</li>
</ul>
<h2>More advanced PERT analyses</h2>
<p>What happens when we want to combine several PERT estimates for our project?  Imagine we had to make two trips to buy ice cream, and we want an estimate of how much total time it would take.</p>
<p>Here&#8217;s the wrong solution.  Add the two PERT estimates.  15/30/60 + 15/30/60 = 30/60/120 with a mean of 65 minutes and a stdev of 15 minutes.  This would say that there is a 90% chance that we will spend between 30 and 120 minutes getting ice cream.</p>
<p>Again, without much math, there&#8217;s an intuitive reason why this is wrong.  We are not taking into account the likelihood that our two trips will take different amounts of time.  If we hit bad traffic in one trip, that doesn&#8217;t mean we are likely to hit it on the second trip as well.  If there is 1 chance in 20 that we hit out pessimistic estimate, then there is only 1 chance in  400 that it would happen twice.  So really, there is a 99.5% chance that we would have between 30 and 120 minutes of total travel.  We can narrow down this estimate a lot.</p>
<p>To combine the two estimates, we combine the underlying probability distributions that they represent.  With the PERT approximations, we would do this as follows:</p>
<ol>
<li>The combined mean is the sum of the two old means.  32.5 + 32.5 = 65 minutes.</li>
<li>The combined stdev is the square root of the sum of the squares of the two old stdevs.  SQRT(7.5^2 + 7.5^2) = 10.6.</li>
<li>The combined optimistic estimate is the mean minus ( 3 * stdev).  Optimistic = 65 &#8211; (3 * 10.6) = 33 minutes.</li>
<li>The combined pessimistic estimate is the mean plus (3 * stdev).  Pessimistic = 65 + (3 * 10.6) = 97 minutes.</li>
<li>Our combined PERT estimate is 33/65/97 with a mean of 65 minutes and a stdev of 10.6 minutes.</li>
</ol>
<p>This combined window is more narrow than the &#8220;just double everything&#8221; approach, and reflects that the law of averages will eventually narrow down the interval for our estimate &#8211; because some tasks take longer than estimated, and some take less time.  It all averages out in the end, as long as the estimates are good to begin with.</p>
<h2>Beyond PERT</h2>
<p><strong> </strong></p>
<ul>
<li>One question that always comes up when planning is <a title="Identifying the Source of Estimates" href="http://tynerblain.com/blog/2006/04/28/where-did-you-get-that-estimate/">how you created your estimates</a>.</li>
<li><a title="How to use Timeboxes for scheduling" href="http://tynerblain.com/blog/2006/04/12/how-to-use-timeboxes-for-scheduling-software-delivery/">Managing releases with timeboxes</a>.</li>
<li>Updating an existing release schedule with <a title="Scheduling Requirements Changes" href="http://tynerblain.com/blog/2006/04/10/scheduling-requirements-changes-part-1/">requirements changes</a>.</li>
</ul>
<h2>Summary</h2>
<p>We have enough information to know how to create a PERT estimate for a single task.  We also know how to combine those PERT estimates to provide a multi-task estimate.  There is a lot more we could cover, such as showing the impact of this statistical technique on critical path analysis, or incorporating an approximation of the correlation of estimates (if this task takes longer than estimated, then that task will probably take longer than we estimated).   That&#8217;s too much detail for this introductory article &#8211; just know that it&#8217;s out there.  What we cover here represents what the vast majority of project managers understand about PERT (and maybe a bit more).</p>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  Series</em> posts</a> which will be updated whenever new posts are added.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Basic+PERT+Estimate+Tutorial+http://bit.ly/deuon+" 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/04/13/foundation-series-basic-pert-estimate-tutorial/&amp;t=Foundation+Series%3A+Basic+PERT+Estimate+Tutorial" 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/04/13/foundation-series-basic-pert-estimate-tutorial/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Feature Driven Development (FDD) Explained</title>
		<link>http://tynerblain.com/blog/2006/03/27/foundation-series-feature-driven-development-fdd-explained/</link>
		<comments>http://tynerblain.com/blog/2006/03/27/foundation-series-feature-driven-development-fdd-explained/#comments</comments>
		<pubDate>Tue, 28 Mar 2006 05:20:29 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[FDD]]></category>
		<category><![CDATA[FDD explained]]></category>
		<category><![CDATA[feature driven development]]></category>
		<category><![CDATA[feature driven development explained]]></category>
		<category><![CDATA[intro to FDD]]></category>
		<category><![CDATA[introduction to FDD]]></category>
		<category><![CDATA[introduction to feature driven development]]></category>
		<category><![CDATA[managing data]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/03/27/foundation-series-feature-driven-development-fdd-explained/</guid>
		<description><![CDATA[Feature driven development (FDD) is one of several agile methodologies for developing software iteratively. Iterative development is the opposite of waterfall development.  FDD is a process that begins with high level planning to define the scope of the project, which then moves into incremental delivery. Each increment of delivery involves a design phase and an implementation phase. The scope of each increment is a single feature. Extreme programming (XP) is a much better known agile methodology. XP is often described as an emergent design process, in that no one knows what the finished product is going to be until the product is finished. FDD, by comparison, defines the overall scope of the project at the beginning, but does not define the details.]]></description>
			<content:encoded><![CDATA[<p><img title="FDD classroom" alt="FDD classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<p>Feature driven development (FDD) is one of several agile methodologies for developing software iteratively.  <a title="Waterfall versus incremental processes" href="http://tynerblain.com/blog/2006/01/03/foundation-series-software-process-waterfall-process-versus-incremental-process/">Iterative development is the opposite of waterfall development</a>.</p>
<p><strong>In a nutshell</strong></p>
<p>FDD is a process that begins with high level planning to define the scope of the project, which then moves into incremental delivery.  Each increment of delivery involves a design phase and an implementation phase.  The scope of each increment is a single feature.  Extreme programming (XP) is a much better known agile methodology.  XP is often described as an <em>emergent design</em> process, in that no one knows what the finished product is going to be until the product is finished.  FDD, by comparison, defines the overall scope of the project at the beginning, but does not define the details.</p>
<p><strong>Explained by analogy</strong></p>
<p>Consider the writing of a mystery novel as an analogy.</p>
<ul>
<li><strong>Waterfall process.</strong>  First, our author determines the major characters, the mystery, a detailed plot outline, and outlines for all of the subplots.  Then she sketches out all of the minor characters.  Finally she writes the novel, following her outline along the way.  Immediately after typing &#8216;the end&#8217; she sends the novel off to the editor.  The editor replies with major change suggestions &#8211; it seems that the topic might have been in vogue two years ago, but it doesn&#8217;t sell very well today.  And half the chapters are low-value rambling that are sure to lose the readers.  Our author starts over.</li>
<li><strong>Extreme programming: XP. </strong> Our author decides to write a mystery novel, puts a blank sheet of paper in the typewriter and starts typing.  As she writes, she realizes that she&#8217;d much rather write a romance, so she edits the chapters she&#8217;s finished and keeps moving forward.  She sends early drafts to her editor of every chapter as she finishes it.  The editor suggests that she change the setting from the Alps to the Amazon, and she edits again.  After finishing the book, she has a three-book historical fiction series set in the rain forest.</li>
<li><strong>Feature driven development: FDD.</strong>  Our author creates an outline for the story, gives names to the major characters and prepares to write chapter one. As she starts each chapter, she writes some details of the subplot, makes some notes about how the characters should develop, and begins writing.  She sends her outline to the editor, as well as drafts of each chapter as she completes them.  She splits her time between incorporating feedback on previous chapters and outlining/writing the current chapter.  At the end of the book, she has a mystery with the same major characters that she expected &#8211; but they didn&#8217;t develop into exactly the people she expected, and she never would have predicted the sub-plots that created themselves as she wrote.</li>
</ul>
<p>When we look at these approaches, we see that FDD tries to combine the best part of a waterfall process (good planning) with the best part of XP (continuous improvement through iteration).</p>
<p><strong>More detail</strong></p>
<p>There are five phases in an FDD process.  The first three phases are planning phases and the last two phases are iterative phases (they are repeated for each iteration).</p>
<p><strong>Planning phases:</strong></p>
<ol>
<li><strong>Develop an overall model.</strong>  This is a representation of how the solution will work and what it will do.  It is the high-level framework describing the big picture of how everything works together.</li>
<li><strong>Build feature list.</strong>  This is the list of features needed to implement the high level view from phase 1.</li>
<li><strong>Plan.</strong>  Create a rough plan of the entire project.  Some proponents also talk about creating detailed plans per feature (as each feature is addressed).</li>
</ol>
<p><strong>Iterative phases (one feature per iteration)</strong></p>
<ol>
<li><strong>Design the feature.</strong>  What Alan Cooper would call <a title="Scroll down to look at the second diagram" href="http://tynerblain.com/blog/2006/03/23/interaction-design-and-structured-requirements/"><em>program</em> design</a>.</li>
<li><strong>Implement the feature.</strong> Writing code, testing, documentation.</li>
</ol>
<p><strong>Conclusion</strong></p>
<p>There is little or no discussion about requirements in FDD.  Starting with an overall model is great from a developer&#8217;s perspective.  The challenge is in determining what to place in the model &#8211; <a title="Using Kano analysis to prioritize requirements" href="http://tynerblain.com/blog/2006/02/27/prioritizing-software-requirements-kano-take-two/">what requirements are important to the users?</a>  <a title="Interaction design process overview" href="http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/">How will users interact with the system?</a>  Good answers to these questions can make or break an overall model &#8211; and a faulty model will yield low-value software.</p>
<p>This approach to agile development can be very effective when augmented with the right requirements management process.</p>
<p><strong>Learning more about FDD</strong></p>
<ul>
<li>Brad Appleton has <a title="FDD as an alternative to XP" href="http://bradapp.blogspot.com/2005/06/fdd-agile-alternative-to-xp.html">a good post providing several links</a> to other sources and explaining how FDD sits between waterfall and xp processes.</li>
<li>Jeff De Luca wrote the precursor to FDD (<a title="The original FDD" href="http://www.nebulon.com/articles/fdd/originalfdd.html">or the original version, as he explains</a>)</li>
<li>Peter Coad, author of FDD has a great <a title="Overview of FDD" href="http://www.featuredrivendevelopment.com/files/fddoverview.pdf">23 slide pdf presentation </a>providing an overview of FDD.</li>
<li><a title="FDD website" href="http://www.featuredrivendevelopment.com/">www.featuredrivendevelopment.com</a>.</li>
</ul>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation Series</em> posts</a> which will be updated whenever new posts are added.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Feature+Driven+Development+%28FDD%29+Explained+http://bit.ly/RwWfs+" 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/27/foundation-series-feature-driven-development-fdd-explained/&amp;t=Foundation+Series%3A+Feature+Driven+Development+%28FDD%29+Explained" 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/27/foundation-series-feature-driven-development-fdd-explained/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Software testing series: Pairwise testing</title>
		<link>http://tynerblain.com/blog/2006/03/18/software-testing-series-pairwise-testing/</link>
		<comments>http://tynerblain.com/blog/2006/03/18/software-testing-series-pairwise-testing/#comments</comments>
		<pubDate>Sun, 19 Mar 2006 03:19:51 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[blackbox]]></category>
		<category><![CDATA[blackbox testing]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[pairwise]]></category>
		<category><![CDATA[pairwise test]]></category>
		<category><![CDATA[pairwise testing]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/03/18/software-testing-series-pairwise-testing/</guid>
		<description><![CDATA[Very large and complex systems can be very difficult and expensive to test. Often, we inherit legacy systems with multiple man-years of development effort already in place, in the field and of unknown quality. With these systems, there are frequently huge gaps in the requirements documentation. Pairwise testing provides a way to test these large, existing systems. And on many projects, we're called in because there is a quality problem.]]></description>
			<content:encoded><![CDATA[<p><img alt="testing equipment" title="testing equipment" src="http://sehlhorst.smugmug.com/photos/53239416-M.jpg" /><br />
<strong>Before we explain pairwise testing, let&#8217;s describe the problem it solves<br />
</strong></p>
<p>Very large and complex systems can be very difficult and expensive to test. We inherit legacy systems with multiple man-years of development effort already in place.  These systems are in the field and of unknown quality.  With these systems, there are frequently huge gaps in the requirements documentation. Pairwise testing provides a way to test these large, existing systems.  And on many projects, we&#8217;re called in because there is a quality problem.</p>
<p>We are faced with the challenge of quickly improving, or at least quickly demonstrating momentum and improvement in the quality of this existing software.  We may not have the time to go re-gather the requirements, document them, and validate them through testing before our sponsor pulls the plug (or gets fired).  We&#8217;re therefore faced with the need to approach the problem with <a title="Foundation series: Introduction to blackbox and whitebox testing" href="http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/">blackbox (or black box) testing techniques</a>.</p>
<p>For a complex system, the amount of testing required can be overwhelming.  Imaging a product with 20 controls in the user interface, each of which has 5 possible values.  We would have to test 5^20 different combinations (95,367,431,640,625) to cover every possible set of user inputs.</p>
<p><strong>The power of pairwise</strong></p>
<p>With pairwise programming, we can achieve on the order of 90% coverage of our code in this example with 54 tests!  The exact amount of coverage will vary from application to application, but analysis consistently puts the value in the neighborhood of 90%.  The following are some results from <a title="Effectiveness of pairwise" href="http://pairwise.org/results.asp">pairwise.org</a>.</p>
<blockquote><p>We measured the coverage of combinatorial design test sets for 10 Unix commands: basename, cb, comm, crypt, sleep, sort, touch, tty, uniq, and wc. […] The pairwise tests gave over 90 percent block coverage.</p></blockquote>
<blockquote><p>Our initial trial of this was on a subset Nortel&#8217;s internal e-mail system where we able cover 97% of branches with less than 100 valid and invalid testcases, as opposed to 27 trillion exhaustive testcases.</p></blockquote>
<blockquote><p>[…] a set of 29 pair-wise AETG tests gave 90% block coverage for the UNIX sort command. We also compared pair-wise testing with random input testing and found that pair-wise testing gave better coverage.</p></blockquote>
<p>Got our attention!</p>
<p><strong>How does pairwise testing work?</strong></p>
<p>Pairwise testing builds upon an understanding of the way bugs manifest in software.  Usually, a bug is caused not by a single variable causing a bug, but by the unique combination of two variables causing a bug.  For example, imagine a control that calculates and displays shipping charges in an eCommerce website.  The website also calculates taxes for shipped products (when there is a store in the same state as the recipient, sales taxes are charged, otherwise, they are not).  Both controls were implemented and tested and work great.  However, when shipping to a customer in a state that charges taxes, the shipping calculation is incorrect.  It is the interplay of the two variables that causes the bug to manifest.</p>
<p>If we test every unique combination of every pair of variables in the application, we will uncover all of these bugs.  Studies have shown that the overwhelming majority of bugs are caused by the interplay of two variables.  We can increase the number of combinations to look at every three, four, or more variables as well &#8211; this is called N-wise testing.  Pairwise testing is N-wise testing where N=2.</p>
<p><strong>How do we determine the set of tests to run?</strong></p>
<p>There are several commercial and free software packages that will calculate the required pairwise test suite for a given set of variables, and some that will calculate N-wise tests as well.  Our favorite is a public domain (free) <a title="jenny homepage" href="http://burtleburtle.net/bob/math/jenny.html">software package called <em>jenny</em></a>, written by Bob Jenkins.  <em>jenny</em> will calculate N-wise test suites, and its default mode is to calculate pairwise tests.  <em>jenny</em> is a command line tool, written in C, and is very easy to use.  To calculate the pairwise tests for our example (20 controls, each with 5 possible inputs), we simply type the following:</p>
<blockquote><p>jenny 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 > output.txt</p></blockquote>
<p>And <em>jenny</em> generates results that look like the following:</p>
<blockquote><p>1a 2d 3c 4d 5c 6b 7c 8c 9a 10c 11b 12e 13b 14d 15a 16c 17a 18d 19a 20e<br />
1b 2e 3a 4a 5d 6c 7b 8e 9d 10a 11e 12d 13c 14c 15c 16e 17c 18a 19d 20d<br />
1c 2b 3e 4b 5e 6a 7a 8d 9e 10d 11d 12a 13e 14e 15b 16b 17e 18e 19b 20c<br />
1d 2a 3d 4c 5a 6d 7d 8b 9b 10e 11c 12b 13d 14b 15d 16d 17d 18b 19e 20a<br />
1e 2c 3b 4e 5b 6e 7e 8a 9c 10b 11a 12c 13a 14a 15e 16a 17b 18c 19c 20b<br />
1a 2a 3c 4e 5e 6a 7b 8c 9d 10b 11b 12b 13e 14a 15d 16d 17c 18c 19b 20d [...]</p></blockquote>
<p>Where the numbers represent each of the 20 controls, and the letters represent each of the five possible selections.</p>
<p>What&#8217;s the catch?</p>
<p>There are two obvious catches.  First, when you use a tool like <em>jenny</em>, we must run all of the tests that it identifies, we can&#8217;t pick and choose.  Second, pairwise testing doesn&#8217;t find everything.  What if our example bug before about taxes and shipping only manifested when the user is a first time customer?  Pairwise testing would not catch it.  We would need to use N-wise testing with N >= 3.  Our experience has been that N=3 is effective for almost all bugs.</p>
<p>There is also a sneaky catch &#8211; test generators like <em>jenny</em> assume that the order of variables is irrelevant.  Sometimes we are testing dynamic user interfaces, where the order of value selection in controls is relevant.  There is a solution to this, and we will update this post with a link to that solution when it is available.</p>
<p>- &#8211; -</p>
<p>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 testing articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Software+testing+series%3A+Pairwise+testing+http://bit.ly/ix0nb+" 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/18/software-testing-series-pairwise-testing/&amp;t=Software+testing+series%3A+Pairwise+testing" 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/18/software-testing-series-pairwise-testing/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Foundation Series: CMMI Levels Explained</title>
		<link>http://tynerblain.com/blog/2006/03/10/foundation-series-cmmi-levels-explained/</link>
		<comments>http://tynerblain.com/blog/2006/03/10/foundation-series-cmmi-levels-explained/#comments</comments>
		<pubDate>Sat, 11 Mar 2006 05:55:07 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[CMMI]]></category>
		<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[capability maturity model]]></category>
		<category><![CDATA[capability maturity model integration]]></category>
		<category><![CDATA[cmm]]></category>
		<category><![CDATA[cmm level.cmmi level 1]]></category>
		<category><![CDATA[cmmi framework]]></category>
		<category><![CDATA[cmmi level]]></category>
		<category><![CDATA[cmmi level 2]]></category>
		<category><![CDATA[cmmi level 3]]></category>
		<category><![CDATA[cmmi level 4]]></category>
		<category><![CDATA[cmmi level 5]]></category>
		<category><![CDATA[cmmi overview]]></category>
		<category><![CDATA[intro to cmmi]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[sei cmmi]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/03/10/foundation-series-cmmi-levels-explained/</guid>
		<description><![CDATA[CMM is a numeric scale used to "rate" the maturity of a software development process or team.  In this context, maturity can be thought of like enlightenment.  An immature process is not much different from the old "infinite monkeys" yarn - maybe we get it right, but probably not.  A fully matured or enlightened process not only does it right, but improves itself over time.  The Software Engineering Institute (SEI) at Carnegie Mellon, my alma mater, created the CMM model in the late 80's and early 90's.  In this post, we will understand what each level represents.]]></description>
			<content:encoded><![CDATA[<p><img title="CMU classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" alt="CMU classroom" /></p>
<p><strong>CMMI is the initialism for Capability Maturity Model Integration. </strong></p>
<p>CMMI is a numeric scale used to &#8220;rate&#8221; the maturity of a software development process or team. Maturity can be thought of like enlightenment.  An immature process is not much different from the old &#8220;infinite monkeys&#8221; yarn &#8211; maybe we get it right, but probably not.  A fully matured or enlightened process not only does it right, but improves itself over time.</p>
<p>The Software Engineering Institute (SEI) at Carnegie Mellon (Go Tartans!  BSME90) created the CMM model for software engineering in the late 80&#8217;s and early 90&#8217;s.  In an effort to consolidate multiple CMM models for different process areas, the SEI team created the CMMI in 2002.   In this post, we will understand what each level represents.</p>
<p>Technically, the name of the model is the <em>Capability Maturity Model Integration for Software</em> Engineering, or <em>SW-CMM</em>, but in practice people just use CMM.  The <a title="CMMI for software at CMU" href="http://www.sei.cmu.edu/pub/documents/02.reports/pdf/02tr028.pdf">645 page document</a> can be found on the <a title="CMU Software Engineering Institute" href="http://www.sei.cmu.edu/cmmi/">CMU SEI site</a>.</p>
<p><span id="more-138"></span></p>
<p><strong>Five levels of maturity in CMMI</strong></p>
<p>The folks at the SEI created five classifications or levels of process maturity.  Every software project can be classified into one of the levels.  The levels are progressively harder to achieve, and each builds on the previous level.  To be classified in a particular level, a process must meet all of the criteria of that level.  If a process meets all the criteria of level 2, and some of the criteria of level 3, then that process is considered to be a level 2 process.</p>
<p>Note that there is a level 0, or incomplete.  This level represents the absence or incompleteness of activity.  If we are developing software, we are at least at level 1.</p>
<ol>
<li>Performed.</li>
<li>Managed.</li>
<li>Defined.</li>
<li>Quantitatively Managed.</li>
<li>Optimizing.</li>
</ol>
<p><strong>CMMI Level 1: Performed</strong></p>
<p><img title="superstar photo" src="http://sehlhorst.smugmug.com/photos/59371234-M.gif" alt="superstar photo" /></p>
<p>The lowest possible CMMI level (there is no level 0) represents software development essentially in the absence of a process.  Specifically, the SEI defines level 1 as being achieved if the goals of the process are met.  If we are trying to write software, and we write software, then we are at level 1.  In practice, level 1 processes are the ones described as chaotic and unordered.  A team with a level 1 process can easily be dependent upon individual effort for success.</p>
<p>Most small software companies,  independent developers, as well as many corporate IT departments operate at level 1.  If we can point to projects that were &#8220;saved&#8221; by a <strong>superstar </strong>on the team, we are probably operating at CMMI level 1.  We love having superstars on our teams &#8211; we hate being dependent upon them for survival.</p>
<p><strong> CMMI Level 2: Managed</strong></p>
<p><img title="Manager" src="http://sehlhorst.smugmug.com/photos/59373141-M.gif" alt="Manager" /></p>
<p>SEI defines CMMI level two as follows:</p>
<blockquote><p>A managed process is a performed (capability level 1) process that is also planned and executed in accordance with policy, employs skilled people having adequate resources to produce controlled outputs, involves relevant stakeholders; is monitored, controlled, and reviewed; and is evaluated for adherence to its process description.</p></blockquote>
<p>Our interpretation:  take a CMMI level one process, and add a project manager to coordinate the chaos.  The distinction is that at this level, the activities are planned, and then managed according to the plan.  No additional insight is applied, just orchestration.</p>
<p><strong>CMMI Level 3: Defined</strong></p>
<p><img title="cookie cutter" src="http://sehlhorst.smugmug.com/photos/59373734-M.jpg" alt="cookie cutter" /></p>
<p>To achieve CMMI level three, we have to take a process that qualifies for CMMI level two, and institute it as a corporate standard.  Then we tailor and apply that standard process to individual projects.</p>
<p><strong>CMMI Level 4: Quantitatively Managed</strong></p>
<p><img title="measuring gage" src="http://sehlhorst.smugmug.com/photos/53239521-M.jpg" alt="measuring gage" /></p>
<p>When we incorporate quantitative measurement or statistical analysis tools as part of our process management process, we are operating at CMMI level four.  This level represents &#8220;hard&#8221; introspection that utilizes quantified data to improve the management of the current project within our defined project.</p>
<p><strong>CMMI Level 5: Optimizing</strong></p>
<p><img title="introspective robot" src="http://sehlhorst.smugmug.com/photos/59374288-M.jpg" alt="introspective robot" /></p>
<p>When we analyze the quantitative data from our projects and apply it to refining our processes for the future, we are operating CMMI level five.  This level represents an introspective approach to quantitative project management, combined with a continuous improvement objective.</p>
<p><strong>Articles In This Series</strong></p>
<ul>
<li><a title="Introduction to CMMI Levels" href="../2006/03/10/foundation-series-cmmi-levels-explained/">Foundation Series: CMMI Levels Explained</a></li>
<li><a title="What CMMI Level to Use" href="../2006/03/12/what-cmmi-level-should-we-use/">What CMMI Level Should We Use?</a></li>
<li><a title="Introduction to Mapping the RMM to the CMMI" href="../2007/01/25/cmmi-and-rmm-intro/">CMMI Levels and RMM Introduction</a></li>
<li><a title="Mapping RMM Level 1 to CMMI" href="../2007/01/26/cmmi-and-rmm-level-1/">CMMI Levels and RMM Level 1 &#8211; Written Requirements</a></li>
<li><a title="CMMI Levels and RMM Level 2 - Organized Requirements" href="../2007/01/29/cmmi-and-rmm-level-2/">CMMI Levels and RMM Level 2 &#8211; Organized Requirements</a></li>
<li><a title="CMMI Levels and RMM Level 3 - Structured Requirements" href="../2007/01/30/cmmi-and-rmm-level-3/">CMMI Levels and RMM Level 3 &#8211; Structured Requirements</a></li>
<li><a title="CMMI Levels and RMM Level 4 - Traced Requirements" href="../2007/01/31/cmmi-and-rmm-level-4/">CMMI Levels and RMM Level 4 &#8211; Traced Requirements</a></li>
<li><a title="CMMI Levels and RMM Level 5 - Integrated Requirements" href="../2007/02/01/cmmi-and-rmm-level-5/">CMMI Levels and RMM Level 5 &#8211; Integrated Requirements</a></li>
<li>Don’t forget to take our <a title="Quick Poll on CMMI and RMM Levels" href="../2007/02/02/cmmi-and-rmm-survey/">One Minute Survey on CMMI and RMM</a>.</li>
</ul>
<p>- &#8211; -</p>
<p>Also check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  Series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+CMMI+Levels+Explained+http://bit.ly/KOMfI+" 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/10/foundation-series-cmmi-levels-explained/&amp;t=Foundation+Series%3A+CMMI+Levels+Explained" 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/10/foundation-series-cmmi-levels-explained/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Foundation Series: User Experience Disciplines</title>
		<link>http://tynerblain.com/blog/2006/03/03/foundation-series-user-experience-disciplines/</link>
		<comments>http://tynerblain.com/blog/2006/03/03/foundation-series-user-experience-disciplines/#comments</comments>
		<pubDate>Sat, 04 Mar 2006 04:51:13 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[human factors engineering]]></category>
		<category><![CDATA[ia]]></category>
		<category><![CDATA[information architecture]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Interface Design]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[usability specialist]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/03/03/foundation-series-user-experience-disciplines/</guid>
		<description><![CDATA[UX, pronounced you-ex, is the shorthand for user-experience. It represents the science and art of tailoring the experience that users have with a product - in our case, software. UX is a relatively new term, rapidly overtaking HCI (human-computer interface) and CHI (computer-human interface) as the acronym du jour. There are several disciplines within this field, we'll introduce each of them.]]></description>
			<content:encoded><![CDATA[<p><img title="requirements classroom" alt="requirements classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<p><strong>What the heck is UX?</strong></p>
<p>UX, pronounced <em>you-ex</em>, is the shorthand for user-experience.  It represents the science and art of tailoring the experience that users have with a product &#8211; in our case, software.  UX is a relatively new term, rapidly overtaking HCI (human-computer interface) and CHI (computer-human interface) as the acronym du jour.   In some circles it is known as human-factors engineering, applied to software design.  There are several disciplines within this field, we&#8217;ll introduce each of them.</p>
<p>We talk about the different roles within this field in several posts throughout Tyner Blain.  The following are introductory explanations for these roles.</p>
<p><strong>Information Architecture (IA)<br />
</strong></p>
<p>The study of information and it&#8217;s presentation to people.  Also the study of how people interact with information.  Many software packages allow users to manage complex information.  Information can be presented in ways that make it easier for people to absorb and understand.</p>
<p>As a very simple example, imagine a website that allows you to research the cost of living in different cities in the USA.  There are thousands of cities in the country.  IA helps with designing a user interface that allows users to get information for a specific city.  An IA specialist would recognize that cities can be organized by state.  In fact, cities in different states can have the same name, like Springfield, Missouri and Springfield, Illinois.  But two cities within the same state won&#8217;t have the same name.  This insight can be applied to present a design where the user selects a state first, which then filters a list of the cities within that state.</p>
<p>A corporate internet may really be the combination of several different standalone websites &#8211; a company news bulletin or blog, an interface to the HR system, a download center for installing corporate-approved software, an email directory for the company, etc.  IA specialists will determine how to organize all of these functions so that employees can intuitively find what they need and get as much benefit out of the site as possible.</p>
<p><strong>Usability</strong></p>
<p>The study of what makes software easy to use or hard to use.  A usability specialist will look at the tasks that a user needs to perform, and analyze the most intuitive or efficient ways to perform them.  Think of the sequence of steps that you take when adding a graph of data in Microsoft excel.  There is a wizard that walks you through a series of questions in order to create the graph for you.  A usability specialist determined the best sequence in which to ask and answer those questions.<br />
Usability specialists will also make holistic assessments of how an application or suite of applications behave.  This helps users gain competence or mastery of software more quickly.  All of Microsoft&#8217;s applications use the same approach for opening and saving files (same menus, same shortcut keys, same dialogs, etc).  This is the result of usability analysis.</p>
<p>A usability specialist will also be the person who determines how to make software great for novice and experts alike.  This is critical to having successful software &#8211; the experts are the people who will promote your software for you, but they won&#8217;t become experts unless they survive the novice-user break-in period.</p>
<p><strong>Graphic (or Visual) Design</strong></p>
<p>Some people erroneously think of visual designers as the people who make software <em>sexy</em>.  The can certainly do that, but graphic design is as much about creating emotions for the users, consistency of presentation, and establishing elements of brand as it is about <em>sexy</em>. This is what makes a Macintosh look like a Macintosh (while usability specialists make it great to use).</p>
<p>A graphic designer can create a set of consistent icons that make an application feel professional, and make the user feel whatever the designer wants.  Graphic designers can make the user interface feel different enough to create a notion of uniqueness and branding (association of the images with the product or company), while also keeping them consistent enough with &#8220;everybody else&#8221; that users know what to do.  Another technique is to create an <em>affordance</em> visually.  An affordance is an image or element that suggests an action.  A dial says &#8220;turn me&#8221; while a slider says &#8220;slide me.&#8221;</p>
<p>This can be very subtle and very powerful.</p>
<p><img title="boring scrollbar" alt="boring scrollbar" src="http://sehlhorst.smugmug.com/photos/58467648-M.png" /></p>
<p>Think about scrollbars for a second.  Most scrollbars have a pretty boring look.  There are tiny up and down arrows at the top and bottom &#8211; which create an affordance that says &#8220;click on me and the window will move up (or down).  That&#8217;s good design.  There&#8217;s also a grey bar in the middle.  In some user interfaces, the size of that bar is proportional to the amount of the content that is currently visible.  This gives the user some insight into how much content is hidden &#8211; another good visual design.  A user can also  click and drag the grey bar up and down to move the contents of the window.  There are no visible cues that this would work, a user would have to be shown that this works.  Another example of &#8220;hidden&#8221; functionality is the ability to click in the light grey &#8220;background&#8221; of a scrollbar &#8211; it causes the contents of the window to page up or page down.  Again, without training or an errant click, people would not know this.</p>
<p><img title="cool scrollbar" alt="cool scrollbar" src="http://sehlhorst.smugmug.com/photos/58467655-M.png" /></p>
<p>If we make a tiny change to that scrollbar by adding a few lines in the center, we create a tactile effect &#8211; implying that the user can &#8220;grab&#8221; it with the mouse.  This scrollbar screams &#8220;grab me&#8221;.  Subtle, but powerful.</p>
<p><strong>Interaction Design</strong></p>
<p>Interaction Designers are a different breed.  They focus on the software at a higher level, using <a title="Interaction Design Process Overview" href="http://tynerblain.com/blog/2006/03/21/interaction-design-process-overview/">a goal-driven process</a> to focus on the intent and objectives of the users.</p>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation Series</em> posts</a> which will be updated whenever new posts are added.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+User+Experience+Disciplines+http://bit.ly/19lw6V+" 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/03/foundation-series-user-experience-disciplines/&amp;t=Foundation+Series%3A+User+Experience+Disciplines" 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/03/foundation-series-user-experience-disciplines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Unit Testing of Software</title>
		<link>http://tynerblain.com/blog/2006/01/19/foundation-series-unit-testing-software/</link>
		<comments>http://tynerblain.com/blog/2006/01/19/foundation-series-unit-testing-software/#comments</comments>
		<pubDate>Fri, 20 Jan 2006 03:14:52 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[black box testing]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[grey box testing]]></category>
		<category><![CDATA[greybox testing]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[system testing]]></category>
		<category><![CDATA[system tests]]></category>
		<category><![CDATA[unit testing]]></category>
		<category><![CDATA[unit tests]]></category>
		<category><![CDATA[white box testing]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/01/19/foundation-series-unit-testing-software/</guid>
		<description><![CDATA[Testing software is more than just manually banging around (also called monkey testing) and trying to break different parts of the software application. Unit testing is testing a subset of the functionality of a piece of software. A unit test is different from a system test in that it provides information only about a particular subset of the software. In our previous Foundation series post on black box and white box testing, we used the inspections that come bundled with an oil change as examples of unit tests.]]></description>
			<content:encoded><![CDATA[<p><img title="Requirements class students" alt="Requirements class students" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<h2>What are unit tests?</h2>
<p><img title="monkey at keyboard" alt="monkey at keyboard" src="http://sehlhorst.smugmug.com/photos/53113926-M.jpg" /></p>
<p>Testing software is more than just manually banging around (also called monkey testing) and trying to break different parts of the software application.  Unit testing is testing a subset of the functionality of a piece of software.  A unit test is different from a system test in that it provides information only about a particular subset of the software.  In our previous <a title="Introduction to whitebox and blackbox testing" href="http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/"><em>Foundation series</em> post on black box and white box testing</a>, we used the inspections that come bundled with an oil change as examples of unit tests.</p>
<h2>Unit tests don&#8217;t show us the whole picture.</h2>
<p>A unit test only tells us about a specific piece of information.  When working with a client who&#8217;s company makes telephone switches, who&#8217;s internal software development team did not use unit tests we discussed the following analogy:<br />
Unit tests let us see very specific information, but not all of the information.  Unit tests might show us the following:</p>
<p><img alt="bell" title="bell" src="http://sehlhorst.smugmug.com/photos/53110507-M.jpg" /></p>
<p>A bell that makes a nice sound when ringing.</p>
<p><img alt="dial" title="dial" src="http://sehlhorst.smugmug.com/photos/53110502-M.jpg" /></p>
<p>A dial that lets us enter numbers.<br />
<img alt="horn" title="horn" src="http://sehlhorst.smugmug.com/photos/53110491-M.jpg" /></p>
<p>A horn that lets us listen to information.</p>
<p>We learn a lot about the system from these &#8220;pictures&#8221; that the unit tests give us, but we don&#8217;t learn everything about the system.</p>
<p><img alt="phone" title="phone" src="http://sehlhorst.smugmug.com/photos/53110434-M.jpg" /></p>
<p>We knew (ahead of time) that we were inspecting a phone, and with our &#8220;unit tests&#8221; we now know that we can dial a phone number, listen to the person on the other end of the line, and hear when the phone is ringing.  Since we know about phones, we realize that we aren&#8217;t &#8220;testing&#8221; everything.  We don&#8217;t know if the phone can process sounds originating at our end.  We don&#8217;t know if the phone will transmit signals back and forth to other phones.  We don&#8217;t know if it is attached to the wall in a sturdy fashion.</p>
<p>Unit testing doesn&#8217;t seem like such a good idea &#8211; there&#8217;s so much we <em>need</em> to know that these unit tests don&#8217;t tell us.  There are two approaches we can take.  The first is to combine our unit tests with <em>system tests</em> which inspect the entire system &#8211; also called <em>end to end tests</em>.  The second is to create enough unit tests to inspect all of the important aspects.  With enough unit tests, we can characterize the system (and know that it is a working phone that meets all of our requirements).</p>
<p><img title="old phone with unit tests" alt="old phone with unit tests" src="http://sehlhorst.smugmug.com/photos/53116316-M.jpg" /></p>
<p>Software developers can identify which parts of their software need to be tested.  In fact, this is a key principal of <a title="Understanding TDD" href="http://tynerblain.com/blog/2006/09/12/insight-into-tdd/">testing-driven development (TDD)</a> &#8211; identify the tests, then write the code.  When the tests pass, the code is done.</p>
<h2>Why not use system tests?</h2>
<p>The system test inspects (or at least exercises) everything in the software.  It gives us a big picture view.  Ultimately, our stakeholders care about one thing &#8211; <em>does the software work?</em>  And for them, that means everything has to work.  The intuitive way to test, then, is to have tests that test everything.  System testing is also known as functional testing.<br />
<img alt="old phone" title="old phone" src="http://sehlhorst.smugmug.com/photos/49199461-M.jpg" /></p>
<h2>These <em>comprehensive</em> tests tell us everything we want to know.  Why don&#8217;t we use them?</h2>
<p><strong>  </strong></p>
<p>There is a downside to system testing.  In the long run, it&#8217;s more expensive than unit testing.  But the right way to approach <a title="Foundation Series on Continuous Integration" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">continuous integration</a> is to do both kinds of testing.</p>
<p>In our <a title="Software testing series - white box testing vs black box testing" href="http://tynerblain.com/blog/2006/01/13/software-testing-series-black-box-vs-white-box-testing/"><em>Software testing series</em> post on blackbox and whitebox testing</a> we discuss several tradeoffs associated with the different types of testing.  For most organizations, the best answer is to do both kinds of testing &#8211; do some of each.  This is known as greybox testing, or grey box testing.</p>
<p>System tests are more expensive, because they are more brittle and require more maintenance effort to keep the tests running.  The more your software changes, the faster these costs add up.  Furthermore, with Agile practices, where portions of the system are built and tested incrementally, with changes along the way, system tests can be debilitatingly expensive to maintain.</p>
<p>Because unit tests only inspect a subset of the software, they only incur maintenance costs when <em>that subset</em> is modified.  Unit testing is done by the developers, who write tests to assure that sections of the software behave as designed.  This is different from functional testing, that assures that the overall software meets the requirements.<br />
There are more articles on software testing in our <a title="Software testing series introduction" href="http://tynerblain.com/blog/2006/01/10/software-testing-series-introduction/">software testing series</a>.<br />
- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Unit+Testing+of+Software+http://bit.ly/ssbcf+" 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/19/foundation-series-unit-testing-software/&amp;t=Foundation+Series%3A+Unit+Testing+of+Software" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/tt-facebook-big4.png" alt="Post to Facebook" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/01/19/foundation-series-unit-testing-software/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Black Box and White Box Software Testing</title>
		<link>http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/</link>
		<comments>http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/#comments</comments>
		<pubDate>Thu, 12 Jan 2006 20:13:40 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Polls]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[black box]]></category>
		<category><![CDATA[black box test]]></category>
		<category><![CDATA[black box testing]]></category>
		<category><![CDATA[blackbox]]></category>
		<category><![CDATA[clear box test]]></category>
		<category><![CDATA[clear box testing]]></category>
		<category><![CDATA[clearbox]]></category>
		<category><![CDATA[clearbox testing]]></category>
		<category><![CDATA[gray box tests]]></category>
		<category><![CDATA[graybox testing]]></category>
		<category><![CDATA[grey box testing]]></category>
		<category><![CDATA[grey box tests]]></category>
		<category><![CDATA[greybox testing]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[unit test]]></category>
		<category><![CDATA[white box]]></category>
		<category><![CDATA[white box test]]></category>
		<category><![CDATA[white box testing]]></category>
		<category><![CDATA[whitebox]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/</guid>
		<description><![CDATA[Blackbox tests and whitebox tests.
These terms get thrown about quite a bit. In a previous post, we referenced Marc Clifton's advanced unit testing series. If you were already familiar with the domain, his article could immediately build on that background knowledge and extend it.

Software testing can be most simply described as "for a given set of inputs into a software application, evaluate a set of outputs." Software testing is a cause-and-effect analysis.]]></description>
			<content:encoded><![CDATA[<p><img src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /></p>
<h2>Blackbox tests and whitebox tests.</h2>
<p>These terms get thrown about quite a bit.  <a href="http://tynerblain.com/blog/2005/12/16/marc-clifton%e2%80%99s-advanced-unit-testing-articles/">In a previous post, we referenced Marc Clifton&#8217;s advanced unit testing series</a>.  If you were already familiar with the domain, his article could immediately build on that background knowledge and extend it.Software testing can be most simply described as &#8220;for a given set of inputs into a software application, evaluate a set of outputs.&#8221;<br />
Software testing is a <em>cause-and-effect analysis</em>.</p>
<p><span id="more-66"></span></p>
<p>The inputs can be user actions, data from external systems, or any combination of the two.</p>
<p>The outputs can be outputs on the computer screen, data output to a file (like a log or report), a communication with other computers (like web services responses), or any other <span style="font-style: italic">change in state</span> of the system.</p>
<p>As an example of simple inputs and outputs, a calculator program has the requirement: &#8220;Allow user to calculate the result of dividing one number by another, non-zero number.&#8221;  If a/b=c, the inputs would be the dividend (a) and the divisor (b).  The outputs would be the quotient (c).</p>
<p>As an example of <em>change in state </em>as an output, consider a requirement: &#8220;After the user logs in, the system will make future decisions based upon that user&#8217;s predefined preferences.&#8221;  For that requirement, an input would be &#8220;logged-in user id&#8221; and an output (or change in state) would be &#8220;system loads user&#8217;s preferences.&#8221;</p>
<h2>Black box testing</h2>
<p>Black box testing is a stimulus-response analysis of behavior.  To run (or define) a black box test, we don&#8217;t need to know <span style="font-style: italic">anything</span> about how the software works.  We provide it with a stimulus (user selects &#8220;advanced search&#8221; button) and inspect for a response (advanced search page input form is presented to the user).<img src="http://sehlhorst.smugmug.com/photos/51928637-M.jpg" /><br />
In biology class, we performed black box tests on dead frogs.  We hooked up electrodes to their legs and applied current.  The legs kicked.  We didn&#8217;t know anything about how the frogs worked, or we were told that the muscles would respond to small electrical currents by contracting.  And we didn&#8217;t need to know.  We just <em>tested</em> the frogs.</p>
<p>With a calculator program, we don&#8217;t need to know the hoops that the cpu jumps through to calculate the quotient.  We don&#8217;t need to wonder if the program is written in php or python or c++.  All we need to do is inspect the output for a given set of inputs.</p>
<p>This highlights the <strong>primary benefit of black box testing</strong>: a system can be tested by someone with no knowledge of how it works.</p>
<p>This allows us to more easily find people capable of testing our software &#8211; the pool of available people with the skills to keep track of what they input and what they output is <em>much</em> larger than that of people who understand the stuff &#8220;under the hood&#8221;.  It also saves our testers from having to learn <em>how</em> it works &#8211; they can start testing immediately.</p>
<p>When a team is organized with a dedicated testing (only) staff, the tests they create are typically black box tests &#8211; because the team can be staffed more cost effectively.</p>
<p>Blackbox tests are sometimes referred to as <em>opaque</em> tests or <em>closed-box tests</em>.  They are sometimes also referred to as <em>behavioral tests</em> &#8211; in that they only test the behavior of the system, not how (or how well) it is constructed.</p>
<h2>White box testing</h2>
<p>A white box test is one that requires insight into <em>how the code is implemented</em>.  The test takes advantage of understanding the data structures or flows to provide specific information about <em>how the code is working</em> as an output of the test.</p>
<p><img title="inspection machine" alt="inspection machine" src="http://sehlhorst.smugmug.com/photos/51916332-M.jpg" /></p>
<p>White box tests are also sometimes called <em>clear-box tests</em> or <em>structural tests</em> because they can provide insight into how the code is performing.</p>
<p>When you take your car for a state inspection test, it is a black-box test.  The overall performance (breaking distance, emissions levels, no sharp edges, etc) is inspected.  When you take your car for an oil change, you usually get a set of white-box test results (air-filter cleanliness check, coolant mixture analysis).  These pieces of detailed information (coolant at 60% mix) don&#8217;t tell you if the car is &#8220;good&#8221; &#8211; but they give you insight into how it&#8217;s running.</p>
<p>Unit testing, or testing a subset of the functionality of a piece of software can use black box or white box testing, but is most commonly done using white box tests.  A unit test is a test that provides a piece of specific information (like coolant mix, or testing a connection to a database, or the speed of a SQL query), without neccessarily making a statement about the overall quality of the software or system.</p>
<p>The <strong>primary benefit of white box testing</strong> is that you can use insight of how the software is constructed to efficiently test it.  This testing efficiency comes from having the ability to target specific areas of the code for testing, and also allows more efficient selections of tests to run.  The weakness of white box testing is that it requires knowledge of how the software is written in order to design the appropriate tests.  Another weakness is that misinterpretation of the requirements can result in <a title="Passing the wrong whitebox tests" href="http://tynerblain.com/blog/2006/03/30/passing-the-wrong-whitebox-tests/">whitebox tests of the wrong functionality</a>.</p>
<p>When a team is organized so that developers are responsible for testing their own code, they are more likely to incorporate white box tests, and more specifically unit tests.  There are efficiencies to using these types of tests, making the development process easier.</p>
<h2>Grey box testing</h2>
<p>When we combine black box and white box tests in the same test suite, we get what is called grey box testing, or greybox testing.  This systematic approach to testing allows us to combine the benefits of both blackbox testing and whitebox testing in the same test suite.</p>
<h2>Test automation</h2>
<p>Both black box and white box tests can be automated.  Different tools and techniques are applied for the different types of tests, but both are feasible and common.  <a title="Foundation Series on Continuous Integration" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">Continuous integration</a> is a development process that leverages test automation to reduce costs and improve quality.</p>
<p>There are more articles on software testing in our <a title="Software testing series introduction" href="http://tynerblain.com/blog/2006/01/10/software-testing-series-introduction/">Software Testing Series</a>.</p>
<h2>What book should I read to learn more?</h2>
<p><a title="Link to the ebook at Amazon" href="http://www.amazon.com/exec/obidos/ASIN/0672327988/tynerblain-20">Software Testing, by Ron Patton</a>.</p>
<p>Here&#8217;s a review from Randy Rice &#8220;Software Testing Consultant &#038; Trainer&#8221; (Oklahoma City, OK)</p>
<blockquote><p>Software Testing is a book oriented toward people just entering or considering the testing field, although there are nuggets of information that even seasoned professionals will find helpful. Perhaps the greatest value of this book would be a resource for test team leaders to give to their new testers or test interns. To date, I haven?t seen a book that gives a better introduction to software testing with this amount of coverage. Ron Patton has written this book at a very understandable level and gives practical examples of every test type he discusses in the book. Plus, Patton uses examples that are accessible to most people, such as basic Windows utilities.</p>
<p>I like the simplicity and practicality of this book. There are no complex formulas or processes to confuse the reader that may be getting into testing for the first time. However, the important of process is discussed. I also have to say a big THANK YOU to Ron Patton for drawing the distinction between QA and testing! Finally, the breadth of coverage in Software Testing is super. Patton covers not only the most important topics, such as basic functional testing, but also attribute testing, such as usability and compatibility. He also covers web-based testing and test automation ? and as in all topics covered in the book, Patton knew when to stop. If you want to drill deeper on any of the topics in this book, there are other fine books that can take you there!</p>
<p>I love this book because it is practical, gives a good introduction to software testing, and has some things that even experienced testers will find of interest. This book is also a tool to communicate what testing and QA are all about. This is something that test organizations need as they make the message to management, developers and users. No test library should be without a copy of Software Testing by Ron Patton!</p></blockquote>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation Series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Black+Box+and+White+Box+Software+Testing+http://bit.ly/110mmH+" 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/12/foundation-series-black-box-and-white-box-software-testing/&amp;t=Foundation+Series%3A+Black+Box+and+White+Box+Software+Testing" 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/12/foundation-series-black-box-and-white-box-software-testing/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Structured Requirements</title>
		<link>http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/#comments</comments>
		<pubDate>Thu, 05 Jan 2006 05:19:37 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[business requirement]]></category>
		<category><![CDATA[foundation]]></category>
		<category><![CDATA[functional requirement]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[karl wiegers]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[non-functional requirement]]></category>
		<category><![CDATA[requirements management]]></category>
		<category><![CDATA[structure requirements]]></category>
		<category><![CDATA[structured requirements management]]></category>
		<category><![CDATA[use cases]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/01/04/foundation-series-structured-requirements/</guid>
		<description><![CDATA[
Karl Wiegers wrote the book on structured requirements &#8211; Software Requirements, 2nd Edition, Karl E. Wiegers.
If you are involved in managing requirements, you should own this book.  Even if you don&#8217;t follow his approach to managing requirements, or don&#8217;t like how he deals with use cases, you should still read this book &#8211; at [...]]]></description>
			<content:encoded><![CDATA[<p><img title="classroom" src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" alt="classroom" /></p>
<p>Karl Wiegers wrote <em>the</em> book on structured requirements &#8211; <a title="The best book on structured requirements" href="http://www.amazon.com/exec/obidos/ASIN/0735618798/tynerblain-20?creative=327641&amp;camp=14573&amp;link_code=as1">Software Requirements, 2nd Edition, Karl E. Wiegers.</a></p>
<p>If you are involved in managing requirements, you should own this book.  Even if you don&#8217;t follow his approach to managing requirements, or don&#8217;t like <a title="Formal use cases" href="http://tynerblain.com/blog/2005/12/20/use-case-series-formal-use-case/">how he deals with use cases</a>, you should still read this book &#8211; at a minimum, you&#8217;ll know more about it than your pointy-haired boss who reads this blog, sees this post, and tells you that you must follow the Wiegers way.</p>
<p>He details his framework, tells you how to use it, and how to manage requirements in it.  Karl also has a website, <a title="Karl Wiegers' website" href="http://www.processimpact.com/">processimpact.com</a>, chock full of resources.</p>
<p>Karl proposes that there are three distinct levels of requirements</p>
<ol>
<li><strong>Business requirements </strong>- Goals of the business like &#8220;increase profits&#8221;, &#8220;improve branding&#8221;, &#8220;become dominant in a market&#8221;</li>
<li><strong>User requirements</strong> &#8211; Goals or tasks of the users of software like &#8220;create purchase order&#8221;, &#8220;find a book my wife would like&#8221;</li>
<li><strong>Functional requirements</strong> &#8211; Functionality that the software must include like &#8220;calculate profit-maximizing price&#8221; or &#8220;generate Sarbanes-Oxley compliance report&#8221;</li>
</ol>
<p>He also classifies these requirements as either being functional or non-functional.</p>
<p><strong>Functional </strong>requirements describe <em>what</em> the system must do.</p>
<ul>
<li>Provide a history of transactions for auditing purposes</li>
<li>Enable users to listen to samples of the music on the CD</li>
</ul>
<p><strong>Non-functional</strong> requirements constrain <em>how</em> the system must do it.</p>
<ul>
<li>Most relevant search results will be returned in under 5 seconds</li>
<li>System will be available 99% of the time between 9 AM and 7 PM Eastern time</li>
</ul>
<p>Karl then presents these types of requirements with a structured classification.  His structure shows different types of requirements <em>driving</em> other types of requirements.  In the picture below, we would see that a business requirement (increase profits) <em>drives</em> a user requirement (define product prices) which drives a functional requirement (calculate profit-maximizing price).</p>
<p><img title="Wiegers taxonomy of requirements" src="http://sehlhorst.smugmug.com/photos/51101899-M.jpg" alt="Wiegers taxonomy of requirements" /></p>
<p>I believe a simplified version of this diagram (which is a simplified version of a diagram from page 9 of his book) makes it easier to introduce the concepts.</p>
<p><img title="Simplified structural requirements taxonomy" src="http://sehlhorst.smugmug.com/photos/51102709-M.jpg" alt="Simplified structural requirements taxonomy" /></p>
<p>In a presentation to a class at St. Edwards University last fall, I presented the following single slide.</p>
<p><img title="Types of requirements slide" src="http://sehlhorst.smugmug.com/photos/51104388-M.jpg" alt="Types of requirements slide" /></p>
<p><strong>Summing it all up</strong></p>
<p><em>Goals </em>are achieved through <a title="Use Case Series Introduction" href="http://tynerblain.com/blog/2005/12/18/use-case-series-introduction/">use cases</a>.</p>
<p><em>Use cases</em> are enabled by <a title="Writing Functional Requirements to Support Use Cases" href="http://tynerblain.com/blog/2006/02/10/writing-functional-requirements-to-support-use-cases/">functional requirements</a>.</p>
<p><em>Functional requirements</em> lead to design and implementation.</p>
<p><a title="Non-Functional Requirements List" href="http://tynerblain.com/blog/2006/05/05/non-functional-requirements-list/"><em>Non-functional requirements</em></a> characterize how functional requirements must work.</p>
<p><em>Constraints </em>restrict how functional requirements may be implemented.</p>
<p><strong>[Update 2007/02/26]</strong></p>
<p>I&#8217;ve refined my thinking about how structured requirements should be represented.  In short, I feel that non-functional requirements are under-emphasized in the real world.  I proposed a modified view of structured requirements, designed to increase the level of attention given to non-functional requirements. I go into more detail in the article, <a title="Stressing the Importance of Non-Functional Requirements" href="http://tynerblain.com/blog/2006/05/23/non-functional-requirements-era/"><em>Non-Functional Requirements Equal Rights Amendment</em></a>.  Here&#8217;s the diagram of the structure that I proposed in that article:</p>
<p><img title="Better Structured Requirements Framework" src="http://sehlhorst.smugmug.com/photos/71264266-M.jpg" alt="Better Structured Requirements Framework" /></p>
<p>- &#8211; -</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation Series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Structured+Requirements+http://bit.ly/U8EmP+" 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/04/foundation-series-structured-requirements/&amp;t=Foundation+Series%3A+Structured+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/01/04/foundation-series-structured-requirements/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Foundation Series: Software Process (Waterfall Process versus Incremental Process)</title>
		<link>http://tynerblain.com/blog/2006/01/03/foundation-series-software-process-waterfall-process-versus-incremental-process/</link>
		<comments>http://tynerblain.com/blog/2006/01/03/foundation-series-software-process-waterfall-process-versus-incremental-process/#comments</comments>
		<pubDate>Tue, 03 Jan 2006 06:13:49 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Foundation series]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[budgeting]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[incremental]]></category>
		<category><![CDATA[iterative development]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[planning software]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[software delivery]]></category>
		<category><![CDATA[software development framework]]></category>
		<category><![CDATA[software process]]></category>
		<category><![CDATA[Software Reviews]]></category>
		<category><![CDATA[tyner blain]]></category>
		<category><![CDATA[tynerblain]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/01/03/foundation-series-software-process-waterfall-process-versus-incremental-process/</guid>
		<description><![CDATA[
A software process is the set of activities required to create software.  This process can be defined with very precise steps, roles and responsibilities.  The process can also be defined with a more fluid set activities in pursuit of concrete, high level objectives.  Or software can be created without explicitly defining or [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://sehlhorst.smugmug.com/photos/50445724-M.jpg" /><br />
A software process is the set of activities required to create software.  This process can be defined with very precise steps, roles and responsibilities.  The process can also be defined with a more fluid set activities in pursuit of concrete, high level objectives.  Or software can be created without explicitly defining or following any process at all.  The steps are always present, even if not conciously managed or defined.</p>
<p>A common framework is needed to compare processes and their merits.  All software development includes the following three steps in some combination:</p>
<ol>
<li><strong>Decide what to do.</strong></li>
<li><strong>Do it.</strong></li>
<li><strong>Deliver it.</strong></li>
</ol>
<p>It sounds like an overly simplified list; Decide, Develop, Deliver.  We’ll see that it isn’t.</p>
<p><img src="http://sehlhorst.smugmug.com/photos/50673779-M.jpg" /></p>
<p><strong>Different process styles are like different dance styles.</strong></p>
<p>Different processes will put different levels of emphasis and effort into each step.  Each processes may repeat steps, or take them in a different order.</p>
<p>We can think of each different process as a different style of dance.  They are alike and unalike.  There are people who prefer one style to another, and there are specialists in one style and generalists across styles.</p>
<p>For any particular song, some styles of dance are intuitive and comfortable while others are awkward.  The same is true of applying a software process to a given development scenario.</p>
<p>What works for a global team on a multi-year enterprise software project may not work well for a start-up creating a consumer website.  The process that works best for an engineering firm developing embedded software for a pace maker may be a nightmare to apply to an open-source project for creating an RSS reader.</p>
<p>Software processes are usually categorized as waterfall or iterative &#8211; although I first heard these categories from proponents of iterative processes (the “new” way) when they were getting a lot of press in the late 90’s.  Bias aside, the analogy works.</p>
<p><img src="http://sehlhorst.smugmug.com/photos/50674355-M.jpg" /></p>
<p><strong>Waterfall process</strong><br />
A waterfall process is one where all of the work is done by the team, and when it is complete, it is delivered to their customer(s).  With a waterfall, the water doesn’t do anything useful until after it falls off the end of the cliff &#8211; and by then it’s too late to climb out of the barrel if you change your mind.  You don’t know if you’ll hit a rock until you reach the bottom of the waterfall.  The larger the waterfall, the larger the risk, and the bigger the mess if you do hit a rock.</p>
<p>The same is true for waterfall software processes &#8211; we decide what to do, we develop the solution, and then we deliver it.  We don’t revisit our decisions.  Once the decisions are made, we’re in the barrel and falling, and we won’t know if our software will succeed until after we deliver it.  The risk of failure is proportional to the amount of money and time spent before delivering the software to our customer.</p>
<p><img src="http://sehlhorst.smugmug.com/photos/50675110-M.jpg" /></p>
<p><strong>Incremental process</strong><br />
An incremental process is one where we will deliver portions of the software in the smallest reasonable subsets of the ultimate functionality.  We will have multiple deliveries to our customer.  We will revisit the assumptions and prioritizations for each “next” delivery when we complete each “previous” delivery.</p>
<p>A sailing analogy works well for this approach.  To sail in a straight line from start to finish, we set a heading, H1, and begin sailing.  After a period of time, we check to see where we are (invariably, we’ve drifted off course a little), correct our course and set a new heading, H2, and continue sailing.  We keep doing this (checking position, adjusting heading, sailing some more) incrementally until we reach our destination.</p>
<p>With incremental software development, we do the same thing as when sailing.  First we decide on what to do and what to do first.  Then we develop and deliver the first set of functionality.  We then revisit our decisions (including getting feedback on what we’ve just delivered) and decide what to do next.  We then develop and deliver the next set of functionality.  We repeat until all of the desired functionality has been delivered.</p>
<p><img src="http://sehlhorst.smugmug.com/photos/50675610-M.jpg" /></p>
<p><strong>Which process is best?</strong><br />
Picking the best process, like picking the best dance depends on circumstances.  Let’s look at a few “real world” factors that can drive our decisions.</p>
<p><strong>Budgeting and planning (winner: waterfall process)</strong><br />
With a waterfall process, we decide at the start exactly what we intend to accomplish.  We can therefore scope and schedule the project.  We can also determine staffing and costs.  Budget decisions are easy &#8211; IRR and <a title="Definition of ROI" href="http://tynerblain.com/blog/2006/02/01/definition-of-roi-return-on-investment/">ROI</a> can be calculated &#8211; we can calculate <a title="Definition of Expected Value" href="http://tynerblain.com/blog/2006/02/03/definition-of-expected-value/">expected values</a> for both costs and (forecasted) benefits.  With an iterative process, we’re saying “I reserve the right to change my mind later.”  We fully expect to change the scope of delivery mid-project.  We know we will learn more about how to forecast the benefits after each incremental release.  Because we know about, and even desire future changes, we can’t reasonably estimate ROI.  We can “fix” the budget (aka timebox the project), but we can’t predict the value we will achive within the time allotted.</p>
<p><strong>Return on investment (ROI) (winner: incremental process)</strong><br />
<a title="Two Big Benefits of Incremental Delivery" href="http://tynerblain.com/blog/2006/04/18/two-big-benefits-of-incremental-delivery/"> Incremental processes</a> get the nod for return on investment because they start creating value earlier.  Imagine software that can be delivered in two releases, where each release provides features that generate $10,000 per month in value.  Each release takes 6 months.  With waterfall delivery, there will be no value creation until after 12 months &#8211; and then it will generate $20,000 per month.  <a title="Why Incremental Delivery is Good" href="http://tynerblain.com/blog/2006/02/01/why-incremental-delivery-is-good/">With incremental delivery</a>, the first release will generate $10,000 per month from month 6 to month 12, and then it will generate $20,000 per month for the next 12 months.  The extra value from incremental delivery is the $60,000 earned from the first release while the second release is being developed.</p>
<p><strong>Delivering a subset of functionality (winner: it depends)</strong><br />
Some projects can’t tolerate partial delivery.  A pace maker that only regulates pulse, but can’t be recharged is not useful.  However, an RSS reader without archiving can be released now with feed-reading, and updated in the next release to include archiving.  Many times we run into users who say things like “Until it does everything, I won’t use it.”  This is most common when replacing a legacy application.  Users are accustomed to a particular workflow, and have expectations about what they should be able to do.  Change management is the discipline that focuses specifically on helping users manage changes in the way they do their work, and the tools they use to do it.  We can often help users make a transition, even from a legacy system, in incremental steps.  When we can’t, a waterfall style delivery is usually better.  The key thing to remember about incremental delivery is that the increments are as small as possible &#8211; which may mean “deliver it all in the first release.”</p>
<p>Are there other factors that we’ve overlooked?  Add a comment and tell us about them.</p>
<p>Check out the index of the <a title="Index of background topics in requirements and software" href="http://tynerblain.com/blog/foundation-series-index/"><em>Foundation  Series</em> posts</a> for other introductory articles.</p>
<p align="left"><a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/home/?status=By+@sehlhorst:+Foundation+Series%3A+Software+Process+%28Waterfall+Process+versus+Incremental+Process%29+http://bit.ly/l9gPp+" 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/03/foundation-series-software-process-waterfall-process-versus-incremental-process/&amp;t=Foundation+Series%3A+Software+Process+%28Waterfall+Process+versus+Incremental+Process%29" 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/03/foundation-series-software-process-waterfall-process-versus-incremental-process/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
