<?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>George Dinwiddie's blog</title>
	<atom:link href="http://blog.gdinwiddie.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gdinwiddie.com</link>
	<description>Effective software development</description>
	<lastBuildDate>Sat, 13 Mar 2010 22:48:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Getting your money&#8217;s worth</title>
		<link>http://blog.gdinwiddie.com/2010/03/13/getting-your-moneys-worth/</link>
		<comments>http://blog.gdinwiddie.com/2010/03/13/getting-your-moneys-worth/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 19:35:30 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Sustainability]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=372</guid>
		<description><![CDATA[Everybody wants to get full value for their money.  I can pinch a penny as hard as the next guy, maybe harder.  But I&#8217;ve learned in many ways and many contexts, the very things I do to get more for my money, often result in actually getting less.  How can this happen?Let&#8217;s look at the [...]]]></description>
			<content:encoded><![CDATA[<p>Everybody wants to get full value for their money.  I can pinch a penny as hard as the next guy, maybe harder.  But I&#8217;ve learned in many ways and many contexts, the very things I do to get <em>more</em> for my money, often result in <em>actually getting less</em>.  How can this happen?<span id="more-372"></span>Let&#8217;s look at the case of time utilization of software developers.  In most organizations, developers are under pressure to work harder and produce more&#8211;no matter how hard they&#8217;re working or how much they&#8217;re producing now.  Many organizations expect overtime, most of the time.  The more enlightened organizations merely expect &#8220;100% utilization&#8221; of their developers.  They want to get every minute for which they&#8217;ve paid, even if they&#8217;re not expecting to get extra hours for free.</p>
<p><strong>Where does this idea come from?</strong> From the concept of maximizing the return of capital investment in manufacturing machines.  When you&#8217;ve got a costly machine, you may want it to be working as much as possible generating return on your investment.  Of course, you&#8217;ve got to have <em>some</em> down-time so that you can maintain the machine.  After all you spent on it, you want it to keep working for a long time.  Therefore you have to take care of it.</p>
<p>Ah, but <em>people</em> don&#8217;t burn out like machines, do they?</p>
<p><strong>Is it &#8220;hours&#8221; that we want?</strong> With machines, it&#8217;s easy to take the cost of the machine and divide by the number of hours it&#8217;s in use.  But is it &#8220;hours of machine time&#8221; that we&#8217;re buying?  Or does the return on our investment come from the ability to sell the results of those hours?  What return do we get if we spend those hours producing the wrong thing?  Or producing &#8220;too much&#8221; of the right thing&#8211;more than we can sell?</p>
<p>Ah, but <em>people</em> don&#8217;t produce the wrong thing, do they?  And <em>people</em> don&#8217;t get stuck producing the same old thing when they&#8217;re pushed to hurry, do they?</p>
<p><strong>What happens when we approach 100% utilization?</strong> Go ask your network engineer what happens when the network reaches 100% utilization.  Actual throughput slows to a crawl, but network collisions and retransmissions skyrocket.  Or think about how well your computer responds to you when the CPU reaches 100% utilization.  The computer stays busy, but you can no longer request it to do what you want <em>now</em>.</p>
<p>Ah, but <em>people</em> don&#8217;t get mired in rework and rote work, do they?</p>
<p><strong>We should know this by now.</strong> Tom DeMarco&#8217;s book, <a title="Amazon" href="http://www.amazon.com/exec/obidos/ISBN=0932633617/alberg30-20" target="_blank"><em>Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency</em></a> came out in 2001.  I confess that I didn&#8217;t read it for many years, thinking I knew what it said.  DeMarco makes many more important points than I&#8217;ve mentioned.  I thought I knew the topic, but learned a lot when I read it.</p>
<p><a title="Andre's blog" href="http://dhondtsayitsagile.blogspot.com/" target="_blank">André Dhondt</a> recently <a title="the post" href="http://tech.groups.yahoo.com/group/extremeprogramming/message/153277" target="_blank">said on the Extreme Programming Yahoogroup</a>,</p>
<blockquote><p>The Product Owners look at slack as a way to evaluate whether the team is overloaded&#8211;and seek to reduce velocity until we hit slack consistently. Otherwise, we fear we&#8217;ll be paying for code debt, bug fixes, and reduced innovation that the team can&#8217;t really see until they come up for air.</p></blockquote>
<p>We should all be so vigilant.  It&#8217;s a very sharp knee in the curve when we reach 100%.  As Dickens said in <a title="Amazon" href="http://www.amazon.com/exec/obidos/ISBN=0451530047/alberg30-20" target="_blank"><em>David Copperfield</em></a>,</p>
<blockquote><p>&#8216;My other piece of advice, Copperfield,&#8217; said Mr. Micawber, &#8216;you know. Annual income twenty pounds, annual expenditure nineteen nineteen six, result happiness. Annual income twenty pounds, annual expenditure twenty pounds ought and six, result misery. The blossom is blighted, the leaf is withered, the God of day goes down upon the dreary scene, and and in short you are for ever floored. As I am!&#8217;</p></blockquote>
<p>The same is true of overspending our time.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=372&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/03/13/getting-your-moneys-worth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing in depth</title>
		<link>http://blog.gdinwiddie.com/2010/03/05/testing-in-depth/</link>
		<comments>http://blog.gdinwiddie.com/2010/03/05/testing-in-depth/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 03:31:42 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=367</guid>
		<description><![CDATA[In the late 1970s, in the Co-Evolution Quarterly, the magazine successor to The Whole Earth Catalog, Peter Warshall stated that geodesic dome houses always leak.  This was a bold and surprising statement at the time, coming from a man who was considered one of the finest builders of dome houses&#8211;ones that didn&#8217;t leak.
Why did he [...]]]></description>
			<content:encoded><![CDATA[<p>In the late 1970s, in the <em>Co-Evolution Quarterly</em>, the magazine successor to <em>The Whole Earth Catalog</em>, Peter Warshall stated that geodesic dome houses <span style="text-decoration: underline;">always</span> leak.  This was a bold and surprising statement at the time, coming from a man who was considered one of the finest builders of dome houses&#8211;ones that <em>didn&#8217;t</em> leak.</p>
<p>Why did he make this statement?<span id="more-367"></span></p>
<p>He went on to explain, that the design of a dome house depended on a single skin being perfect waterproofing technology.  Traditional houses, by comparison, have multiple imperfect layers.  There are overlapping shingles, which keep <em>most</em> of the water out.  Below that there&#8217;s a layer of tar paper, which keeps out <em>most</em> of what reaches it.  Then there&#8217;s the plywood sheathing, which blocks or absorbs <em>most</em> of what penetrates the tar paper.  Then the attic insulation&#8230;.</p>
<p>No single layer of this system has to be perfect.</p>
<p>Software testing works the same way.  If you depend on one method of testing, you&#8217;re going to leak bugs into production.</p>
<p>If you do unit testing (or micro-testing, as <a title="GeePawHill's blog" href="http://anarchycreek.com/" target="_blank">Mike &#8220;GeePaw&#8221; Hill</a> calls it) of small chunks of code at a low level, you&#8217;ll catch most of the coding mistakes.  Then, if you do small scale integration tests of the code that talks to other systems (such as the database), you&#8217;ll catch most of the remaining ones.  Then higher level integration or acceptance tests that check that the whole system is wired together right will catch most of those that have escaped so far.  Then exploratory testing&#8230;.</p>
<p>Any competent network security professional will tell you that you can&#8217;t protect your network from malicious people by relying on perimeter security.  You have to bake security into other levels of access, too.</p>
<p>Again, the same is true of testing to protect your application from bugs.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=367&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/03/05/testing-in-depth/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>More on Automated Acceptance Testing</title>
		<link>http://blog.gdinwiddie.com/2010/03/03/more-on-automated-acceptance-testing/</link>
		<comments>http://blog.gdinwiddie.com/2010/03/03/more-on-automated-acceptance-testing/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 01:54:58 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Tools and Techniques]]></category>
		<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=360</guid>
		<description><![CDATA[Jim Shore has posted a response to the reactions about his previous post on Acceptance Testing in which he defends the way he and the teams he coaches are working.  About the same time, Lisa Crispin posted her thoughts on the topic.
As Lisa says,
I can’t tell you the one right way to test and develop [...]]]></description>
			<content:encoded><![CDATA[<p>Jim Shore has posted <a title="Jim Shore's blog" href="http://jamesshore.com/Blog/Alternatives-to-Acceptance-Testing.html" target="_blank">a response</a> to the reactions about his <a title="Jim Shore's blog" href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html" target="_blank">previous post</a> on Acceptance Testing in which he defends the way he and the teams he coaches are working.  About the same time, Lisa Crispin posted <a title="Lisa Crispin's blog on StickyMinds" href="http://blogs.stickyminds.com/Blogs/tabid/91/EntryId/172/The-One-Right-Way.aspx" target="_blank">her thoughts on the topic</a>.</p>
<p>As Lisa says,</p>
<blockquote><p>I can’t tell you the one right way to test and develop software….  The one right way for your team to code and test will continually evolve over the years. In fact, I’m sorry to tell you that you’ll never find the one right way; it’s a moving target, but you’ll get closer and closer to it.</p></blockquote>
<p>This is an incredibly important point!  There may be many &#8220;wrong&#8221; ways—wrong in that they fail to achieve your objectives—but there is no &#8220;right way.&#8221;  So I’m happy that Jim and his teams are able to achieve the results they want.  I’m not saying they’re doing it wrong.<span id="more-360"></span></p>
<p>At the same time, I’ve seen teams struggle with the increasing burden of acceptance testing and the divergence of understanding between the Customer, the Developers, and the Testers.  And so I continue to explore ways to alleviate that struggle.</p>
<p>Jim describes how the teams discuss concrete examples with the customer.  They then automate those examples (or not) in their own unit and integration tests.  Jim reports that these tests give the programmers confidence that the system is working as desired.  For the customer’s confidence, Jim reports relying on &#8220;a reliable track record of shipping defect-free software.&#8221;</p>
<p>Jim’s argument is that the customer won’t trust the test results before trusting the team.  This is true.  If the customer thinks the developers will fake the test results, then it doesn’t matter how the tests are expressed; you’ve got a serious problem.</p>
<p>I’ve not experienced this level of distrust.  Instead, I’ve experienced customer’s who trust that the developers are working in good faith, but still don’t trust that the developers will ship defect-free software.  And perhaps the developers won’t ship defect-free software.  They’re fallible, just like the rest of us humans.  Maybe they misunderstood the customer’s example.  Or they made an error converting it to code.  Or they didn’t automate that example because they thought it was the same as another that they did automate. Or…</p>
<p>Mistakes happen.  Miscommunication happens.  It’s great that Jim’s developers have that zero bugs attitude, but the customer has the right and obligation to participate in achieving zero bugs.  It can be condescending to take all the responsibility for correctness.</p>
<p>Yes, the customer gets to review the completed software, but we can detect misunderstandings sooner if the customer can read the acceptance tests.  Yes, the developers may produce defect-free software, but miss a test case such that nobody notices right away when a defect is inserted into this feature later.  I want to enable the customer reading the test and saying &#8220;Yes, that’s what I meant.&#8221;  I want to enable the customer saying, &#8220;I’ve thought about another case we don’t have covered.&#8221;  Or &#8220;We’re changing our business rules and this example is no longer correct.&#8221;  Or anything else that’s appropriate.  I want the customer to share that zero bugs attitude.</p>
<p>But is this practice essential?  Obviously not, as Jim and his teams are successful without it.  For many teams transitioning to agile practices, they’ve probably got too many other, more fundamental, practices to learn that they don’t have the energy to tackle this one yet.</p>
<p>Is this practice too expensive in terms of effort?  Maybe.  A lot of people are working on making it less expensive.  If you don’t make it an integral part of the conversations when you first start discussing the story, then it’s likely to seem too expensive.  Then it’s like writing unit tests after the code rather than doing TDD.  To make it work, I think you need to make the customer examples flow from the initial conversation through signaling &#8220;done&#8221; for the developer.  You’ve got to work at making them maintainable, just like the code in the system you’re delivering.</p>
<p>This is just one small practice in a forest of useful practices.  The forest can survive without any single one.  We can almost always find ways to compensate for things we’re not doing.  That’s a double-edged sword, however.  It can also allow us to fritter away our advantages until we’re working in the same old way we’ve always done.  It can blind us to some of the process improvements we could make.  Jim’s &#8220;fix the process description&#8221; is</p>
<blockquote><p>Every escaped defect, whether found in exploratory testing or found by end-users, is a indication of a flaw in the process. When we find one, we fix our process.</p>
<p>The first thing is to analyze the defect, write a test that reproduces it, and fix it. While we&#8217;re fixing it, we look at the design of the code and see if it needs improvement, too.</p>
<p>Next, we conduct Root-Cause Analysis. We ask ourselves, &#8220;What about our process allowed this defect to escape?&#8221; We continue asking &#8220;why&#8221; until we get to the root cause. Once we find it, we make changes to prevent that entire category of defects from happening again.</p></blockquote>
<p>Note that &#8220;fix the process&#8221; could include adding a process of creating Customer Readable Automated Acceptance Tests.  They’re are a tool that I want to keep in my toolbox.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=360&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/03/03/more-on-automated-acceptance-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Reality of Automated Acceptance Testing</title>
		<link>http://blog.gdinwiddie.com/2010/03/01/the-reality-of-automated-acceptance-testing/</link>
		<comments>http://blog.gdinwiddie.com/2010/03/01/the-reality-of-automated-acceptance-testing/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 20:14:58 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Tools and Techniques]]></category>
		<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=353</guid>
		<description><![CDATA[Recently, Jim Shore wrote about The Problems With Acceptance Testing.  I like Jim, and respect him a lot.  Because of my respect for his opinions, I found it quite discouraging that he said, &#8220;I no longer use [automated acceptance testing] or recommend it.&#8221;  Gojko Adzic has posted his response to Jim.  This is mine.
Certainly when [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, Jim Shore wrote about <a title="Jim Shore's blog" href="http://jamesshore.com/Blog/The-Problems-With-Acceptance-Testing.html" target="_blank">The Problems With Acceptance Testing</a>.  I like Jim, and respect him a lot.  Because of my respect for his opinions, I found it quite discouraging that he said, &#8220;I no longer use [automated acceptance testing] or recommend it.&#8221;  Gojko Adzic has posted his <a title="Gojko Adzic's blog" href="http://gojko.net/2010/03/01/are-tools-necessary-for-acceptance-testing-or-are-they-just-evil/" target="_blank">response to Jim</a>.  This is mine.</p>
<p>Certainly when something&#8217;s not giving you the results you want, it&#8217;s time to make a change.  That change can be to drop the practice that&#8217;s not working for you.  It can also be changing the way you go about the practice, or changing what you want to accomplish.  Or, instead of changing, maybe the word &#8220;refining&#8221; is a better fit.<span id="more-353"></span></p>
<p>In my experience, teams that don&#8217;t do automated acceptance testing quickly get to a point where adding new features goes slower and slower, just because it takes longer and longer to test all of the functionality.  Sometimes they start trying to figure out which functionality they need to retest, and which &#8220;couldn&#8217;t possibly be broken by this change.&#8221;  This starts down a very slippery slope.  As <a title="Elisabeth Hendrickson's AAFTT 2007 lightning talk video" href="http://video.google.com/videoplay?docid=4949576318072329085#" target="_blank">Elisabeth Hendrickson says</a>,</p>
<blockquote><p>If the customer has an expectation, they have expressed that expectation, they have every reason to believe you have already fulfilled that expectation, they don&#8217;t want to have to manually go re-verify that you have actually done the thing that you said you did before.</p></blockquote>
<p>Is that so much to expect?</p>
<p>In one of Jerry Weinberg&#8217;s books [<a title="Amazon" href="http://www.amazon.com/gp/product/0932633242?ie=UTF8&amp;tag=alberg30-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0932633242" target="_blank">Quality Software Management: Vol 2, First-Order Measurement</a>, pp. 156-158], he talks about how a one-line change is <em>more likely</em> to introduce a defect than a larger one.  This seems counter-intuitive, until you consider how people drop their guard when they think they&#8217;re making a trivial change.  They don&#8217;t check everything as completely.  When someone doesn&#8217;t check some aspect because &#8220;it couldn&#8217;t possibly be affected&#8221; by this change, they leave the door wide open for Murphy to demonstrate his law.</p>
<p>Given that I&#8217;m convinced things need to be retested, and that the shorter the iteration the more frequently they need to be retested, I&#8217;m not willing to give up on automated tests.  That leaves me looking at what I want to accomplish and how I want to practice it.</p>
<p>Jim describes two problems with automated acceptance tests.</p>
<blockquote><p>These two problems&#8211;that customers don&#8217;t participate, which eliminates the purpose of acceptance testing, and that they create a significant maintenance burden, means that acceptance testing isn&#8217;t worth the cost.</p></blockquote>
<p>About the first problem, lack of customer participation, he says,</p>
<blockquote><p>The planned benefit of those tools is that the customers are supposed to write the examples themselves, thus improving communication between customers and programmers. In practice, I found that customers (a) weren&#8217;t interested in doing that, and (b) often couldn&#8217;t understand and didn&#8217;t trust tests that were written by others. Typically, responsibility for the tests gets handed off to testers, which defeats the whole point.</p></blockquote>
<p>I also have found that customers are not interested in writing tests, themselves.  I don&#8217;t blame them for that.  Nor do I think they would, in general, do a very good job by themselves.  Sending testers (or developers, for that matter) off by themselves to translate discussions into test examples isn&#8217;t any better.  They have the same problems that face the customer, <em>plus</em> the problem of the customer not trusting tests they don&#8217;t understand.</p>
<p>I don&#8217;t, however, think that&#8217;s the way it has to be.</p>
<p>I&#8217;m still working on demonstrating long term results, but I&#8217;ve had some success using automatable examples as a tool to <a title="my blog posting on my &quot;Lingua Franca&quot; talk" href="http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/">enhance the conversation between the customer, the tester, and the developer</a>.  Not to replace the conversation, or to send one person off to write tests, but to add precision to the agreement about what needs to be accomplished.  The goal is for the customer to look at the test and say &#8220;Yes, that&#8217;s what I want.&#8221;</p>
<p>Once we&#8217;ve got that, there are lots of tools available now, and getting better all the time, to help us turn that automatable example into an automated one.  Yes, maintenance is still hard.  Dale Emery has an <a title="Writing Maintainable Automated Acceptance Tests by Dale Emery" href="http://dhemery.com/pdf/writing_maintainable_automated_acceptance_tests.pdf" target="_blank">excellent article</a> on this topic.  We, as an industry, have far to go getting this difficulty under control.  I say, let&#8217;s work on it.</p>
<p>If we approach the development of the examples <em>with</em> the customer and <em>in the terms</em> of the customer, then we&#8217;ve accomplished the hardest part.  It&#8217;s worth spending the extra effort to put these examples to work <em>preventing defects</em> rather than finding them after the fact.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=353&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/03/01/the-reality-of-automated-acceptance-testing/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>How Fascinating!</title>
		<link>http://blog.gdinwiddie.com/2010/02/26/how-fascinating/</link>
		<comments>http://blog.gdinwiddie.com/2010/02/26/how-fascinating/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 17:16:47 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=348</guid>
		<description><![CDATA[Yesterday was a day of mistakes.  Not so much making mistakes, but talking about them.  It started with Bret Pettichord&#8217;s tweet
Agile requires the courage to make mistakes in front of others and the maturity to admit them when they happen.
Surely this is true.  Agile is all about paying attention to what happens and adjusting for [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday was a day of mistakes.  Not so much making mistakes, but talking about them.  It started with <a title="the tweet" href="http://twitter.com/bpettichord/status/9629582579" target="_blank">Bret Pettichord&#8217;s tweet</a></p>
<blockquote><p>Agile requires the courage to make mistakes in front of others and the maturity to admit them when they happen.</p></blockquote>
<p><span id="more-348"></span>Surely this is true.  Agile is all about paying attention to what happens and adjusting for it.  We learn most when when thing are a little off from what we want, we notice that, and we correct for it.</p>
<p><a title="the tweet" href="http://twitter.com/marick/status/9635032030" target="_blank">Brian Marick responded</a></p>
<blockquote><p>I now think that Agile requires the creation of an environment in which admitting mistakes doesn&#8217;t require courage.</p></blockquote>
<p>Surely this is also true.  If we want people to notice when things are a little off, so we can make a correction, then we have to make it easy to talk about our mistakes.  If we don&#8217;t, the little mistakes get swept under the carpet and we continue on our way&#8211;until the mistakes grow so big that we can&#8217;t ignore them any more.  By this time we&#8217;re <em>way off the path</em> we want.</p>
<p><a title="my tweet" href="http://twitter.com/gdinwiddie/status/9635637710" target="_blank">In other words</a>, well, in my words,</p>
<blockquote><p>I think Agile requires creating environment where admitting mistakes requires no more courage than you have.</p></blockquote>
<p>We can&#8217;t eliminate the need for courage to admit our mistakes.  It&#8217;s human nature to gloss over even tiny ones, and hope no one noticed.  But we can reduce the stigma of making mistakes.</p>
<blockquote><p>How fascinating!</p></blockquote>
<p>was the <a title="the tweet" href="http://twitter.com/fluencygame/status/9657879008" target="_blank">comment by Willem Larsen</a>.  Willem and Evan Gardner are spreading Evan&#8217;s <a title="Where Are Your Keys?" href="http://whereareyourkeys.org/" target="_blank">&#8220;Where Are Your Keys&#8221; language fluency game</a>.  It&#8217;s expected that you&#8217;ll make mistakes when learning a language.  The response to such a mistake is &#8220;how fascinating&#8221; signed by raising both hands in the air.  Everyone laughs.  No one feels badly for making a mistake.  In fact, it feels good to share your mistakes with a laugh and helpful colleagues rather than to hide it inside.</p>
<p>Is that the way it feels when you make a mistake in your team?  What could you change so it does feel that way?</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=348&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/02/26/how-fascinating/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>A Lingua Franca between the Three (or more) Amigos</title>
		<link>http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/</link>
		<comments>http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 20:15:37 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Tools and Techniques]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=342</guid>
		<description><![CDATA[There were a couple dozen people who showed up at the Fool, last night, for my presentation on A &#8221;Lingua Franca&#8221; to Ensure You Get the Right System.  I&#8217;d like to thank them all for coming and for such lively participation.
These are exciting times.  The tools of acceptance testing and behavior-driven development are progressing beyond [...]]]></description>
			<content:encoded><![CDATA[<p>There were a couple dozen people who showed up at the Fool, last night, for my presentation on <a title="slides from presentation" href="http://blog.gdinwiddie.com/wp-content/uploads/2010/02/LinguaFranca-Feb2010.pdf">A &#8221;Lingua Franca&#8221; to Ensure You Get the Right System</a>.  I&#8217;d like to thank them all for coming and for such lively participation.</p>
<p>These are exciting times.  The tools of acceptance testing and behavior-driven development are progressing beyond the domain of the techies.  They are entering the realm where they can help the Whole Team.<span id="more-342"></span></p>
<p>Using these tools, or even better ones to come, the Three Amigos, Developer, Tester, and Business (and User Experience expert, and Manual Writer, and &#8230;), can invent their own shared language, specific to the system under development, to talk about what the system is supposed to do.  The acid test: that the Business representative feels comfortable reading the examples written in these terms and definitively say, &#8220;Yes, that&#8217;s what I mean&#8221; or not.</p>
<p>After the presentation, Uncle Bob Martin showed me the Given When Then capabilities he&#8217;s added to <a title="Fitnesse home page" href="http://fitnesse.org/" target="_blank">Fitnesse</a> since I last looked at it last fall.  Other tools mentioned included <a title="Cucumber home page" href="http://cukes.info/" target="_blank">Cucumber</a>, <a title="SpecFlow home page" href="http://specflow.org/" target="_blank">SpecFlow</a>, <a title="JBehave home page" href="http://jbehave.org/" target="_blank">JBehave</a>, <a title="easyb home page" href="http://www.easyb.org/" target="_blank">easyb</a>, <a title="GivWenZen, perhaps obsoleted by additions to Fitnesse" href="http://code.google.com/p/givwenzen/" target="_blank">GivWenZen</a>, <a title="description of Morelia Viridis on Ward's wiki" href="http://c2.com/cgi/wiki?MoreliaViridis" target="_blank">Morelia Viridis</a>, <a title="StoryQ" href="See http://storyq.codeplex.com/" target="_blank">StoryQ</a>, and <a title="blog posting on StorEvil" href="http://anotherdave.wordpress.com/2010/02/23/storevil-intro/" target="_blank">StorEvil</a>.  I&#8217;m sure there&#8217;s more to come.  And, as we use these tools more and more, I&#8217;m sure that we&#8217;ll develop patterns beyond Given When Then and language specification tools beyond regular expressions.</p>
<p>Just remember, it&#8217;s not the technology that&#8217;s important.  It&#8217;s the communication between the Three (plus) Amigos.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=342&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/02/25/a-lingua-franca-between-the-three-or-more-amigos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3 Legs to Standing Up an Agile Project</title>
		<link>http://blog.gdinwiddie.com/2010/02/18/3-legs-to-standing-up-an-agile-project/</link>
		<comments>http://blog.gdinwiddie.com/2010/02/18/3-legs-to-standing-up-an-agile-project/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 05:07:42 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Teams]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=338</guid>
		<description><![CDATA[Maybe you’re starting your first Agile project.  You’ve read books and blogs.  You’ve had training.  You think you’re ready, but it’s still a daunting prospect.  There’s just so much to remember—so many details.
Here’s a little cheat sheet.  Forget all the details and the various ways you can implement Agile for the moment.  Let’s simplify the [...]]]></description>
			<content:encoded><![CDATA[<p>Maybe you’re starting your first Agile project.  You’ve read books and blogs.  You’ve had training.  You think you’re ready, but it’s still a daunting prospect.  There’s just <em>so</em> much to remember—so many details.</p>
<p>Here’s a little cheat sheet.  Forget all the details and the various ways you can implement Agile for the moment.  Let’s simplify the picture.  There are just three essential legs that your Agile project needs to stand.  Get those in place, and you’ll do OK.  Keep improving all three, and you’ll do fantastically!<span id="more-338"></span></p>
<p><strong>Arranging the work.</strong></p>
<p>Know what is the goal.  Everybody should know this.  The <em>&#8220;things to be done&#8221;</em> should be fed smoothly to the development team.  Iteration cycles should respect the capacity of the team.  So should release cycles.  Doing these cycles smoothly will allow the team to maximize their capacity better than pushing for higher productivity.  Delay making decisions until they’re really needed, and make use of what you learn in the mean time.  Get the flow going and measure progress in real terms—working software.</p>
<p><strong>Doing the work.</strong></p>
<p>Working in iterations, alone, won’t get the project done.  The team has to do a competent job at doing the work.  If they had trouble delivering before, then better focus on shorter term goals may help, but you still have to work at it.  In addition, the sharp focus of short iterations and measuring working software makes it harder to sweep problems under the rug.  The team <em>could</em> look worse until they get a handle on things.  Set a high standard with your definition of done and keep to it.  This is the <em>real</em> capacity of the team.  Work to improve skills to increase the capacity.  Work to eliminate unnecessary work.</p>
<p><strong>Working together.</strong></p>
<p>An incredible amount of productivity improvements of an Agile team comes from the synergy of working effectively together.  Build a team, a real gelled team, not just a work group assigned to a project.  Support each other.  Help each other grow.  Leave no team member behind.  Solve problems together.  Respect each other.  Respect the differences, the special abilities, the varying perspectives.  These things give the team strength and resilience.</p>
<p>These three legs are enough to stand up a new Agile project.  Use these three categories to organize all those details we put aside at the start of this post.  Use those details to help you steady these three legs.  Experiment and practice until you feel you can succeed at each of these three aspects of your project.  And then keep improving.  Keep looking for things you can do better.  Keep re-evaluating.</p>
<p>It’s really that simple.  I won’t promise that it’s easy.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=338&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/02/18/3-legs-to-standing-up-an-agile-project/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The testers get behind at the end</title>
		<link>http://blog.gdinwiddie.com/2010/02/16/the-testers-get-behind-at-the-end/</link>
		<comments>http://blog.gdinwiddie.com/2010/02/16/the-testers-get-behind-at-the-end/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 21:15:07 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=334</guid>
		<description><![CDATA[It&#8217;s a very common complaint, such as this one left on the Scrumdevelopment yahoogroup:
Usually in different phases, workload for tester and dev is different. E.g. when a project is coming to the end, most of the tasks will be test.
There are a couple of big red flags waving at me in those two sentences.  One [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a very common complaint, such as <a title="Yahoogroup posting" href="http://groups.yahoo.com/group/scrumdevelopment/message/45191" target="_blank">this one left on the Scrumdevelopment yahoogroup</a>:</p>
<blockquote><p>Usually in different phases, workload for tester and dev is different. E.g. when a project is coming to the end, most of the tasks will be test.</p></blockquote>
<p>There are a couple of big red flags waving at me in those two sentences.  One is <em>&#8220;different phases.&#8221;</em> Why should a software development project, especially one only a couple weeks to a couple months long, have phases?  The other is, at <em>&#8220;the end, most of the tasks will be test.&#8221;</em> Postponing testing to a phase at the end has <em>never</em> worked very well.  It <em>always</em> results in the testers being behind at the end.</p>
<p>Does this situation sound somewhat familiar to you?  If so, what can we do about it?</p>
<p><span id="more-334"></span>Many teams try to live with it.  I&#8217;ve seen teams institutionalize &#8220;being behind&#8221; by implementing in one iteration and testing in the next.  When they do that, they generally find that problems are found in the testing, so the implementation really drags across two iterations.  The rework in the second iteration bumps new work planned for that iteration, so things continue to slide.  And since it&#8217;s hard to tell when a bit of work <em>really</em> is completely done, it&#8217;s hard to know how much work fits into an iteration and when the release will be ready.  Often things feel the same as they did before going to time-boxed iterative development.  That&#8217;s no surprise, because this really <em>isn&#8217;t</em> time-boxed iterative development.  It&#8217;s waterfall phases in sheep&#8217;s clothing.</p>
<p>Just don&#8217;t do it.  Get things completely done <em>and</em> tested before moving on to the next thing.</p>
<p><strong>But how?  Don&#8217;t you have to wait until the code is written before you can test it?</strong></p>
<p>No, you don&#8217;t.  Start when the product owner is describing what is to be done.  Distill that down to the essence of the user story.  Make sure that the product owner agrees that this <em>potentially automatable</em> distillation is what is desired.</p>
<p>Then, while the developers are hard at work implementing the functionality, the testers should be automating the test that verifies it.  To be sure, this is often something the testers, and the organization they work for, find unfamiliar.  It&#8217;ll go a little slow and shaky while you learn.  It&#8217;s completely understandable that testers will need some assistance from the developers as they automate the tests&#8211;after all, test automation <em>is</em> a form of programming.</p>
<p>The bottom line is that the story isn&#8217;t ready for acceptance until both the implementation <em>and</em> the test are done, and the test passes.  That&#8217;s the minimum, but take a further look, too.</p>
<p>Over time, this will get easier.  The testers will learn to do more test automation with less help.  The resulting set of regression tests will grow, giving quick feedback that functionality that worked before, still works.  Instead of the testers getting further and further behind as they continue to check the same functionality iteration after iteration, they&#8217;ll get further ahead because running these tests takes about the same amount of time.  They&#8217;ll have <em>more</em> time to do exploratory testing, and less of that exploratory testing will have to cover basic functionality.</p>
<p>It&#8217;s hard work to make automated acceptance testing a success.  In the end, though, it&#8217;s the only thing that can make testing a success in time-boxed iterative development.  If you don&#8217;t make it work, I guarantee the testers will get further and further behind.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=334&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/02/16/the-testers-get-behind-at-the-end/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Testability &amp; Good Design</title>
		<link>http://blog.gdinwiddie.com/2010/02/14/testability-good-design/</link>
		<comments>http://blog.gdinwiddie.com/2010/02/14/testability-good-design/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 16:58:17 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Tools and Techniques]]></category>
		<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Craftmanship]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=328</guid>
		<description><![CDATA[Much of the time, the test-driven development yahoogroup is pretty quiet, but it has recently awakened from winter hibernation.  The question &#8220;Is it OK to add code to a class only to improve its testability?&#8221; stirred up a wide-ranging discussion that brought in the topic of what constitutes good design.  &#8220;Uncle Bob&#8221; Martin drew a [...]]]></description>
			<content:encoded><![CDATA[<p>Much of the time, the test-driven development yahoogroup is pretty quiet, but it has recently awakened from winter hibernation.  The question &#8220;Is it OK to add code to a class <strong>only</strong> to improve its testability?&#8221; stirred up a wide-ranging discussion that brought in the topic of what constitutes good design.  &#8220;Uncle Bob&#8221; Martin drew a bold line in the sand with <a title="Uncle Bob's post on TDD Yahoogroup" href="http://tech.groups.yahoo.com/group/testdrivendevelopment/message/32320?l=1" target="_blank">his comment</a>,</p>
<blockquote><p>One reasonable definition of good design is testability.  It is hard to imagine a software system that is both testable and poorly designed.  It is also hard to imagine a software system that is well designed but also untestable.</p></blockquote>
<p>I greatly sympathize with this statement, though I wouldn&#8217;t go quite that far.  I don&#8217;t think it is so hard to imagine code that is testable, but poorly designed.  For a trivial counter-case, there could be rampant duplication of testable code.  I would call that poorly designed, but it doesn&#8217;t affect it&#8217;s testability.  Therefore I would soften Uncle Bob&#8217;s definition to &#8220;One reasonable component of the definition of good design is testability.&#8221;</p>
<p>To me, the notion of &#8220;testable code&#8221; is the same thing that &#8220;testable circuit&#8221; was back when I worked on a custom integrated circuit.  Mostly, that depends on the ability to put the circuit or code into a known state, exercise it, and see the interactions with its collaborators and its resulting state.<span id="more-328"></span></p>
<p>For ICs, the first level of making a circuit testable was to the internal state predictable and discernible.  Sometimes this was accomplished simply, by having the power-up state known, rather than random, and by being able to clock internal nodes into a shift register to be read out on an output pin in a special test mode.  That was enough to make it testable, but not generally enough to make it easy to test.</p>
<p>Being able to drive internal nodes to various known states gave a lot more power, allowing &#8220;unit testing&#8221; of various blocks of circuitry.  This generally required some additional hardware added just for testability (a point germane to the original question), but paid handsome dividends in reduced time to test units in production.</p>
<p>With ICs, much of the expense is in the packaging, and that expense was significantly related to the number of pins.  Testing equipment evolved to do the equivalent of &#8220;the bed of nails&#8221; used on circuit boards, but applied to pads on the circuit die that were never bonded out to pins.  This allowed easier access to internal nodes, both for driving state and for reading it, prior even to slicing the wafer into individual chips.  The heads that probed the circuit had a small nozzle to spray dye on failed circuits so they could be discarded before packaging.</p>
<p>With software, the ability to drive and access internal nodes is much easier&#8211;often not requiring any additional logic.  Sadly, many programs manage to make these internal nodes inaccessible, in spite of the lack of cost to do otherwise.</p>
<p>So, when I talk about testability, that&#8217;s what I mean.  And that&#8217;s why I quibble slightly with Uncle Bob&#8217;s assertion that testable code is necessarily well designed.  The converse is pretty easy to believe, but there are cases where, for no apparent reason, the design still sucks.</p>
<p>Well designed code, like well designed circuits, contain the complexity better and are therefore easier to adequately test.  This is, to me, an important point.  We&#8217;re very likely to miss stuff.  Let&#8217;s make it as hard as possible to miss stuff.  And let&#8217;s make it as easy as possible to notice when we&#8217;ve missed stuff.</p>
<p>In the words of C. A. R. Hoare,</p>
<blockquote><p>There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.</p></blockquote>
<p>Adam Sroka stated his discomfort with calling code testable unless it was, indeed, tested.  Again, I&#8217;ll be happy with a slightly lower standard.  It <em>can</em> be apparent that some code is <em>testable</em> even when not <em>tested</em>.  Generally, that code needs to be simple enough that testability can be obvious.  In most cases, though, code that isn&#8217;t tested is also not clearly testable.  To a first order approximation, both Uncle Bob&#8217;s and Adam&#8217;s statements ring true. I&#8217;m not terribly concerned with the absolute truth of either of them.  I do, however, prefer Michael Feathers&#8217; assertion that there is <a title="Michael Feathers' blog posting" href="http://michaelfeathers.typepad.com/michael_feathers_blog/2007/09/the-deep-synerg.html" target="_blank">a deep synergy between testability and good design</a>.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=328&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/02/14/testability-good-design/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Agile Retroflection of the Day</title>
		<link>http://blog.gdinwiddie.com/2010/01/01/agile-retroflection-of-the-day/</link>
		<comments>http://blog.gdinwiddie.com/2010/01/01/agile-retroflection-of-the-day/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 01:05:27 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Coaching]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Relationships]]></category>
		<category><![CDATA[Resistance]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=320</guid>
		<description><![CDATA[Yves Hanoulle asks, &#8220;If you could change 1 thing today what would it be?&#8221; as the first question in his Agile Retroflection of the Day project. Today being the first of the year, it&#8217;s natural that I look back over the past year as I consider this question.  And so I answer,
That people could ask [...]]]></description>
			<content:encoded><![CDATA[<p>Yves Hanoulle asks, <a title="the tweet" href="http://twitter.com/Retroflection/status/7278042879" target="_blank">&#8220;If you could change 1 thing today what would it be?&#8221;</a> as the first question in his <a title="Yves' weblog" href="http://paircoaching.wordpress.com/2010/01/01/agile-retroflection-of-the-day/" target="_blank">Agile Retroflection of the Day</a> project. Today being the first of the year, it&#8217;s natural that I look back over the past year as I consider this question.  And so I answer,</p>
<blockquote><p>That people could ask for, and could accept, the help they need and want.<span id="more-320"></span></p></blockquote>
<p>The first thoughts that prompt ths response are the client inquiries I&#8217;ve had that didn&#8217;t really go anywhere.  Some of these, of course, had to do with money.  If the client couldn&#8217;t afford to hire me, and I couldn&#8217;t afford to work for less, then that&#8217;s one way that people cannot accept the help they want.</p>
<p>Even if I <em>could</em> afford to work for free, then it probably wouldn&#8217;t help them accept help.  People need to have <em>some skin in the game</em> to effectively make changes.  If I work for free, the best I can offer is advice.  And people usually ignore advice. It&#8217;s not consulting without the client indicating the value by paying something for it. (I once read a study that showed that free psychological counseling was extraordinarily ineffective, even compared to counseling that cost only a dollar a session.)</p>
<p>So, when a potential client calls me but isn&#8217;t prepared to pay (what I consider) a reasonable rate, I wonder how much do they really want to improve their software development organization.  Will they accept the need to slow down enough to learn new skills and behavior?  Will they be willing to do things differently, themselves, in order to reap the benefits they desire?  Often people want the quality and speed to go up, as long as they don&#8217;t have to make any changes.</p>
<p>Or they&#8217;re willing for <em>other</em> people to make changes. &#8220;Teach my developers to do Test Driven Development so they won&#8217;t ship bugs.&#8221;  This seems like a fine sentiment on the surface&#8211;Test Driven Development is, in my experience, an excellent tool for preventing the shipment of bugs.  But I have to ask myself, what&#8217;s keeping these developers from practicing Test Driven Development on their own?  If it&#8217;s lack of knowledge, then I can help them with a course.</p>
<p>Often there are other forces at play, however, that maintain the status quo even with new knowledge.  Perhaps the organizational culture frowns on people admitting that they don&#8217;t already know everything important.  Perhaps bugs, while deplored in words, are not given the same attention in actions.  I&#8217;ve seen rushing to ship take priority over shipping good code. I&#8217;ve seen heroics to fix a problem be given more accolades than preventing the problem in the first place.  Are people willing to change these behaviors so they may receive the needed help?</p>
<p>Of course, while it&#8217;s easy for me to describe these issues in others, I see the same difficulties in asking for, and accepting, help with the thinks <em>I</em> need, too.  I had the pleasure, recently, of working with <a title="Dale Emery's web site" href="http://dhemery.com/" target="_blank">Dale Emery</a> on an engagement.  You may know Dale as the recipient of the <a title="Brian Marick's announcement of the award" href="http://www.exampler.com/blog/2007/08/18/pask-award-2007-plus-a-surprise/" target="_blank">Ward Cunningham Gentle Voice of Reason Award</a>.  One of the things I truly love about Dale is his skill at asking questions.  And when he does, I&#8217;m frequently surprised both by the answers he receives and at my recognition, yet again, of my own tendency to make assumptions rather than seek and accept helpful information.</p>
<p>It&#8217;s not easy.  And that&#8217;s why it&#8217;s my wish for the day.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=320&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/01/01/agile-retroflection-of-the-day/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tracking your investments</title>
		<link>http://blog.gdinwiddie.com/2009/12/27/tracking-your-investments/</link>
		<comments>http://blog.gdinwiddie.com/2009/12/27/tracking-your-investments/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 18:57:44 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Progress]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=310</guid>
		<description><![CDATA[The world is slowly recovering from a major financial meltdown.  People blame the collapse on a number of different things: a bubble of inflated housing prices, relaxed requirements for qualifying for a mortgage, predatory lending practices, greed on the part of mortgage companies and investment banks….  There are certainly many places to point fingers.  Each [...]]]></description>
			<content:encoded><![CDATA[<p>The world is slowly recovering from a major financial meltdown.  People blame the collapse on a number of different things: a bubble of inflated housing prices, relaxed requirements for qualifying for a mortgage, predatory lending practices, greed on the part of mortgage companies and investment banks….  There are certainly many places to point fingers.  Each of these places, however, was doing what seemed logical when looking at a small piece of the puzzle.</p>
<p>As is often the case, we must back up and take a larger systemic view to see further.  Once upon a time, people borrowed money to buy a house, paid it back over time, and ultimately the bank was able to lend that money to someone else.  With the creation of the FNMA (Fannie Mae) in 1938, the income streams of those mortgages being repaid were converted to bonds, so that they could be sold to other investors and the banks to re-lend their money more frequently.  This allowed many more people to afford houses.  In the 1970s, private banks got into the business of creating their own bonds based on debt repayment streams.</p>
<p>Nothing ever stands still, of course.  People continued to look for new wrinkles on these themes to allow them to expand the business, or to increase the profit on the business they had.  Some of these investment vehicles got very complicated, intended only for professional bankers who could understand and evaluate them where the mass public could not.  Or, so went the pitch at the time.<span id="more-310"></span></p>
<p>As it turns out, many of those professional bankers couldn’t fully understand and evaluate these instruments, either.  And this is in spite of reams of financial reporting about the quality of the underlying mortgages, the default rates, and other things that might affect the debt repayment streams.  No one has time to read the reams of financial reporting.  Instead, they simplify it, and boil it down to a relatively few values and ratios that they do read.  These derivative indicators became proxies for a real understanding of the risks and rewards of bonds based on mortgages.  And then there were derivative financial instruments based on the bonds based on the mortgages, and they had their own proxies for the risks and rewards.  I don’t know how many layers there are to this particular onion, but I do know that, at some point, the proxy measurements diverged from the real understanding of the risks and rewards.</p>
<p>Where have I seen this phenomena before?</p>
<p>I’ve seen it in businesses that couldn’t quantify the actual value of the software systems they were building, so they substituted the cost of building them as that value.  I’ve seen it in project managers who couldn’t quantify the actual productivity of their developers, so they substituted proxy measures such as &#8220;hours worked&#8221; and &#8220;lines of code&#8221; as an indication of productivity.  I’ve seen it in project managers who couldn’t quantify the actual progress of a project, so they substituted conformance to their original plan as a proxy.  And for individual items on that plan, when they couldn’t discern the actual progress on an item, they substituted reports of &#8220;percent completion&#8221; as a proxy.</p>
<p>All of this makes perfect sense at the time.  There is some correlation between lines of code and productivity.  And by using proxies that are quantifiable, we can crunch the numbers and come up with a few key indicators to let us know how we’re doing on productivity, progress, and value.  And we can calculate the amount of risk we have, at least, the amount that we’ve anticipated.  We end up with a handful of indicators that make us feel on top of things and in control.</p>
<p>And, like in the financial industry, as long as things keep going well, these numbers seem to work for us.  But we have no way of knowing how much and in what ways our proxy measurements vary from the things that really concern us.  And we have no way of knowing what risks are not included in our numbers.  And we have no way of knowing in what ways the future might differ from our increasingly successful past.</p>
<p>There were those who took a systemic look at the financial industry and predicted that trouble was coming.  As the system mutates over time, it rewards behavior that varies from what we really want.  The increase in that behavior then drives further changes in the system.  It’s a lead-pipe cinch that the future will differ from the past.  But looking at proxy measures won’t tell us that.</p>
<p>&#8220;The prudent mariner will not rely solely on any single aid to navigation, particularly on floating aids.&#8221;  This advice used to be printed on all US nautical charts.  It’s good advice for the prudent manager, also.  Proxy measures are like floating aids to navigation.  They only give an approximate position, as they drift around their anchor point.  And sometimes, unseen by us, the anchors themselves drift from the known location where we set them.  As we reward lines of code or hours worked, these measures drift further and further from a representation of productivity.  As we measure conformance to plan, then that conformance becomes more important and accomplishing the goals that the plan was created to accomplish becomes less immediate.  That conformance then becomes a poor proxy for accomplishing our goals.</p>
<p>So, look around.  Find <a title="Project/Process Evaluation Kit" href="http://blog.gdinwiddie.com/2009/08/18/diy-projectprocess-evaluation-kit/">some other aids to know where you are</a>, and where you’re heading.  Don’t wait until it’s too late to prevent disaster.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=310&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2009/12/27/tracking-your-investments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I do not endorse PMAC Certification</title>
		<link>http://blog.gdinwiddie.com/2009/12/07/i-do-not-endorse-pmac-certification/</link>
		<comments>http://blog.gdinwiddie.com/2009/12/07/i-do-not-endorse-pmac-certification/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 17:41:19 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=306</guid>
		<description><![CDATA[It has come to my attention that the PMAC (Project Management Association of Canada / Association de Management de Projet du Canada) claims that I support their certification program.  This is a lie.  I do not support their certification program.
Their claim seems to based on a mailing list posting in which I said,
I applaud your [...]]]></description>
			<content:encoded><![CDATA[<p>It has come to my attention that the PMAC (Project Management Association of Canada / Association de Management de Projet du Canada) <a title="PMAC certification program" href="http://www.pmac-ampc.ca/Cert.APM" target="_blank">claims that I support their certification </a>program.  This is a lie.  <strong>I do not support their certification program.</strong></p>
<p>Their claim seems to based on a <a title="Agile Project Management mailing list posting" href="http://finance.groups.yahoo.com/group/agileprojectmanagement/message/11995?l=1" target="_blank">mailing list posting</a> in which I said,</p>
<blockquote><p>I applaud your efforts to educate the &#8220;traditional project manager&#8221; in Agile techniques.  I hope that you are very effective in doing so.</p></blockquote>
<ul>
<li>I did not say <em>anything</em> about their certification program.</li>
<li>They did not ask me if they could use my words on their web site.</li>
<li>They have fraudulently quoted me as if I have endorsed their certification.</li>
</ul>
<p>I am all for education. I am suspicious of certifications. I am angry that I have been so misrepresented.</p>
<p><span style="text-decoration: line-through;">I consider this misrepresentation to be a sleazy trick. It give me the impression that PMAC is not to be trusted. I suggest that you be wary of them.</span></p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=306&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2009/12/07/i-do-not-endorse-pmac-certification/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
