<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>You Want IT When?</title>
	
	<link>http://www.yuwantitwhen.com/blog</link>
	<description>Practical methods for successful software management.</description>
	<pubDate>Sun, 16 Nov 2008 06:25:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<geo:lat>40.740662</geo:lat><geo:long>-73.486314</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-nd/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/YouWantItWhen" type="application/rss+xml" /><feedburner:emailServiceId>1059408</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FYouWantItWhen" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FYouWantItWhen" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FYouWantItWhen" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.rojo.com/add-subscription?resource=http%3A%2F%2Ffeeds.feedburner.com%2FYouWantItWhen" src="http://blog.rojo.com/RojoWideRed.gif">Subscribe with Rojo</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/YouWantItWhen" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FYouWantItWhen" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FYouWantItWhen" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FYouWantItWhen" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>The Old School Manifesto</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/449121987/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/11/10/the-old-school-manifesto/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 04:08:31 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Headline]]></category>

		<category><![CDATA[Methodology]]></category>

		<category><![CDATA[Leadership]]></category>

		<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=349</guid>
		<description><![CDATA[As we saw in the last essay, the 80:20 rule seemingly appears in many circumstances.   When I was attending college and working as a programmer during the 80's, there were some commonly accepted tenets that guided our software development processes and behaviors. ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.yuwantitwhen.com/blog/wp-content/uploads/basil-church.jpg"><img class="size-thumbnail wp-image-351 alignnone" title="basil-church" src="http://www.yuwantitwhen.com/blog/wp-content/uploads/basil-church-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>As we saw in the last essay, the 80:20 rule seemingly appears in many circumstances.   When I was attending college and working as a programmer during the 80&#8217;s, there were some commonly accepted tenets that guided our software development processes and behaviors. </p>
<ul>
<li>80% of development effort for a product is spent in maintenance, while only 20% is devoted towards delivering the first release.</li>
<li>It is many times more costly to remedy a defect in the later phases of the SDLC than in the earlier phases.<span id="more-349"></span></li>
</ul>
<p>We didn&#8217;t question these beliefs much because they were commonly accepted as true.  Our own experiences supported these beliefs as well.  I&#8217;ve spent 80+% of my career maintaining software while the amount of time devoted to delivering a first release has been small.  I bet most of you reading this can say the same thing.  Entirely new product development, where you start from a blank slate, is rare in this business.</p>
<h2>80% Maintenance</h2>
<p>Think about it: how often do you purchase an entirely new application?  Most of my software purchases are for the newest release of a product that I already own.  Maybe I&#8217;m a Troglodyte, but I haven&#8217;t purchased an entirely  new application  in many years. I have, though, upgraded to the latest version of many applications within the last year.</p>
<p>In the enterprise space, many projects are about upgrading to the latest version of the Windows OS, Oracle Database, Apache web server, or ERP application, to name a few.  Even in the software product development space, less effort is devoted to rolling out entirely new tools and libraries than effort devoted to upgrading to the latest version of tools and libraries that you already own and use.</p>
<p>Some may say yes, but being first in a space has many advantages.  Does it?  Who remembers VisiCalc?  Turbo Pascal?  Netware?  Netscape?  CPM? There are litanies of firsts that are distant memories.  There&#8217;s an advantage to being second in a space.  Google in Search, Microsoft in browsers and office applications, and Dell in Personal Computers are a few examples where being 2<sup>nd</sup>, 3<sup>rd</sup>, or later to market was not a disadvantage in their eventual success and market domination.</p>
<p>Realizing that 80+% of development effort is devoted to maintenance, the old school developers organized their processes and priorities accordingly.  Being first is rarely the most important objective.  While being first has it&#8217;s virtues, dominating your market is a higher priority, and too often the compromises made to succeed at being  first compromises your ability to dominate the market.</p>
<h2>The Old School Manifesto</h2>
<p>Here&#8217;s what the old school programmers and leaders emphasize in their application development efforts:</p>
<ul>
<li><strong>Creating a lasting architecture over quick construction of the first build.</strong> When done successfully, this saves time, improves quality, and improves time to market not only for the first release but for each successive release.</li>
<li><strong>Understanding the customer value over doing what the customer tells you.</strong> Very often, real customers don&#8217;t know exactly what they want nor do they know what&#8217;s possible. Customers are sometimes too busy to tell you what it is that they want. It is the development team&#8217;s responsibility to understand the need and to use their knowledge and intelligence to create a superior solution. If you&#8217;re expecting your customers to tell you everything, you aren&#8217;t the team to be building the next thing.</li>
<li><strong>Emphasizing the up front work over constructing something quickly.</strong> Devote 60% of your effort to the upfront work, requirements and design; because when you do it successfully, the last 40% is a no brainer.</li>
<li><strong>Thinking before acting over acting before thinking.</strong> God gave us intelligence for a purpose. Understanding, prioritizing, strategizing, and planning support success.</li>
<li><strong>Analysis over just-jump-right-in-and-do-something.</strong> It always saves time, money, and heartache.</li>
<li><strong>Believing that if an error happens in the lab once your customers will see it many times, over rebooting the machine and hoping it never happens again.</strong> I know; many defects are difficult to analyze and fix. I&#8217;ve worked through many nights addressing difficult defects. Just do it. Eventually difficult defects become easy to analyze and fix, but first you must invest to get there.</li>
<li><strong>Doing superior work over doing just enough.</strong> Superior work inspires good people, and motivates not so good people to perform better. I know just enough is fashionable today, but fashionable is just a passing trend.</li>
<li><strong>Quality over hitting a date.</strong> If quality made Japan the top auto manufactures of the world while being 2<sup>nd</sup> to market, it must be telling us something. Listen carefully!</li>
<li><strong>The future over the present.</strong> Developing a product is an investment in the future. Investments are rewarding when good decisions about the future are made in the present.</li>
<li><strong>Change management over change anytime. </strong>Change is a fact of life. We get old; we move; things change. Making good decisions about change is necessary for repeatable success. Most changes are not reactions to changing markets but reactions to the leadership&#8217;s change in thinking. This too often reflects inadequate analysis.</li>
<li><strong>Teamwork over individuals. </strong>Individuals come and go in an organization but teams remain. Teamwork is the hallmark of a successful product team. Process is a manifestation of good teamwork. Good teamwork is greater than the sum of its parts. It&#8217;s through teamwork that superior products are made and delivered. Value the team and the process that supports teamwork.</li>
<li><strong>Value over commitments.</strong> The ultimate goal of every project is to deliver value. Meet your commitments without delivering value, and all you&#8217;ll have is a failed project.</li>
</ul>
<h2>Think About It</h2>
<p>It&#8217;s become fashionable today to live in the present: just look at the debt our society carries from corporations, to individuals, and to governments.   All are carrying unprecedented amounts of debt.  We act and live today like there will be no tomorrow or that tomorrow doesn&#8217;t matter.   Would the worldwide financial crisis have materialized if corporate leaders concerned themselves with tomorrow?  When you concern yourself with tomorrow, the present is normally better as tomorrow unfolds into the present.  At the root of old school values was the idea that we are all working to build a better tomorrow?  It&#8217;s time that our culture reaffirms that commitment.  Don&#8217;t you think?</p>
<p>What would you add or change in the <em>old school manifesto </em>?</p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=dpuEik"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=dpuEik" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=2O4wN"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=2O4wN" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=5VbzN"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=5VbzN" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=3Sesn"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=3Sesn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=kjR1N"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=kjR1N" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=m9pjn"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=m9pjn" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/449121987" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/11/10/the-old-school-manifesto/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/11/10/the-old-school-manifesto/</feedburner:origLink></item>
		<item>
		<title>What Methodology Do You Follow?</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/444944014/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/11/06/what-methodology-do-you-follow/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 01:20:29 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Methodology]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[Traditional]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=342</guid>
		<description><![CDATA[I'm curious to know what software process methodology the readers of my material practice.   If you would, please take the poll and share your experiences with a comment.  In the comment if you can answer the following questions, it would be greatly appreciated.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m curious to know what software process methodology the readers of my material practice.   If you would, please take the poll and share your experiences with a comment.  If you can answer the following questions with a comment, it would be greatly appreciated.</p>
<ol>
<li>If you are following one of the Agile methodologies, are you satisified with your results?  If not, where is it failing you?</li>
<li>What do you find to be the best aspect of the methodology that you follow?</li>
<li>If you could change one thing about the way your team practices software development, what would you change?</li>
</ol>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=4rpgzg"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=4rpgzg" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=fdoTN"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=fdoTN" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=vPMZN"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=vPMZN" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=JjiDn"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=JjiDn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=2PC2N"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=2PC2N" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=ucmOn"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=ucmOn" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/444944014" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/11/06/what-methodology-do-you-follow/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/11/06/what-methodology-do-you-follow/</feedburner:origLink></item>
		<item>
		<title>Pareto Principle (80:20 Rule) and Quality</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/429272472/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/10/22/pareto-principle-8020-rule-and-quality/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 04:59:10 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Quality]]></category>

		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=338</guid>
		<description><![CDATA[Erik Peterson presents on the 80:20 rule at a Google Talk, which you can view on YouTube.com.  He explains how to use the 80:20 rule to improve the quality of your testing with the benefit of delivering high quality software products.]]></description>
			<content:encoded><![CDATA[<p>You&#8217;re probably are familiar with many of the claims supported by the 80:20 rule.  There are many:</p>
<ul type="disc">
<li>80% of the sales are closed by 20%.</li>
<li>80% of the code on a project is written by 20% of the staff.  </li>
<li>80% of the processor execution time is spent in 20% of the processor&#8217;s instructions.</li>
<li>80% of your customers use only 20% of your application features. </li>
<li>80% of your defects are in 20% of your code.</li>
</ul>
<p>Erik Peterson presents on the 80:20 rule at a Google Talk, which you can view on YouTube.com.  He explains how to use the 80:20 rule to improve the quality of your testing with the benefit of delivering high quality software products.<span id="more-338"></span></p>
<h2>History</h2>
<p>The 80:20 rule was first demonstrated by Joseph Juran.  The 80:20 rule says that 80% of the effects come from 20% of the causes.  It&#8217;s an indicative trend supported by observation and experimentation. </p>
<p>The principal was coined by Joseph Juran, a management consultant noted his focus on quality.  He named it after an Italian Economist, Vilfredo Pareto who observed that 80% of the wealth in Italy was owned 20% of the population.</p>
<p>IBM was able to use this insight with great effect when they found that 80% of the execution time was spent in 20% of the instructions.  With this information IBM optimized those 20% instructions giving them a competitive performance edge.  Apparently IBM treated this as a closely guarded secret.</p>
<h2>What exactly is it?</h2>
<p>Mr. Peterson explains that in Cricket the sweet spot on the bat is where the minimum effort maximizes return.  It&#8217;s that small area, the 20% area, on the bat that will catapult the ball the furthest with minimal effort from the batter. It&#8217;s what makes professional athletes as they are able to connect the ball with that small area of the bat more often then the amateur.  Identifying the sweet spot, that small area on the bat, is what Pareto Analysis is all about.</p>
<p>Pareto Analysis is the study of the main causes/classifications of something to link them to the properties in the results.  The objective is to establish the relationship between causes and results.</p>
<h2>7 step process</h2>
<p>A graph is used to perform Pareto Analysis.  There are 7 steps performed in the analysis to identify the most important causes. </p>
<ol>
<li>Build a table listing the causes and their frequency as a percentage.</li>
<li>Arrange the rows in the decreasing order of importance of the causes (i.e, the most important cause first).</li>
<li>Add a cumulative percentage column to the table</li>
<li>Plat with causes on the x-axis and cumulative percentage on y-axis.</li>
<li>Join the above points to form a curve.</li>
<li>Plot (on the same graph) a bar graph with causes on the x-axis and percent frequency on the y-axis.</li>
<li>Draw line at 80% on y-axis parallel to x-axis. Then drop the line at the point of intersection with the curve on x-axis. This point on the x-axis separates the important causes (on the left) and trivial causes (on the right)</li>
</ol>
<h2>Example Behavior</h2>
<p>How many Peanut characters did Charles Schulz introduce into his Peanuts cartoons? A survey was conducted where people where asked to name their favorite Peanut character.  The results of the survey unsurprisingly followed the classic 80:20 rule where 80% of the total favorite votes were for 20% of the characters: Snoopy, Charlie Brown, and Linus.  The answer to the beginning question is that there were 54 named characters in the cartoons. </p>
<h2>Agile and the 80:20 Rule</h2>
<p>Conceptually the Agile paradigm is based on the 80:20 where the objective is to deliver the most important features first. If those features are identified well, it is likely that only a small percentage of the universe of features will satisfy 80% of your customers.</p>
<p>I plan to discuss more about the Agile relationship in a future posting.</p>
<h2>Testing and the 80:20 Rule</h2>
<p>In 1976 Glenford Myers recommended writing test cases before you execute them, and he observed that defects cluster.   Based on this observation, he recommended pausing what you are doing and writing more tests for where you are finding bug clusters.  In addition he found the following:</p>
<ul type="disc">
<li>80% of the defects come from 20% of the modules.</li>
<li>50% of the modules are defect free at system test.</li>
<li>10% of the modules are responsible for 90% of the system downtime.</li>
</ul>
<h2>Implications</h2>
<ul>
<li>1) Defects are where you are finding them. If you are finding defects in an area, there are more there.</li>
<li>2) Detailed tests are not required for all functionality.</li>
<li>3) Sweet spots are where a majority of the defects are. Find the sweet spots, develop more tests in those areas, and test them more.</li>
<li>4) 10% of the modules are responsible for 90% of system downtime.</li>
</ul>
<p>As Beck would recommend, look for code smells.  Bugs are where you smell them.</p>
<h2>How to Find Code Smells?</h2>
<p>Unfortunately, you won&#8217;t find the Pareto relationships until you start testing.  It&#8217;s essentially a feedback loop, but there are ways to be proactive:</p>
<ul type="disc">
<li>Identify features/functionality by risk and develop more tests there.</li>
<li>Concentrate your testing on new features or complicated areas.</li>
</ul>
<p>As any QA professional knows, often developers aren&#8217;t very helpful with identifying these areas.  Erik recommends looking at the checkout records.  Where there are more checkouts the risk of defects is likely higher. </p>
<p>Alternatively, focus on the areas the customers use most of the time and make them really usable.  Most defects will go unnoticed by customers where the user experience is superior. </p>
<h2>Prioritize on Feature Use</h2>
<p>Test where the users spend most of their time.  Microsoft apparently uses approach to deliver their products, and in my experience with great effect (see <a href="http://www.crn.com/security/18821726">Microsoft&#8217;s CEO: 80-20 Rule Applies to Bugs, Not Just Features</a>).   I rarely experience a defect in Microsoft&#8217;s desktop applications; the operating system is another story, however.</p>
<p>I would sometimes wonder how Microsoft could deliver such high quality in their office products.   In hindsight it&#8217;s quite obvious how they achieve it.  I suspect that I&#8217;m like most Office users; I use 5% of the functionality 98% of the time. </p>
<p>If they get that 5% correct, most customers rarely experience a defect.  Interestingly, when I think of the times where I did notice a defect in the Office products, it is when I use a tangential feature like mail merge in Word.</p>
<h2>Summary</h2>
<p>The 80-20 rule, when applied to testing, can have great effect on your quality and user experience.  In product delivery environments where there is constant pressure to deliver faster, applying the 80-20 rule helps to prioritize your efforts and makes it possible to deliver faster while satisfying a majority of your customers.  While our culture has embraced faster is always better, this is one tool to help identify your priorities with improved product success.</p>
<p>Watch the presentation.  It&#8217;s very good.</p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=Yz49FL"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=Yz49FL" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=NUTVM"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=NUTVM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=GP6IM"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=GP6IM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=FyDWm"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=FyDWm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=JdAwM"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=JdAwM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=mIvzm"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=mIvzm" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/429272472" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/10/22/pareto-principle-8020-rule-and-quality/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/10/22/pareto-principle-8020-rule-and-quality/</feedburner:origLink></item>
		<item>
		<title>Objectives of Soak Testing</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/412513910/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/10/06/objectives-of-soak-testing/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 06:00:49 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Headline]]></category>

		<category><![CDATA[Quality]]></category>

		<category><![CDATA[Test Strategy]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=272</guid>
		<description><![CDATA[Soak testing is the practice of exercising an application continuously under automated test with the primary objective of uncovering defects.  In my experience, it's the best practice for delivering reliable applications: applications that never seem to crash or exit abruptly]]></description>
			<content:encoded><![CDATA[<p><img style="float: left; margin-right: 5px;" src="http://www.yuwantitwhen.com/blog/wp-content/uploads/soak.jpg" alt="" width="117" height="175" />Soak testing is the practice of exercising an application continuously under automated test with the primary objective of uncovering defects.  In my experience, it&#8217;s the best practice for delivering reliable applications: applications that never seem to crash or exit abruptly.</p>
<p>Similar to hardware fatigue, software exhibits fatigue under continuous usage as well.  For example, a memory leak in an application that runs for a very short time wouldn&#8217;t have any consequences.  However, after eight continuous hours of usage, a memory leak could render the application in operable.</p>
<p><span id="more-272"></span></p>
<h2>Objectives of Soak Testing</h2>
<p>Soak testing achieves a number of quality objectives by surfacing errors that would normally go undetected with simple usage.  By achieving these objectives, it is possible to release applications with unmatched quality in your market niche.</p>
<h3>Memory</h3>
<p>A memory leak of 20 bytes per minute isn&#8217;t easily detected after a few minutes.  It&#8217;s not easily detected after an hour with only a little over 1k of leakage, but after 24 hours, it&#8217;s becoming obvious that memory is allocated without being freed.  </p>
<p>For some applications a 24K memory leak over a 24 hour period may be okay.  However, it&#8217;s not just the heap that you may be concerned about.  In early versions of the Windows Operating System, the number of windows, brushes, and fonts that you could create was limited to 64K as the User and GDI data segments were limited to 64K each. </p>
<p>If your application is leaking window handles and GDI handles, your application could exhaust the available memory to create a new window or font long before the heap is exhausted.  Not only does this adversely impact your application, it also adversely impacts any of the other applications running at the same time. </p>
<p>As I recollect, exiting the application did not automatically free up these objects, so applications having these errors would eventually degrade performance of the operating system, and a reboot would be required to correct the condition.</p>
<p>While this is no longer a concern for the current Windows operating systems, it may be a problem for other third party libraries that you may be using in your application.</p>
<h3>Race Conditions</h3>
<p>Soak testing uncovers <a href="http://en.wikipedia.org/wiki/Race_condition">race conditions</a>.  A race condition is an error in a calculation due to the sequence or timing of execution in multithreaded applications.  Continuous execution of an application raises the probability that the erroneous sequence is repeated many times.  Through repeated occurrences, it becomes possible for the software team to detect the condition.</p>
<h3>Deadlocks</h3>
<p>Soak testing uncovers <a href="http://en.wikipedia.org/wiki/Deadlock">deadlocks</a>. In its simplest form, a deadlock is a symptom of a multithreaded application where two threads are waiting on each other to relinquish a resource before either one can continue to execute.  Deadlocks often require the right conditions to exist before they surface.   Through continuous execution over long periods of time, the probability of the deadlock condition being established increases.</p>
<h3>Uninitialized Variables</h3>
<p>Uninitialized variables are another source of unstable applications.  In particular, an uninitialized pointer can reveal itself in many ways.  If the uninitialized value points within the application data segment, using the pointer will corrupt the values of other global variables resulting in strange application behavior.</p>
<p>Sometimes this may manifest itself as a code exception when an unitialized pointer happens to point to the return address on the stack and the value is changed.  This happens to be a more difficult error to analyze.</p>
<p>Or in other instances, the value points outside the data segment and the application will terminate with a memory exception.  This form of a memory exception is actually the easiest manifestation of this problem to analyze and correct.</p>
<h3>Performance Degradation</h3>
<p>There are many manifestations of performance degradation.  Continuous execution flushes out many of them.  The most common sources of performance degradation are inefficient memory usage, throughput bottlenecks, and inefficient collection management.</p>
<ul type="disc">
<li><strong>Inefficient Memory Usage - </strong>There are a number of ways this can manifest itself in an application: usually it involves a lot of unnecessary copying of data.  In some applications, the amount of memory copied to perform an operation may grow with repeated execution.</li>
<li><strong>Throughput bottlenecks -</strong> In real-time applications where data is constantly processed, data will back up when data arrives faster than it is processed.  If the application operates for only a short period of time, it can easily go unnoticed.</li>
<li><strong>Inefficient collection management </strong>- There&#8217;s nearly always some sort of data management in an application that makes the use of collections, whether it&#8217;s an array, a hash table, or linked list.  For some applications, these collections may build to appropriately large numbers of elements.  It&#8217;s then that you come to learn that the search algorithms or even the collection is the wrong solution for this problem.</li>
</ul>
<h2>Summary</h2>
<p>Soak testing is the only reliable technique that I&#8217;m aware of for surfacing the class of application defects formerly described.  The objective of soak testing is not to assess the correctness of the application; it&#8217;s not to assess whether feature requirements have been correctly satisfied.  The objective of soak testing is surface defects that will impair application reliability.</p>
<p>Include soak testing as part of your test strategy along with quality release criteria to realize a dramatic improvement in the quality of your product releases.</p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=voN3jv"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=voN3jv" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=lBgNM"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=lBgNM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=HxD6M"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=HxD6M" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=rAlZm"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=rAlZm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=8OqaM"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=8OqaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=aINxm"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=aINxm" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/412513910" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/10/06/objectives-of-soak-testing/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/10/06/objectives-of-soak-testing/</feedburner:origLink></item>
		<item>
		<title>Software Metrics: A Software Example</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/393835933/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/09/15/software-metrics-a-software-example/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 04:01:35 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Featured]]></category>

		<category><![CDATA[Metrics]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=210</guid>
		<description><![CDATA[Software metrics, when used properly, is a tool for measuring the project not individuals; it's a tool for controlling project deliverables, assessing and communicating status, and making better decisions.]]></description>
			<content:encoded><![CDATA[<p><img style="float: left; margin-right: 5px;" src="http://yuwantitwhen.com/blog/wp-content/images/odometer.jpg" alt="" width="175" height="116" /></p>
<blockquote><p>You cannot control what you cannot measure.<br />
- Tom DeMarco (Software Engineer)</p></blockquote>
<p>How does the software community improve the control over managing our software development projects?  Ken Schwaber in &#8220;<a href="http://www.amazon.com/gp/product/0130676349?ie=UTF8&amp;tag=yowaitwh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0130676349">Agile Software Development with SCRUM</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=yowaitwh-20&amp;l=as2&amp;o=1&amp;a=0130676349" border="0" alt="" width="1" height="1" />&#8221; suggests that the only way to control software development with so much complexity and unpredictability is with an empirical process control model.</p>
<p><span id="more-210"></span></p>
<blockquote><p>Tunde told me the empirical model of process control, on the other hand, expects the unexpected.  It provides and exercises control through frequent inspection and adaptation for processes that are imperfectly defined and generate unpredictable and unrepeatable outputs.  He recommended I study this model and consider its application to the process of building systems.</p></blockquote>
<p style="padding-left: 60px;">&#8211; Ken Schwaber, <a href="http://www.amazon.com/gp/product/0130676349?ie=UTF8&amp;tag=yowaitwh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0130676349">Agile Software Development with SCRUM (Series in Agile Software Development)</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=yowaitwh-20&amp;l=as2&amp;o=1&amp;a=0130676349" border="0" alt="" width="1" height="1" /></p>
<p>I happen to agree with Ken&#8217;s position on the need for an empirical approach to software process control.  While so much of what is offered by the Agile community is presented as new, the basis of CMM(I) is empirical.  Not only does CMM(I) require empirical control of the software project itself, it requires empirical analysis of the process as well.  Metrics are the basis for all process improvement and project control in the CMM(I) paradigm.</p>
<h2>Background</h2>
<p>It was during my first experience with CMM(I) process improvement in 1998 when the value of software metrics became apparent to me.  It happened quite accidentally.  I was neutral on the process that we developed based on CMM(I), but I was determined to be a good soldier and give it my support; after all, the company had invested a great deal of money in this initiative.  The least that I could do is to try my best to make it work.  And that&#8217;s when the light turned on for me to empirical process control.</p>
<p>CMM(I) identifies two requirements that helped me to arrive at this insight: the basis of estimating is to first estimate the size and then to transform size into duration with a productivity rate; the second requirement is to track completed size as well as completed time. </p>
<p>Before this, I did not have the tools to accurately and reliably understand how well the project was progressing to schedule.</p>
<h2>Why Measure Size?</h2>
<p>When you contrast completed size against completed time, problems light up like a Christmas tree.   For example, if completed size on a project is 25% and completed time is 75%, the schedule problem is obvious.  When project management is done well, it&#8217;s all about frequent inspection and adaptation, and as Tunde explained to Schwaber, this is the basis for the exercise of control over software projects.  </p>
<p>Tracking with metrics identifies incorrect estimating assumptions early, and consequently, it gives you, the project manager, the control to deliver on the release with no changes in commitments even when the project estimates are incorrect.  That&#8217;s the power of an empirical process control model. </p>
<p>My reservation with Scrum is that the fidelity of the empirical model is low.  You&#8217;ve probably experienced it on your software projects. One of the developers on an assignment informs the team that they are done with one of the deliverables.  Two weeks later, the developer continues working on the assignment.  The right metrics will confirm when done is done.</p>
<p>Scrum&#8217;s low fidelity is a consequence of only measuring effort remaining.  Measuring both effort and size is analogous to measuring distance to a distant object using the <a href="http://en.wikipedia.org/wiki/Parallax">parallax</a> method of measurement.  Measuring the base angles of the triangle is only an interesting observation, but when you add the distance between the base angles, you have the missing information to precisely measure the distance to that distant object.  Similarly, when you contrast completed effort against completed size, you have the necessary information to make accurate inferences about your project&#8217;s status with respect to schedule.</p>
<p>In this essay, I&#8217;ll explain one aspect of an empirical model that demonstrates the 6-point process described in my previous essay &#8220;<a href="http://www.yuwantitwhen.com/blog/2008/08/18/software-metrics-an-example-approach">Software Metrics: An Example Approach</a>.&#8221;</p>
<h2>Project Conditions </h2>
<ul>
<li>You&#8217;ve estimated 600 defects to find and fix for a six-month project delivery. </li>
<li>The project is 8 weeks away from delivery with 600 defects having been found and with only 200 defects left to fix. 400 defects have already been fixed.</li>
<li>To reserve time for the unexpected, the manager sets a target to complete fixing the 200 remaining defects in 6 weeks.</li>
<li>There are 10 developers on the project assigned to defect fixing.</li>
<li>Project history calibrates average defect fix rate at 1 defect per 1.5 staff days.  <em>Just in case this concerns some readers, this average includes defects that take 10 or more staff days to fix as well as ones that take only hours to fix.  If there are enough defects, we only need to concern ourselves with the mean as the <a href="http://en.wikipedia.org/wiki/Law_of_large_numbers">Law of Large numbers</a> tells us that the team will perform at the expected value, which is the mean.</em></li>
<li>To keep the example simple for illustrative purposes, the total required defects to fix remains constant during the 6 week period, and developers do not introduce new defects with their fixes, and they fix defects correctly the first time.  While this never happens in practice, introducing these variables into the example unnecessarily complicates the presentation.</li>
</ul>
<h2>Apply the Six Step Process</h2>
<ol type="1">
<li><strong>Identify what done looks like with an objective measure.</strong>
<ol type="a">
<li>Inform the team that they have six weeks to fix 200 defects.</li>
</ol>
</li>
<li><strong>Break the big goal into smaller goals.  </strong>
<ol type="a">
<li>To achieve the release goal, the team needs to fix 34 defects a week. </li>
</ol>
</li>
<li><strong>Give the team physical productivity goals.  </strong>
<ol type="a">
<li>I like to give stretch goals, so I&#8217;ll ask the team to fix 40 defects for the week.</li>
<li>It&#8217;s also important to give individual goals because team success is based on individual success.  To fix 40 defects in a week, each developer needs to work towards fixing 4 defects for the week.</li>
<li>Here&#8217;s an example of what I&#8217;ll say to the team:  &#8220;I&#8217;d like each developer to target fixing 4 or more defects a week. I realize some of you may have a difficult defect and fix only 1 or even none, and others will have very easy defects and fix 10 or more.  We aren&#8217;t being measured on our productivity as individuals, but on our productivity as a team.  If you exceed your individual target but we fail our team target, we failed as a team and individuals.  If we all shoot to exceed our target, the team will easily have achieved the required target of fixing 34 defects a week to deliver on time.&#8221;</li>
</ol>
</li>
<li><strong>Measure physical progress towards done.</strong>
<ol type="a">
<li>At the end of the week, count how many defects were fixed.  For this example, the team was successful in fixing 38 defects in the past week.</li>
</ol>
</li>
<li><strong>Communicate to the team the physical progress towards done and what production is remaining to achieve done.</strong>
<ol type="a">
<li>Last week we were successful in fixing 38 defects.  We are ahead of our goal.  We have 5 weeks left to fix 162 defects. </li>
</ol>
</li>
<li><strong>Repeat starting at step 2 until the overall objective has been achieved. </strong></li>
</ol>
<p>As is often the case in a real project, additional defects are discovered during this 6 week period, and defects are reopened as they are not fixed correctly.   As a consequence, analysis of the metrics will likely indicate that the original goal cannot be met. In this case at step five, the team needs to make some choices: </p>
<ul type="disc">
<li>Defer defects to a future release.</li>
<li>Add more engineers to the project for defect fixing.</li>
<li>Extend the release date.</li>
</ul>
<p>Once the team has decided on a course of action, a new goal is established, and the process repeats beginning at step 1. </p>
<h2>Benefits of the Process</h2>
<ul type="disc">
<li><strong>Everyone on the team knows exactly what is expected of them to achieve success.</strong>  Consequently, team members focus more acutely on their deliverables for the week and guard themselves from needless distractions during the day.  People are more productive when they know what&#8217;s expected of them.  Having measurable targets enhances communication of expectations.</li>
<li><strong>Team members are more satisfied in their work. </strong> Having clear and specific goals is motivating to individuals.  Having clear and objective project status is satisfying to the team and to management.</li>
<li><strong>There&#8217;s more collaboration since the only goal that matters is the team goal.</strong>  It&#8217;s in the interest of team members to help each other to achieve the team goal.</li>
<li><strong>Status reporting is more accurate, and you can give status with more confidence.</strong>  It&#8217;s blatantly obvious when productivity is not tracking to schedule.  For example, if only 60 defects are fixed in total after the first two weeks, it&#8217;s obvious that team productivity will not complete the work on time unless something changes.</li>
<li><strong>Once a schedule problem is determined, analysis of the metrics gives you more certainty of what&#8217;s required to put the project back on schedule.  </strong>Following from the previous bullet, mean productivity for fixing a defect is established at 1.67 staff days.   With that input, the team can accurately decide on extending the target date, deferring defects, adding additional staff, or any combination of the former.</li>
</ul>
<p>It&#8217;s valuable to note when a data trend emerges, it&#8217;s rare for it to change - at least not significantly - so don&#8217;t expect the mean effort to fix a defect to improve significantly.  Expecting things to change is a sure way to miss the target because when you discover that nothing changed, you will have less time to apply corrective actions.</p>
<h2>Nothing Goes to Plan</h2>
<p>It is my experience for software projects to always estimate optimistically.  There always seems to be more work than planned, there always seems to be more defects than planned, and there always seems to be more time required to complete assignments than planned.</p>
<p>The strength of an empirical model of process control is when things don&#8217;t go as planned.  When more defects are found than planned, analyzing the metrics tells management there is a problem early, the extent of the problem, and what precise options are available to put the project back on schedule.</p>
<h2>Summary</h2>
<p>To apply the 6-step process successfully, the following data requirements must be met. </p>
<ul type="disc">
<li>The size of a deliverable must be estimated and measured.  The more granular the unit of size, the more control you will have over your schedule.  While I have my preference, any unit of size that is measurable works.</li>
<li>Effort must be calculated from size by dividing it by a productivity rate.</li>
</ul>
<p>Software metrics are often a controversial subject in the software industry.  I suspect because of the fear metrics will be misused to measure individuals: opposition to software metrics often revolves around the problem of individual productivity.  Software metrics, when used properly, is a tool for measuring the project not individuals; it&#8217;s a tool for controlling project deliverables, assessing and communicating status, and making better decisions.</p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=ZT2RA3"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=ZT2RA3" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=lO7hL"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=lO7hL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=UuLzL"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=UuLzL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=EQIvl"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=EQIvl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=tPzJL"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=tPzJL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=iqV3l"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=iqV3l" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/393835933" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/09/15/software-metrics-a-software-example/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/09/15/software-metrics-a-software-example/</feedburner:origLink></item>
		<item>
		<title>Upfront Analysis Saves Time</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/380491050/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/09/01/upfront-analysis-saves-time/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 14:00:36 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Methodology]]></category>

		<category><![CDATA[Analysis]]></category>

		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=168</guid>
		<description><![CDATA[Work smarter, not harder is common wisdom for solving difficult problems.  Analysis is the process of applying our knowledge intelligently to solve difficult problems. Upfront analysis saves time.  It's about working smarter, not harder.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.yuwantitwhen.com/blog/wp-content/uploads/tubes.jpg"></a><img style="float: left; margin-right: 5px;" src="http://yuwantitwhen.com/blog/wp-content/images/tubes.jpg" alt="" width="175" height="116" />He was one of the top software engineers of a talented team.  His assignment was to improve the throughput of our real-time adaptive performance monitoring algorithms.  It wasn&#8217;t going to be easy as the application was already processing messages at a high rate.</p>
<p>The application had processing throughput of approximately 1,000 400-byte messages per second. Our goal was to double it to approximately 2,000 messages per second.  When he completed the assignment, it was processing over 3,000 messages a second.</p>
<p><span id="more-168"></span></p>
<h2>Approach</h2>
<p>How did he do it?  Well&#8230;it didn&#8217;t start so smooth.  He dug right in, and that was the problem.  He knew the code base well, and he believed with a hunch, some experimentation, some feedback, and some refactoring that he could improve the throughput and reach the goal.</p>
<p>There was only one thing: it wasn&#8217;t working. After a few days, I asked him about his approach and where he believed the bottleneck to be.  He said that he tried a couple of ideas, but he didn&#8217;t get the improvements that he expected, and he had a few additional ideas to try.</p>
<p>I asked, &#8220;Ravi, why don&#8217;t you profile the code?  While I have no doubt that these areas need improving, you might be optimizing code that&#8217;s consuming only 5% of the overall processing, and optimizing those areas are not going to lead to the required solution.&#8221;  He understood, but he felt confident in his understanding of the code and his approach.</p>
<p>I allowed him to continue.  Ravi was a top gun.  Very few engineers could debug a UNIX stack dump and reverse engineer the Solaris OS like Ravi could.   His designs were solid, and his deliveries were always high quality.   He earned the opportunity to continue with his approach even though I wasn&#8217;t supportive of it, but there were limits.</p>
<p>Two weeks later, he was still working on it, and the performance improvement was only marginal.  I said, &#8220;Ravi, it&#8217;s time to profile the code.&#8221;  Reluctantly, he agreed.</p>
<h2>The Application</h2>
<p>Some technical details of the application would be helpful at this point.</p>
<p>The application was a network performance monitoring application. It performed passive surveillance of the edge network nodes.  It was a multi-tiered, distributed application using CORBA as the middleware technology.  The language was C++, and it was deployed on Sun/Solaris equipment.</p>
<h2>Upfront Analysis</h2>
<p>It took about a day to prepare the environment and the application for performance monitoring.  After a couple of runs, it was obvious what processing required optimization.</p>
<p>Once the message was received from the edge devices at the data receiver, the application parsed and transformed the network message into an application message object and forwarded it to the upstream processes.  The performance bottleneck was with the marshalling of this object.  As the message object moved from each distributed process, this expensive marshalling was repeated multiple times, and it consumed a significant percentage of the overall processing of the message.</p>
<h2>Solution</h2>
<p>The solution was quite simple: reformat the message into a byte array: essentially, &#8220;char Message[500];&#8221; was the only member of the message object.   Prior to the change, each field in the message had its own member variable.  The network message was reformatted  into the byte array to avoid the overhead of re-parsing the message as it made its way through the processing path, which was the original intent of the message object.</p>
<p>At the beginning of the byte array a field identifier, offset pair was inserted for each field in the message with the offset being an index from the beginning of the byte array to the location of the field data.  With a lookup and a simple cast, the data was easily extracted.</p>
<p>The overhead for marshalling the byte array was significantly less with CORBA.   With this approach, the performance more than tripled to processing over 3000 messages per second.</p>
<p>Finally, the duration required to profile, to analyze, to design, to code and to release the change into the next build took about 3 to 5 days. Had Ravi started with upfront analysis, he would have saved 2 weeks of effort, and upfront analysis arrived at a solution faster than the approach with no formal analysis.  None of the prior work provided any insight to this bottleneck and solution.  In fact, it was a surprise.</p>
<h2>Analysis is Hard</h2>
<p>Some of you may be saying well, this is quite obvious, but is it?  I&#8217;ve had similar scenarios repeated with other developers throughout the years.  Developers want to write code, but writing code is really the easy part of the programmer&#8217;s job. </p>
<p>The hard part is creating the model for the solution, identifying the objects, and their methods.  It&#8217;s the analysis and the design that&#8217;s the difficult part of software development. </p>
<p>Sure, not all problems are difficult to model, but the modeling is more difficult than the coding.  Any programmer can transform a good design into working code, but any programmer cannot transform a problem/requirement into a good model.</p>
<p>For example, making the code changes to fix a defect is the easy part.  It takes days - sometimes even months - of analysis to understand the root cause of a difficult defect.  Once the root cause is identified, the solution often only requires changes to a couple of lines of code or sometimes to add, subtract, or change a single character. </p>
<p>Writing code is easy.  It&#8217;s the understanding that&#8217;s the hard part;  it&#8217;s the transformation of a problem into a model that&#8217;s the difficult part. The code is simply the realization of that model and understanding.</p>
<h2>Simplicity</h2>
<p>One of the twelve <em><a href="http://agilemanifesto.org/principles.html">Principles behind the Agile Manifesto</a></em> is &#8220;Simplicity - the art of maximizing the amount of work not done - is essential.&#8221;  Many interpret this to mean skipping documentation and/or skipping upfront analysis and design - essentially skipping any manifestations of formalism.  </p>
<p>&#8220;The art of maximizing the amount of work not done&#8221; is best achieved by working smarter.  Achieving simplicity requires an investment in upfront analysis, and like all investments, they are rewarding when invested well.  </p>
<p>Having poor results with upfront analysis is not anymore evidence that upfront analysis should skipped than having poor code is evidence that coding should be skipped.  Analysis is essential to writing code.  Poor results with upfront analysis is simply evidence that you need to do analysis better.</p>
<h2>Summary</h2>
<p><em>Work smarter, not harder</em> is common wisdom for solving difficult problems.  Analysis is the process of intelligently applying our knowledge to solve difficult problems. Upfront analysis saves time.  It&#8217;s about working smarter, not harder.</p>
<p>In the case of the opening example, the savings from upfront analysis is 66% of the duration and effort.  To look at it another way, the required duration and effort without upfront analysis is indeterminate. For all I know, if Ravi had continued with his original approach, he may have continued to work on it for another two weeks or even more.</p>
<p>Skip upfront analysis if you must, but as Glen B. Alleman, author of <a href="http://herdingcats.typepad.com/">Herding Cats</a>, is fond of saying, &#8220;<strong>Don&#8217;t do stupid things on purpose.</strong>&#8220;</p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=ETwIim"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=ETwIim" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=SxiY1L"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=SxiY1L" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=qQnzTL"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=qQnzTL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=z2i4Rl"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=z2i4Rl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=hHbyiL"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=hHbyiL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=gZodTl"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=gZodTl" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/380491050" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/09/01/upfront-analysis-saves-time/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/09/01/upfront-analysis-saves-time/</feedburner:origLink></item>
		<item>
		<title>Good Design is Important</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/374919652/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/08/25/good-design-is-important/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 05:27:00 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=162</guid>
		<description><![CDATA[I just stumbled upon a blog posting by Chad Myers titled "Good Design is not Subjective."  It's hard for me to believe, but apparently this is a controversial subject in the software community today. ]]></description>
			<content:encoded><![CDATA[<p>I just stumbled upon a blog posting by Chad Myers titled &#8220;<a href="http://www.lostechies.com/blogs/chad_myers/archive/2008/08/18/good-design-is-not-subjective.aspx">Good Design is not Subjective</a>.&#8221;  It&#8217;s hard for me to believe, but apparently this is a controversial subject in the software community today.   The thrust of his position is that a good design is characterised by its ability to easily maintain and enhance while a bad design is characterised by its difficulty to maintain and enhance.  A bad design exhibits characteristics of rigidity, fragility, and immobility.  It&#8217;s an interesting article, and it is reminiscent of many of the themes advocated on this blog.  A good design is the essence of agility.   A good developer knows a good design when he sees it.  Read the article.  I&#8217;m sure you&#8217;ll like it.  The comment thread is interesting as well.</p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=tV80TM"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=tV80TM" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=IKMuFK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=IKMuFK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=UyZEXK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=UyZEXK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=6UJbRk"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=6UJbRk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=6PCbuK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=6PCbuK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=whMoGk"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=whMoGk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/374919652" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/08/25/good-design-is-important/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/08/25/good-design-is-important/</feedburner:origLink></item>
		<item>
		<title>Software Metrics: An Example Approach</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/368944620/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/08/18/software-metrics-an-example-approach/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 04:28:36 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Metrics]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=106</guid>
		<description><![CDATA[Jerry’s challenge with raising the target donations is similar to the challenges we face in estimating and delivering software projects on time.   He has no way to precisely estimate how much money he can raise in the 24-hour event, yet he has a target, and he always exceeds it.  Similarly on software projects, teams are asked to deliver a fixed set of requirements on a fixed date, but unlike Jerry, we are rarely successful in delivering everything on time.]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-108  alignleft" style="margin-bottom: 5px; margin-right: 5px;" title="dollar and Donation Box" src="http://www.yuwantitwhen.com/blog/wp-content/uploads/donate.jpg" alt="" width="200" height="300" /></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;">As a kid, I recall watching the Jerry Lewis Telethons.<span style="mso-spacerun: yes;">  </span>To my surprise, I understand that the Telethon continues to this day, but I haven’t watched one since I was a kid. The Telethons are always successful in reaching their goal, yet they only have a fixed amount of time to achieve it: 24 hours, if I recall correctly.<span style="mso-spacerun: yes;">  </span></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">The Telethon’s success in achieving its seemingly unreachable goal left an impression on me:<span style="mso-spacerun: yes;">  </span>I guess because our family was always cheering for Jerry to reach his goal towards this worthy cause, and he always managed to exceed it within the waning minutes of the event.<span style="mso-spacerun: yes;">  </span>There’s nothing like wresting victory from the jaws of defeat to leave an impression on someone.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> <span id="more-106"></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;">Jerry’s challenge with raising the target donations is similar to the challenges we face in estimating and delivering software projects on time.<span style="mso-spacerun: yes;">   </span>He has no way to precisely estimate how much money he can raise in the 24-hour event, yet he has a target, and he always exceeds it.<span style="mso-spacerun: yes;">   </span>For all we know, he may be given the target amount to raise, yet he is still successful in achieving the goal.<span style="mso-spacerun: yes;">  </span>Similarly on software projects, teams are asked to deliver a fixed set of requirements on a fixed date, but unlike Jerry, we are rarely successful in delivering everything on time.<span style="mso-spacerun: yes;">    </span></span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<h2 class="MsoNormal" style="margin: 0in 0in 0pt;">How Did Jerry Do It?</h2>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Whether Jerry was given a target or estimated the target, he was successful in achieving the goal.<span style="mso-spacerun: yes;">  </span>How did he do it?<span style="mso-spacerun: yes;">  </span>He did it by rigorous use of metrics.<span style="mso-spacerun: yes;">  </span>While I haven’t read anywhere about the technique that Jerry used, I’m certain from repeatedly watching the event that the technique I’m about to describe was instrumental in achieving and exceeding the goal.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<ul style="margin-top: 0in;" type="disc">
<li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in;"><span style="font-size: small; font-family: Times New Roman;"><strong>He clearly defined what done looked like.</strong><span style="mso-spacerun: yes;">  </span>It was to raise X amount of money in 24 hours. <span style="mso-spacerun: yes;">  </span>How many software projects clearly and objectively define what done looks like?</span></li>
<li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in;"><span style="font-size: small; font-family: Times New Roman;"><strong>He broke the larger goal into many smaller goals, repeatedly communicated the amount of money he needed to raise to achieve the smaller goal, and worked to secure the goal.</strong><span style="mso-spacerun: yes;">  </span>How many software projects similarly break the project into many smaller goals, regularly communicate measurable physical productivity required to deliver the smaller goal, and have the team work towards delivering the physical goal?</span></li>
<li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in;"><span style="font-size: small; font-family: Times New Roman;"><strong>He repeatedly asked the donors for exact amounts of money.</strong><span style="mso-spacerun: yes;">  </span>He’d often say something like, “I need 10 viewers to call in with $100 donations each in the next 5 minutes.”<span style="mso-spacerun: yes;">  </span>How many software projects request measurable productivity goals?</span></li>
<li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in;"><span style="font-size: small; font-family: Times New Roman;"><strong>He constantly measured how much he was accumulating towards his goal.</strong><span style="mso-spacerun: yes;">  </span>How many software projects closely track the progress of their projects by measuring physical percent complete?</span></li>
<li class="MsoNormal" style="margin: 0in 0in 0pt; mso-list: l1 level1 lfo1; tab-stops: list .5in;"><span style="font-size: small; font-family: Times New Roman;"><strong>He regularly communicated to his viewers the progress he was making towards his goal.</strong><span style="mso-spacerun: yes;">  </span>How many projects regularly communicate their status using metrics to the team?<span style="mso-spacerun: yes;">  </span>Often status is never fed back to the team members; instead, status is often only delivered to upper management.<span style="mso-spacerun: yes;">  </span>Status on software projects is rarely delivered using metrics.</span></li>
</ul>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<h2 class="MsoNormal" style="margin: 0in 0in 0pt;">Summary</h2>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">The process is simple:</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.75in; text-indent: -0.25in; mso-list: l0 level1 lfo2; tab-stops: list .75in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">1.</span><span style="font-family: &quot;Times New Roman&quot;;">     </span></span><span style="font-size: small;">Identify what done looks like with an objective measure.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.75in; text-indent: -0.25in; mso-list: l0 level1 lfo2; tab-stops: list .75in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">2.</span><span style="font-family: &quot;Times New Roman&quot;;">     </span></span><span style="font-size: small;">Break the big goal into many smaller goals.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.75in; text-indent: -0.25in; mso-list: l0 level1 lfo2; tab-stops: list .75in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">3.</span><span style="font-family: &quot;Times New Roman&quot;;">     </span></span><span style="font-size: small;">Give the team physical productivity goals.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.75in; text-indent: -0.25in; mso-list: l0 level1 lfo2; tab-stops: list .75in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">4.</span><span style="font-family: &quot;Times New Roman&quot;;">     </span></span><span style="font-size: small;">Measure the physical progress towards done.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.75in; text-indent: -0.25in; mso-list: l0 level1 lfo2; tab-stops: list .75in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">5.</span><span style="font-family: &quot;Times New Roman&quot;;">     </span></span><span style="font-size: small;">Communicate to the team the physical progress towards done and what production is remaining to achieve done.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.75in; text-indent: -0.25in; mso-list: l0 level1 lfo2; tab-stops: list .75in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">6.</span><span style="font-family: &quot;Times New Roman&quot;;">     </span></span><span style="font-size: small;">Repeat beginning at step 2 until the goal is achieved.</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;">Communication is paramount, and the communication is clearer with the use of metrics.<span style="mso-spacerun: yes;">  </span>With more precise communication, aided by metrics, goals are more easily achieved and even exceeded.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small; font-family: Times New Roman;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;">Some of you are likely saying, “software is different.”<span style="mso-spacerun: yes;">  </span>But is it really different?<span style="mso-spacerun: yes;">  </span>All software development projects produce lines of code, all projects find defects, and all projects fix defects.<span style="mso-spacerun: yes;">  </span>These variables are all easily estimable and measurable.<span style="mso-spacerun: yes;">  </span>I’ve seen and managed teams who have used this process to deliver on time, with high quality, and exceed customer expectations, and they do it with less stress, less overtime, and more team and individual satisfaction.  To realize the benefits of software metrics, first the software community has to free themselves from their irrational aversion to metrics &#8212; especially lines of code. </span></span> </p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=Oz07eG"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=Oz07eG" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=2aoBTK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=2aoBTK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=cCErrK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=cCErrK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=sXoOgk"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=sXoOgk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=euZ27K"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=euZ27K" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=iUvgEk"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=iUvgEk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/368944620" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/08/18/software-metrics-an-example-approach/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/08/18/software-metrics-an-example-approach/</feedburner:origLink></item>
		<item>
		<title>Don’t Code Yourself into a Corner</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/356262877/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/08/05/dont-code-yourself-into-a-corner/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 11:19:35 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<category><![CDATA[Analysis]]></category>

		<category><![CDATA[Upfront]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=83</guid>
		<description><![CDATA[Recently, when playing FreeCell to take my mind off an essay I was writing, a thought occurred to me: FreeCell illustrates the value of upfront analysis and design.  On a number of essays on yuwantitwhen.com, I've advocated that doing proper upfront analysis and design on our software projects is the best way to secure success for your projects and to shorten schedules.  Similarly, in FreeCell, I've won more games on the first try when I devoted more time to upfront analysis and developing a strategy.]]></description>
			<content:encoded><![CDATA[<p><img class=" alignleft" style="margin-left: 10px; margin-right: 10px;" title="freecell" src="http://www.yuwantitwhen.com/blog/wp-content/uploads/freecell.jpg" alt="freecell" width="240" height="178" /></p>
<p>I enjoy playing FreeCell.  It&#8217;s a form of stress release for me, sort of like smoking is to some.  Whenever I need a quick break or I&#8217;m looking to take my mind off of something, I&#8217;ll often play a game of FreeCell.  </p>
<p>FreeCell is a puzzle, requiring analysis and strategy to win.  They say every game is winnable, and I believe that it&#8217;s likely to be true.   Whenever I lose a game and I&#8217;m determined to win, I eventually win after repeated retries of the same game.</p>
<p>Recently, when playing FreeCell to take my mind off an essay I was writing, a thought occurred to me: FreeCell illustrates the value of upfront analysis and design.  On a number of essays on yuwantitwhen.com, I&#8217;ve advocated that doing proper upfront analysis and design on our software projects is the best way to secure success for our projects and to shorten schedules.  Similarly, in FreeCell I&#8217;ve won more games on the first try when I devoted more time to upfront analysis and developing a strategy.</p>
<p><span id="more-83"></span></p>
<h2>How to Play FreeCell </h2>
<p>For readers unfamiliar with the game, the objective is to discard all the cards in order starting with Ace to King for all suits.  The game is setup by distributing all the cards face up along eight columns.  Play begins by moving cards to the other columns, the temporary pile, or to one of the four discard piles.  To move a card to another column, the card being moved must be the next sequential card in descending order and must have the opposite color: for example, red must follow black and visa versa, so an 8 of diamonds (red) can only be placed on a column where the top card on the column is a 9 of spades (black) or 9 of clubs (black).   Only 4 cards can move to the temporary pile; any card can move there.  Cards can be removed from the temporary pile to any of the columns or to the discard piles.</p>
<p>The strategy is to move cards to other columns or the temporary pile to build the 4 discard piles in order beginning with Ace.  The game is won when you have moved all the cards to the discard piles, and the game is lost when you cannot move any cards to the temporary pile, to any column, or to any of the four discard piles.</p>
<h2>Approaches to Playing FreeCell</h2>
<p>There are two approaches to playing the game: one, evaluate only the moves that are currently available to you by only evaluating the top cards of each column or the cards in the temporary pile. Let&#8217;s refer to this approach as shallow analysis, or two, evaluate successive moves before deciding on a move.  Let&#8217;s refer to this approach as deep analysis.  While it is possible to win with shallow analysis throughout the game, the probability of winning is low.  I&#8217;ll often start a game with the first approach then after a few moves switch to the second approach to make the game more challenging.  I can&#8217;t recall ever winning a game without doing some amount of deep analysis.   Early deep analysis improves the odds of winning on the first attempt of a game.</p>
<h2>What FreeCell Teaches Us about Software Projects</h2>
<p>Here&#8217;s what the game of FreeCell teaches us about upfront analysis and design.</p>
<ol type="1">
<li><strong>Reworking (refactoring) is expensive and it lengthens schedules.</strong>  When I play using shallow analysis, it takes many more restarts of the game before I finally win it.  To win a game with less restarts - even zero restarts - the likelihood increases significantly with quality deep analysis before moving.  Similarly in software, schedules are shorter when the solution is well analyzed and designed before writing code, resulting in less rework or reimplementation.</li>
<li><strong>Anticipating the future results in less rework and reimplementation</strong>.  In FreeCell, evaluating only the first level moves before moving makes it more probable that you leave yourself with no possible moves later in the game.  A player can avoid being locked in a corner with deep analysis before moving.  Similarly a software team can avoid rework and reimplementation by anticipating future requirements or preferably by creating a design that is easily extensible.</li>
<li><strong>Winning every game of FreeCell on the first attempt is possible with deep analysis if it is true that every playing combination is winnable.</strong>  The most difficult upfront investment is on the first move.  It is the most difficult to analyze and to get correct, but if you desire the highest probability of winning &#8212; even certainty of winning &#8212; there is no shortcut to this upfront investment.   Similarly, in software the first release is the most difficult release to analyze.  It&#8217;s a blank sheet of paper.  The possibilities are seemingly infinite.  It&#8217;s not difficult because it&#8217;s a wrong approach; it&#8217;s difficult because it&#8217;s hard.  As in FreeCell, a project team improves their likelihood of success with enough upfront analysis and design.</li>
<li><strong>Starting a game with deep analysis results in faster analysis later.</strong> As a consequence of analyzing a game well, it becomes easier to make successive moves as the game evolves.  Similarly in software when an application is well designed, successive releases of that application become easier and faster.</li>
</ol>
<h2>Summary</h2>
<p>Modern approaches to software development advocate an evolving approach to software construction with shallow analysis as its principle.  They trade deep analysis in favor of faster delivery for today&#8217;s requirements.  While that approach may succeed in creating a quick first release (only if shallow analysis does not lock you in a corner in the first iteration), it is sure to require rework and reimplementation on future releases.</p>
<p>As in the game of FreeCell, upfront analysis and design improves the likelihood of delivering a successful software release.   Deep upfront analysis and design avoids rework and reimplementation, and consequently, it shortens project schedules.   If you are looking to improve the project team&#8217;s chance of success, shorten schedules, and control the budget, deep upfront analysis and design as demonstrated in the FreeCell analogy is a method for securing those objectives.</p>
<p>How much upfront analysis is enough you may ask?  It depends.  How important is it to hit your release date?  How important is it to deliver on budget?  How important is it to secure future releases?   To the degree that these objectives are important to your organization, you invest in enough upfront analysis and design to give yourself confidence commensurate with the importance of hitting your date, meeting your budget, and securing future releases. </p>
<p>This investment is not measured in time; it&#8217;s measured in the quality of analysis and design.   If the investment is too expensive, consider the alternative:  you are more likely to be late, over budget, and hamper future deliveries if you don&#8217;t invest.  Of course, not every project requires high certainty of hitting the date and the budget, and some products never have more than the first release.  For those projects, other approaches may be better.  But, know the tradeoff before you embark on your journey.</p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=sJuABT"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=sJuABT" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=1W5GQK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=1W5GQK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=rUBLaK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=rUBLaK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=zIE6Kk"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=zIE6Kk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=r5FnAK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=r5FnAK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=fvUQfk"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=fvUQfk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/356262877" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/08/05/dont-code-yourself-into-a-corner/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/08/05/dont-code-yourself-into-a-corner/</feedburner:origLink></item>
		<item>
		<title>The Role of Leadership in Software Development</title>
		<link>http://feeds.feedburner.com/~r/YouWantItWhen/~3/354916781/</link>
		<comments>http://www.yuwantitwhen.com/blog/2008/08/03/the-role-of-leadership-in-software-development/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 02:56:08 +0000</pubDate>
		<dc:creator>Bill Miller</dc:creator>
		
		<category><![CDATA[Video]]></category>

		<category><![CDATA[Leadership]]></category>

		<guid isPermaLink="false">http://www.yuwantitwhen.com/blog/?p=78</guid>
		<description><![CDATA[by Mary Poppendieck
Mary Poppendieck speaks at a Google TechTalk on the role of leadership in software development. She presents an interesting history on the philosophy of management and how it has morphed over the years to ...]]></description>
			<content:encoded><![CDATA[<h4>by Mary Poppendieck</h4>
<p>Mary Poppendieck speaks at a Google TechTalk on the role of leadership in software development. She presents an interesting history on the philosophy of management and how it has morphed over the years to its present day practices and theory.   Mary Poppendieck is the author of <a href="http://www.amazon.com/gp/product/0321150783?ie=UTF8&amp;tag=yowaitwh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321150783">Lean Software Development: An Agile Toolkit (The Agile Software Development Series)</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=yowaitwh-20&amp;l=as2&amp;o=1&amp;a=0321150783" border="0" alt="" width="1" height="1" /> and <a href="http://www.amazon.com/gp/product/0321437381?ie=UTF8&amp;tag=yowaitwh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321437381">Implementing Lean Software Development: From Concept to Cash (The Addison-Wesley Signature Series)</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=yowaitwh-20&amp;l=as2&amp;o=1&amp;a=0321437381" border="0" alt="" width="1" height="1" />.  She describes her Lean manufacturing experiences at 3M and how they relate to Agile Software development.</p>

<p><a href="http://feeds.feedburner.com/~a/YouWantItWhen?a=z1mmOT"><img src="http://feeds.feedburner.com/~a/YouWantItWhen?i=z1mmOT" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=YrZ68K"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=YrZ68K" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=A9ddJK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=A9ddJK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=vMoKnk"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=vMoKnk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=d8N7sK"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=d8N7sK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/YouWantItWhen?a=fH7g9k"><img src="http://feeds.feedburner.com/~f/YouWantItWhen?i=fH7g9k" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YouWantItWhen/~4/354916781" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.yuwantitwhen.com/blog/2008/08/03/the-role-of-leadership-in-software-development/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.yuwantitwhen.com/blog/2008/08/03/the-role-of-leadership-in-software-development/</feedburner:origLink></item>
	</channel>
</rss>
