<?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 &#187; Customer Collaboration</title>
	<atom:link href="http://blog.gdinwiddie.com/category/customer-collaboration/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gdinwiddie.com</link>
	<description>Effective software development</description>
	<lastBuildDate>Mon, 06 Feb 2012 16:35:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Independent Interpretation</title>
		<link>http://blog.gdinwiddie.com/2011/09/19/independent-interpretation/</link>
		<comments>http://blog.gdinwiddie.com/2011/09/19/independent-interpretation/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 12:00:24 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=820</guid>
		<description><![CDATA[Many organizations segregate their programmers and testers in order to achieve independent validation of requirements.  If the system is tested according to an independent interpretation of the requirements than used for implementation, then errors in those interpretations may be detected. This course of action is obviously prudent when the requirements are handed down to the [...]]]></description>
			<content:encoded><![CDATA[<p>Many organizations segregate their programmers and testers in order to achieve independent validation of requirements.  If the system is tested according to an independent interpretation of the requirements than used for implementation, then errors in those interpretations may be detected.</p>
<p>This course of action is obviously prudent when the requirements are handed down to the development organization in the form of a document. <span id="more-820"></span>It does not, of course, detect errors in the requirements document itself. Nor does it detect errors of interpretation if both the programmers and the testers read the requirements in the same, incorrect way. When there is significant distance between writer and readers, this is distressingly common.</p>
<p>It&#8217;s difficult work to write clearly in prose. Publishing industries have developed the roles of editor and proofreader to check documents so that erroneous or unclear segments may be rewritten before they&#8217;re seen by potential readers. People who write requirements documents are frequently better versed in the desired functionality than in the process of writing them. And, they frequently don&#8217;t have so much help.</p>
<p>It&#8217;s also difficult to precisely interpret the writings of others, particularly of people you don&#8217;t know. A word may have an obvious and precise meaning in the context of the business, but an obvious and different meaning in the context of software development. In the fields of literature and law, expert interpreters may spend years or centuries honing a consensus interpretation of the written word. In software development, we rarely have time for lengthy discussion of complicated passages. If the writing is ambiguous or contradictory, faithful interpretation of the intent is even less certain.</p>
<p>We often seek clarification of the requirements to back up our reading of the document. Sometimes it&#8217;s difficult to get sufficient access to the document authors, and the programmers and testers may turn to each other for what clarification they each offer. I&#8217;ve had testers from a different company ask me how my software was supposed to work because they had insufficient access to the requirements document author.</p>
<p>Cross-checking the interpretation of programmers and testers punches holes in the wall of independence, of course. This sad state of affairs is a major source of defects in which the software &#8220;works as designed&#8221; but not as desired.</p>
<p><em>We can do better than this!</em></p>
<p>Instead of the business representative writing the requirements and handing them off as a document, imagine the business representative telling them to a programmer and tester (everyone taking notes as needed to keep things from being forgotten). Imagine the programmer and tester testing their understanding in real time with questions made directly to the business representative while things are still fresh on everyone&#8217;s mind. In doing so, they can not only challenge each others interpretation of the requirements, but also the assumptions of the business representative. Together they can hone the requirements to a sharper edge than possible when working separately.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=820&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2011/09/19/independent-interpretation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What is an Agile Coach?</title>
		<link>http://blog.gdinwiddie.com/2011/07/18/what-is-an-agile-coach/</link>
		<comments>http://blog.gdinwiddie.com/2011/07/18/what-is-an-agile-coach/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 18:53:09 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Coaching]]></category>
		<category><![CDATA[Learning]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=744</guid>
		<description><![CDATA[Recently a friend asked about the definition of the title, &#8220;Agile Coach.&#8221; Googling &#8220;agile coach&#8221; informs me that there are about 205,000 pages with that term. Obviously the term is in widespread use. I don’t typically call myself an Agile Coach, though I’ll use that term informally if it’s the term used by those with [...]]]></description>
			<content:encoded><![CDATA[<p>Recently a friend asked about the definition of the title, &#8220;Agile Coach.&#8221; Googling &#8220;agile coach&#8221; informs me that there are about 205,000 pages with that term. Obviously the term is in widespread use.</p>
<p>I don’t typically call myself an Agile Coach, though I’ll use that term informally if it’s the term used by those with whom I’m having a conversation. Instead, I call myself a Software Development Coach. To me, the goal is developing software more effectively, not becoming Agile. Agile processes and practices happen to be excellent tools for effective software development, but lousy goals in themselves. Or so it seems to me.</p>
<p>This morning, I got a call from a recruiter looking for an Agile Coach for a client. They were a bit unhappy when I gave them my daily rate. &#8220;The client has a budget and will never pay that much.&#8221; When I asked what rate they were expecting, they said $50/hour, all inclusive.</p>
<p>I made more than that a decade ago as a contract programmer. I cannot imagine finding a competent experienced coach for that rate. I’m sure that you can find a body to sit at a desk, though. Is there value in that?</p>
<p>This low rate, and the fact that cost is a primary factor, but value isn’t even mentioned, makes me wonder about what this role of &#8220;Agile Coach&#8221; has come to mean to organizations looking to hire them.<span id="more-744"></span></p>
<p>If the value received and the cost paid are nearly equal, then cost is of critical importance to avoid spending more than the value received. If the value received is an order of magnitude more than the cost paid, then variation in the cost has much less affect on the Return On Investment.  This is very similar to the point that Tom DeMarco made in his article &#8220;Software Engineering: An Idea Whose Time Has Come and Gone?&#8221; [<a title="Computing Now, July 2009" href="http://www.computer.org/portal/web/computingnow/0709/whatsnew/software-r" target="_blank">IEEE Software, July/August 2009</a>] &#8220;This leads us to the odd conclusion that strict control is something that matters a lot on relatively useless projects and much less on useful projects.&#8221;</p>
<p>I fear that for many large companies the generic &#8220;Agile Coach,&#8221; and the Scrum specific &#8220;Scrum Master,&#8221; has become a term for a person who neither programs nor tests software, who is added to a development team to make it Agile. It’s as if you could sprinkle some pixie dust on your development teams to make them more productive, or whatever advantage they can see in the adoption of Agile.</p>
<p>Is that what &#8220;Coach&#8221; now means?</p>
<p>I suppose I shouldn’t be so surprised. The meaning of &#8220;<a title="etymology of &quot;coach&quot;" href="http://www.etymonline.com/index.php?term=coach" target="_blank">’instructor/trainer’ is circa 1830 Oxford University slang for a tutor who ‘carries’ a student through an exam</a>&#8221; based on the Hungarian word for a carriage. It’s clear that some people have always wanted to hire someone rather than learn to do for themselves.</p>
<p>Certainly there’s value in getting one project done a little more effectively than you might otherwise. If you can hire someone to work full-time on a project and guide the actions the team to improve the effectiveness for the duration, then I expect you’ll get enough marginal value that you might get some ROI. I’m skeptical about accomplishing that with the most cut-rate of coaches, though.</p>
<p>The true value of coaching, however, is to build the capability of the existing team. Rather than making choices for the team, the coach provides guidance about the choices available, perhaps making recommendations, and encouraging them to consider the options and choose their actions. The coach teaches the team about techniques or tools that increase their available choices. The coach offers observations about the team’s activities, and helps the team make it’s own observations and reflect on them. The coach helps the team articulate the results it wants, and generate courses of action to achieve those results. The coach partners with the team on the coaching process, but allows the team to exercise its own judgement about the software development practice. The coach does not become a member of the team, but endeavors to wean the team off of the need to consult with the coach on a regular basis.</p>
<p>There are consultants whose business model includes making the client more dependent on the consultant. That, to me, is not coaching. And that’s not the model of consulting that I choose.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=744&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2011/07/18/what-is-an-agile-coach/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Losing Customer Focus</title>
		<link>http://blog.gdinwiddie.com/2011/07/10/losing-customer-focus/</link>
		<comments>http://blog.gdinwiddie.com/2011/07/10/losing-customer-focus/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 17:37:06 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Working Software]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=735</guid>
		<description><![CDATA[Southwest Airlines has long been known for two things: low prices and attention to customer service. Since they instituted the &#8220;reserved place in line&#8221; so I wouldn&#8217;t have to stand for a long period of time, I have come to check their website first, and only rarely look for alternative flights. Sadly, they&#8217;ve taken their [...]]]></description>
			<content:encoded><![CDATA[<p>Southwest Airlines has long been known for two things: low prices and attention to customer service. Since they instituted the &#8220;reserved place in line&#8221; so I wouldn&#8217;t have to stand for a long period of time, I have come to check their website first, and only rarely look for alternative flights. Sadly, they&#8217;ve taken their eye off the ball. I suspect that the focus on customer service has been replaced by a focus on growth (given their in-progress takeover of Airtran).</p>
<p>Some months back, I noticed that their website had become bandwidth greedy with javascript doodads. This made it painfully slow on many hotel internet connections. They seem to have backed off from that a bit, but have now broken it in a way that prevents me from buying the ticket I want. (In addition, when I call the &#8220;Southwest Airlines Customer Representative for assistance&#8221; as prompted on the website, I find they no longer have enough to handle the call volume. I wonder if they&#8217;ve reduced the support, or if the call volume has increased, or both.)  There&#8217;s a lesson here about considering all of the important user stories when implementing new functionality, so it bears describing.<span id="more-735"></span></p>
<p>I went to the Southwest web site to purchase my ticket to Salt Lake City for the Agile2011 Conference. I took a look at the available flights on the appropriate travel dates. Then I remembered that I have an unused travel award, so I went to check if those dates were available, even at this late date. Hooray, they were! Boo hiss, the flights I want were not. Oh, well, it serves me right for putting this off so long.</p>
<p>So, I went back to buy the tickets with money. But when I search for the flights, instead of showing me the flights for purchase, it shows me the dates available for using my travel awards. I sign out of my account and try again. Now it gives me an error: &#8220;Oops! We are currently unable to complete your request due to an undefined error.&#8221; I try deleting cookies. I try closing the browser and re-opening it. No dice. Still, if I&#8217;m logged into the account it gives me the travel award availability dates, and if I&#8217;m logged out it gives me an &#8220;undefined error.&#8221;</p>
<p>I also notice that <strong>even after deleting cookies and restarting the browser</strong>, when I go to search for a flight it <em>remembers my airport and date selections</em>. This means that they&#8217;re keeping state on the server side, probably associated with my IP address (since I&#8217;ve logged out and deleted client side session data), and there&#8217;s <em>no way I can find to reset this state</em>.</p>
<p>In their attempt to be helpful, they&#8217;ve neglected to consider many common user scenarios. The Southwest website has long maintained enough state that you couldn&#8217;t do multiple searches in parallel to compare them and then select the one you wanted. But you could, in my experience, restart the search once you figured out which you wanted. Now there&#8217;s no mechanism I can find (and I&#8217;ve been struggling with this for over an hour) to take a purchase path that involves changing your mind and backtracking.</p>
<p>Am I the only indecisive customer? Or has Southwest forgotten the variability in the ways that humans approach things, and coded their website for a robotic &#8220;customer unit&#8221; that follows the one expected scenario?</p>
<p>More importantly, what do you and your organization do?</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=735&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2011/07/10/losing-customer-focus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Podcast: Acceptance Test Driven Development and the 3 Amigos</title>
		<link>http://blog.gdinwiddie.com/2011/06/14/podcast-acceptance-test-driven-development-and-the-3-amigos/</link>
		<comments>http://blog.gdinwiddie.com/2011/06/14/podcast-acceptance-test-driven-development-and-the-3-amigos/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 14:53:13 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ATDD]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[User Stories]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=705</guid>
		<description><![CDATA[Also while in Las Vegas for the ADP/West Conference, Bob Payne and I sat in the Agile Philanthropy booth and recorded a podcast on Acceptance Test Driven Development and the 3 Amigos. This is the latest in a series of Tips and Advice podcasts that Bob and I have done.]]></description>
			<content:encoded><![CDATA[<p>Also while in Las Vegas for the ADP/West Conference, Bob Payne and I sat in the Agile Philanthropy booth and recorded a podcast on <a href="http://agiletoolkit.libsyn.com/tips-and-advice-acceptance-test-driven-development-and-the-3-amigos-process">Acceptance Test Driven Development and the 3 Amigos</a>. This is the latest in a series of <a title="Tips &amp; Advice podcasts" href="http://agiletoolkit.libsyn.com/category/Tips%20and%20Advice" target="_blank">Tips and Advice podcasts</a> that Bob and I have done.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=705&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2011/06/14/podcast-acceptance-test-driven-development-and-the-3-amigos/feed/</wfw:commentRss>
		<slash:comments>0</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 [...]]]></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>5</slash:comments>
		</item>
		<item>
		<title>Long term focus</title>
		<link>http://blog.gdinwiddie.com/2009/08/30/long-term-focus/</link>
		<comments>http://blog.gdinwiddie.com/2009/08/30/long-term-focus/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 22:07:07 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Sustainability]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=191</guid>
		<description><![CDATA[My good friend, Steven M Smith, tweeted AGILE methods emphasize realizing short-term OBJECTIVES rather than creating long-term objectives and trying to satisfy them. I completely disagree with this statement.  I don&#8217;t agree that short terms objectives are the emphasis in Agile methods and I don&#8217;t agree that short term objectives are preferred over long-term objectives.  [...]]]></description>
			<content:encoded><![CDATA[<p>My good friend, <a title="Steven M Smith's website" href="http://www.stevenmsmith.com/" target="_blank">Steven M Smith</a>, <a title="the tweet" href="http://twitter.com/stevenMsmith1/status/3647939595" target="_blank">tweeted</a></p>
<blockquote><p><span><span>AGILE methods emphasize realizing short-term OBJECTIVES rather than creating long-term objectives and trying to satisfy them.</span></span></p></blockquote>
<p><span><span>I completely disagree with this statement.  I don&#8217;t agree that short terms objectives are the emphasis in Agile methods and I don&#8217;t agree that short term objectives are preferred over long-term objectives.  I think that Steve&#8217;s misunderstanding is rooted in the fact that he has only read about Agile methods, and not practiced them.  I think that it is impossible to get a deep understanding of Agile methods by reading without experiencing.  Therefore, I&#8217;d like to encourage Steve and others talking about Agile methods to try to get <em>some</em> experience before making such statements.  I&#8217;d also like to offer an explanation that attempts to clear up this particular misunderstanding.<span id="more-191"></span></span></span></p>
<p><span><span>Steve described (in a telephone conversation) &#8220;the good old days&#8221; when he would spend weeks or months documenting the objectives of a project in a detailed way that could be tested.  He noted that Agile projects don&#8217;t do this requirements definition phase.  So far, so good.  He then, however, made a leap to the conclusion that this was an indication that the long term objectives are deemphasized.  <em>Bzzztt!</em> Wrong answer.</span></span></p>
<p><span><span>Agile methods emphasize the long term objectives <em>every iteration</em>&#8211;or even every day.  I&#8217;ve previously blogged about <a title="What is Agile?" href="http://blog.gdinwiddie.com/2007/07/08/what-is-agile/" target="_blank">What is Agile?</a> In that posting, I noted that the fundamental definition of Agile (in my mind) was &#8220;</span></span>the use of feedback that is</p>
<ul>
<li>frequent</li>
<li>timely</li>
<li>aligned with our desired goals</li>
<li>pervasive&#8221;</li>
</ul>
<p>That &#8220;aligned with our desired goals&#8221; includes the long term goals.  Indeed, short term goals are mostly subservient to the long term goals.</p>
<p>The short term objective of delivering working software at the end of every sprint or iteration is a tool toward meeting the long term objectives of the Customer or Product Owner.  As the <a title="Agile Manifesto Principles" href="http://agilemanifesto.org/principles.html" target="_blank">Agile Manifesto Principles</a> state</p>
<blockquote><p>Working software is the primary measure of progress.</p></blockquote>
<p>They state this because working software can be compared against the long term objectives to see if those objectives are being realized, how much of those objectives have been realized, and if those objectives still represent what the Customer wants in light of what has been learned.</p>
<p>So, what&#8217;s happened to the expression of those long term objectives that used to be entombed in detailed requirements documents in &#8220;the good old days?&#8221;  Those objectives are now expressed in conversations with the Customer/Product Owner, who doesn&#8217;t &#8220;send the developers away to build two weeks worth of software,&#8221; but remains engaged in the process, clarifying, learning, and steering the project toward long term success.</p>
<p>At least, that&#8217;s the way it happens when things are done well.  There are often people playing the Customer/Product Owner role who came from the same &#8220;good old days&#8221; that Steve remembers, or whose organizations have a culture bound strongly to that phasist vision of software development.  In some cases, development <em>does</em> proceed without a vision of the long term objectives.  And yes, Steve, things don&#8217;t work so well when that happens.  This post is written to help those people understand a more effective approach that doesn&#8217;t throw out the baby of good things they know with the bathwater of phasist, predictive software development approaches.</p>
<p><em>Steve, I&#8217;ve tried to represent your position as clearly and fairly as I can.  If I&#8217;ve misinterpreted anything, please let me know or leave a comment here.</em></p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=191&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2009/08/30/long-term-focus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defect Prevention</title>
		<link>http://blog.gdinwiddie.com/2009/08/20/defect-prevention/</link>
		<comments>http://blog.gdinwiddie.com/2009/08/20/defect-prevention/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 14:03:56 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=180</guid>
		<description><![CDATA[Jim Shore posted a nice Introduction to Agile for QA People on his blog.   I thought it was great as far as it went, but it didn&#8217;t explicitly mention some of the things that I have found to be extremely important, at least, in the corporate IT environment.  I tried to leave a comment there, [...]]]></description>
			<content:encoded><![CDATA[<p>Jim Shore posted a nice <a title="Introduction to Agile for QA People" href="http://jamesshore.com/Blog/Introduction-to-Agile-for-QA-People.html" target="_blank">Introduction to Agile for QA People</a> on his blog.   I thought it was great as far as it went, but it didn&#8217;t explicitly mention some of the things that I have found to be extremely important, at least, in the corporate IT environment.  I tried to leave a comment there, but I was too long-winded for his comment system.  (If you&#8217;ve not read his post, please do so now.  I&#8217;ll wait.)  Here&#8217;s the full text of my comment:</p>
<p>Jim, I think you&#8217;ve left out, or under-emphasized, an aspect here.  It&#8217;s perhaps not explicitly called out in the XP literature, and isn&#8217;t mentioned by Scrum (neither of which mention the QA department as an entity), but it&#8217;s an important aspect in <em>successful</em> Agile adoptions in corporate IT environments, in my experience.  That aspect is Defect Prevention.<span id="more-180"></span></p>
<p>If the QA people take the normal approach of waiting to the end and then looking for bugs, they&#8217;re going to be outside of the tight feedback loops of Agile development.  It&#8217;s so much more effective, and more Agile, for QA to be intimately involved throughout the process.</p>
<p>You mention helping the business provide clear examples of what they want.  A good QA person can help the business elaborate those examples to cover situations that might not have been considered.  It&#8217;s generally good to do at least some of this example elaboration with both the business and the developers.  Having these three perspectives at the same time is hugely helpful in covering the ground thoroughly and uncovering the odd cases that will show up later as defects.</p>
<p>You mention writing automated non-functional tests.  I&#8217;d also add automated functional tests from the business point of view of the full system.  These are often not included in the tests produced by the developers.  Fundamentally, these are executable elaborations of the business examples mentioned above.  Fortunately, there are tools that allow this expression in language that the business people can read to verify, &#8220;Yes, that&#8217;s what I mean.&#8221;  For many testers, connecting this business-accessible language to the system under development will require the assistance of developers.  This is an example of the partnership between various members of the team working to prevent defects, as the resulting regression test is an important tool to protect against losing or changing old functionality when new is added.</p>
<p>You mention doing exploratory testing, but I would elaborate that to include doing exploratory testing of unfinished features. Long before you can &#8220;find bugs,&#8221; you can notice spots where the developer&#8217;s understanding of the business&#8217; desires are incomplete or slightly off-kilter.  Or, you can notice situations that were not foreseen when drawing up the business examples. Or, you can notice things that seemed reasonable when discussing them, but seem less so when seeing them on the screen. These should be brought to the attention of the business experts providing the wants of the business.</p>
<p>I know all of this is second nature to you, but it&#8217;s not to many of your readers.  The role of QA people in Agile development is much richer, more varied, and important than might be obvious from your description.  At least in corporate IT environments, I&#8217;ve found that this deeper involvement is important for success even when (or perhaps especially when) the development is following Scrum without the XP technical practices.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=180&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2009/08/20/defect-prevention/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Agility and Predictability</title>
		<link>http://blog.gdinwiddie.com/2009/01/16/agility-and-predictability/</link>
		<comments>http://blog.gdinwiddie.com/2009/01/16/agility-and-predictability/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 03:37:18 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Tools and Techniques]]></category>
		<category><![CDATA[Working Software]]></category>
		<category><![CDATA[Progress]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=106</guid>
		<description><![CDATA[I was reading the latest post on Johanna Rothman&#8217;s Managing Product Development blog.  In it she says, Serial lifecycles provide a (false) prediction. And, boy oh boy, is that prediction comforting to your senior managers. “When will the project be done?” might be their most-asked question. Of course, a serial lifecycle provides a prediction that’s [...]]]></description>
			<content:encoded><![CDATA[<p>I was reading the <a title="Why Your Senior Managers Like Serial Lifecycles" href="http://jrothman.com/blog/mpd/2009/01/why-your-senior-managers-like-serial-lifecycles.html" target="_blank">latest post</a> on Johanna Rothman&#8217;s Managing Product Development blog.  In it she says,</p>
<blockquote><p><strong>Serial lifecycles provide a (false) prediction</strong>. And, boy oh boy, is that prediction comforting to your senior managers. “When will the project be done?” might be their most-asked question. Of course, a serial lifecycle provides a prediction that’s almost guaranteed to be wrong, especially if you use a project scheduling tool. The tool provides you a single-point estimate, which is the first date you can’t guarantee the project won’t be done by–the first possible, optimistic date.</p></blockquote>
<p>I like that characterization of the predicted date.  Another characterization, usually true of serial lifeycles, is that the predicted delivery date is the first day of schedule slip.  I&#8217;ve seen many serial projects get almost to that date before they first admit that they&#8217;re in trouble.<span id="more-106"></span></p>
<p>There was a comment from Pawel Brodzinski to Johanna&#8217;s post saying,</p>
<blockquote><p>About <a title="Pawel Brodzinski's post about Agile and Predictability" rel="nofollow" href="http://blog.brodzinski.com/2008/08/another-advice-about-agile.html">predictability</a> I’d say it doesn’t have to be false. Waterfall project which was properly planned and is properly managed should end around deadline and should deliver functionalities specified in requirements.</p></blockquote>
<p>He&#8217;s right.  It doesn&#8217;t have to be false.  It usually is, however, because a serial lifecycle doesn&#8217;t give you any tools to manage schedule risk.  It <em>only</em> gives a prediction.  Experienced managers will guess the amount of padding to add to the schedule to give themselves a chance of meeting it.  Cautious but less-experienced managers will add a <em>lot</em> of padding, to increase their chances.  Of course, a development team working to meet a highly padded schedule may be so over-confident that they slow down to match, and then still miss the schedule if something unexpected happens.</p>
<p>In Pawel&#8217;s own blog post, he quotes <a title="Steve McConnell's take on Agility and Predictability" href="http://forums.construx.com/blogs/stevemcc/archive/2008/07/29/agile-software-business-impact-and-business-benefits.aspx" target="_blank">Steve McConnell</a> who describes an XP software development project that failed to produce a salable product because Customer (a.k.a. Product Owner, in Scrum terms) didn&#8217;t have a vision for a salable product.  For some reason, probably ignorance about Agile Software Development methods, Steve lays this failure on the development team creating one iteration at a time.  He apparently missed the practice of release planning.  When he says they &#8220;did it by the book,&#8221; they obviously didn&#8217;t use the book <a title="Planning Extreme Programming - on Amazon" href="http://www.amazon.com/exec/obidos/ASIN/0201710919/alberg30-20" target="_blank"><em>Planning Extreme Programming</em></a>, which was published only a year after the first edition of <a title="Extreme Programming Explained: Embrace Change - on Amazon" href="http://www.amazon.com/exec/obidos/ASIN/0201616416/alberg30-20" target="_blank"><em>Extreme Programming Explained: Embrace Change</em></a>.  Surely in two years the team could have read a second book.</p>
<p>Back to the point about Agility and Predictability, Steve says,</p>
<blockquote><p>True agility&#8211;which means adopting a posture that allows you to respond rapidly to changing market conditions and customer demands&#8211;conflicts with predictability. Some businesses value agility, but many businesses value predictability more than they value the ability to change direction quickly. For those businesses, becoming more Agile is a second level consideration; the first level consideration is how to become more predictable.</p></blockquote>
<p>Here, Steve seems to make the common mistake of using the dictionary definition of &#8220;agility&#8221; instead of checking the <a title="Agile Manifesto Values" href="http://agilemanifesto.org/" target="_blank">values</a> and <a title="Agile Manifesto Principles" href="http://agilemanifesto.org/principles.html" target="_blank">principles</a> of the Agile Manifesto.  The &#8220;Agile&#8221; of the manifesto is a brand name, of sorts, to replace the wimpy &#8220;light-weight methodology&#8221; term that was starting to be commonly used at the time.  It&#8217;s a good brand because Agile <em>does</em> allow you to change directions more easily.  But Agile doesn&#8217;t <em>require</em> you to change directions and it certainly does expect you to <em>have</em> a direction.</p>
<p><strong>How does Agile give you a predictable schedule?</strong> By giving you early, frequent, and fine-grained feedback and allowing you to steer the project to that schedule.</p>
<p>Let&#8217;s take a look at the release plan created at the start of the project.  First, write <em>story cards</em> for all of the features you want in your product.  These cards will generally be big stories, a.k.a. <em>epics</em>, and you&#8217;ll want to break them into smaller stories for development.  The big stories will work just fine for release planning, though.  Estimate the size of these cards.  I prefer estimating in <em>story points</em>, a fictional, unitless measure.  Some people like to start with <em>ideal engineering days</em>.  Either way, you have to guess how many of these your devlopment team can accomplish in a short iteration.  (I recommend one or two week iteration lengths.)  Count up the story points, divide by this guess, and you&#8217;ve got the number of iterations it will take to create the software.  This plan is <em>exactly the same</em> as the plan created by a serial lifecycle.  It&#8217;s just a guess&#8211;one made as carefully as our experience will allow&#8211;but still a guess.</p>
<p>Now develop software for one iteration.  How many story points did you accomplish?  Was this different than your guess?  If so, you may want to adjust your prediction to use this value instead of the guess.  Sometimes people may want to wait for three iterations before doing so, to let the team get up to speed, but they&#8217;re put on notice at the end of the very first iteration.  That makes a pretty good prediction, don&#8217;t you think?  And you can refine your prediction at the end of each iteration.  With a serial lifecycle, you&#8217;re either stuck with your original guess, or you get nervous enough that you make a new guess.</p>
<p><em>If wishes were horses, even beggars would ride.</em> My mother used to tell me that when I wanted something that was clearly out of reach.  Sometimes a software development team just can&#8217;t accomplish all of our wishes by the desired date.  We&#8217;ll see this as we replan our schedule at the end of each iteration.  And, unless the desires and capabilities are <em>completely</em> out of whack, Agile Software Development gives us the tools to meet the desired date anyway.</p>
<p>How can we meet the date when there&#8217;s too much to do?  We do the most important things first.  And we do things at a fine-grained level.  Instead of leaving whole features to the end, we leave &#8220;nice to have&#8221; refinements of features to the end.  And we then trim scope to fit the date.</p>
<p>We can do this if we&#8217;re getting each little story <em>done-done</em> as we go.  This includes testing, so we know it works the way we want.  And it includes automated regression tests, so we know it continues to work without getting buried by re-testing.  A serial lifecycle leaves this important feedback to the very end, when there&#8217;s little time to remedy problems that are discovered.  That late discovery leads to the lack of predictability produced by a serial lifecycle.  Agile Software Development gives you <em>more predictability</em> than those carefully planned-up-front project plans can provide.</p>
<p>Oh, and yes, it can provide the dictionary definition of agility, too, should your goals change.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=106&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2009/01/16/agility-and-predictability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A funny thing happened today</title>
		<link>http://blog.gdinwiddie.com/2008/09/12/a-funny-thing-happened-today/</link>
		<comments>http://blog.gdinwiddie.com/2008/09/12/a-funny-thing-happened-today/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 03:16:43 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2008/09/12/a-funny-thing-happened-today/</guid>
		<description><![CDATA[I applied for a new credit card. I wasn&#8217;t in the market for a new credit card. I shred credit card offers almost daily. No one sent me an offer that I found too irresistible. No, the funny thing is that my current credit card bank spent money and went to a lot of trouble [...]]]></description>
			<content:encoded><![CDATA[<p>I applied for a new credit card.  I wasn&#8217;t in the market for a new credit card.  I shred credit card offers almost daily.  No one sent me an offer that I found too irresistible.  No, the funny thing is that my current credit card bank spent money and went to a lot of trouble to convince me to open an account somewhere else.</p>
<p>It sounds very odd, doesn&#8217;t it?</p>
<p>Now I happen to know that this particular bank has worked to embrace Agile software development.  I know people who have worked with them to do so.  And I&#8217;m sure that, considering the size of the organization, they&#8217;ve made great strides in improving their software development practice.  Yet the events that transpired today tell me that they&#8217;re missing an important feedback loop&#8211;arguably <strong>THE</strong> important feedback loop&#8211;the one that involves the customer.</p>
<p>Here&#8217;s what happened:<span id="more-70"></span> I got an advertisement in the mail from them, offering bonus rewards when purchasing from certain of their business partners.  This advertisement was printed in full color on both sides of a cardstock trifold that folded down to about #10 envelope size for mailing.  It was mailed at presorted first class rates, not bulk mail.  This advertising campaign obviously cost some time and money and effort.</p>
<p>And it was effective.  I booted up a PC and headed to their web site to sign up for this program.  Huh?  I get an error message when I try to login.  I tried again.  No joy.  I called the 800 number.  And as I was punching buttons to get through the voicemail system, I recalled having a problem when I last tried to use their web site, about six months ago.</p>
<p>Well, the customer service people were apologetic, and they forwarded me to the tech support people.  The tech support people were apologetic, but explained that when online accounts weren&#8217;t used for a time, they expired the accounts.</p>
<blockquote><p>&#8220;But I don&#8217;t use the online account on a regular basis!&#8221;</p>
<p>&#8220;You don&#8217;t have to login every month, but you should do so every two months.  You&#8217;ll just have to register a new login.&#8221;</p>
<p>&#8220;You mean I can&#8217;t use the same login I had?&#8221;</p>
<p>&#8220;No, you have to use a login that no one&#8217;s used before.&#8221;</p></blockquote>
<p>This scheme is a non-starter for me.  I&#8217;d effectively be creating a one-time-use login every time I used the system.  And since I couldn&#8217;t use the login that comes naturally to me, I&#8217;d have to keep track of my current login ID in case I came back to the site in a short time.  But since I was assured there was no way to reuse the existing login ID, I asked to be transferred to someone who could change this policy.</p>
<p>Well, they <em>said</em> they were transferring me back to Customer Service.  But whether there was some error or they knew that there really wasn&#8217;t anyone who could change the policy, the call dropped and I had to call back.</p>
<p>The Customer Service person offered to connect me with a Supervisor, but warned that they had no power, either.  She confided that there was a &#8220;general correspondence&#8221; fax number that, if there were enough complaints, <em>might</em> get someone&#8217;s attention.  I took down the number.</p>
<p>But I don&#8217;t send many faxes, and it&#8217;s not convenient for me to do so.  I probably will send them a copy of this post, but I&#8217;m dealing with them as a customer, not as a consultant.  Is it worth my time to help them straighten out their business processes?  Hence the application to their competitor.  Maybe they&#8217;ll be better.</p>
<p>An Agile development team works hard to deliver exactly what satisfies their Customer (in XP terms) or Product Owner (in Scrum terms).  There are numerous feedback mechanisms to measure how well that satisfaction is produced, and this can be used to steer the project.  It&#8217;s customary in larger organizations (and sometimes in smaller ones) for the person (or people) playing the role of Customer to be a proxy for other parties who have an interest in the success of the venture.  These other parties may be User Experience people, Marketing people, high-level Executives&#8230;.  These people, in turn, are often proxies for others. It can be a long chain of proxies before it reaches the end-user customer-who-buys-the-service.</p>
<p>What this company has done, is to effectively prevent any feedback from those end-user customers from reaching people who make the decisions.  The problem is not that they have written a policy into the software that does not work for their customers.  Everybody makes mistakes.  The real problem is that there&#8217;s no feedback mechanism for discovering their mistakes until enough customers leave that the Accounting office notices.  And the Accounting office may never notice, given that this is business as usual for them.</p>
<p>So, how is it in your company?  Do you work hard to create a web site to be the center of your customers&#8217; lives?  Do you let the viewpoint of that website overrule the viewpoint of the marketeers trying to increase revenues?  Do you have a mechanism or process to measure the effectiveness with real customers?  And, perhaps most important of all, do you have a communications channel to allow receiving information from real customers who take the trouble to let you know when you&#8217;ve made a mistake?</p>
<p><a href="http://blog.gdinwiddie.com/2006/12/16/its-all-about-feedback/">It&#8217;s all about feedback</a>.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=70&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2008/09/12/a-funny-thing-happened-today/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Combined backlog for multiple projects</title>
		<link>http://blog.gdinwiddie.com/2007/12/03/combined-backlog-for-multiple-projects/</link>
		<comments>http://blog.gdinwiddie.com/2007/12/03/combined-backlog-for-multiple-projects/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 03:22:47 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Context Switching]]></category>
		<category><![CDATA[Portfolio Management]]></category>
		<category><![CDATA[Product backlog]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2007/12/03/combined-backlog-for-multiple-projects/</guid>
		<description><![CDATA[Our teams sometimes have multiple projects. I am wondering what is the best way and what is the SCRUM way of handling this. My feeling is that the best way is to have a single backlog per team (even if this means that in a sprint the team is working on backlog items belonging to [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Our teams sometimes have multiple projects. I am wondering what is the best way and what is the SCRUM way of handling this. My feeling is that the best way is to have a single backlog per team (even if this means that in a sprint the team is working on backlog items belonging to multiple projects). I think the purists will recommend splitting the team and having multiple backlogs.</p></blockquote>
<p>That&#8217;s what Gilad Gruber <a href="http://groups.yahoo.com/group/scrumdevelopment/message/25569">asked on the Scrumdevelopment list</a>.  This question reminded me of a client I once had.<span id="more-54"></span>This client did split the team and used multiple backlogs.  It was very convenient for the Product Owners.  The could each concentrate on their own piece of the pie and ignore the needs of the business as a whole.  Had it worked well, I might never have worked with them.  What went wrong?</p>
<p>First, it took a lot of pre-planning by the development manager to allocate developers to the various areas of the business.  It&#8217;s not easy to guess, a year in advance, how much development capacity each would need.  And since the development capacity was split by assigning developers to the business line, the allocation was more-or-less static for the year (unless you wanted to re-do this guessing more than once).  But each Product Owner got his or her own piece of the pie&#8211;something they could count on having and not worry about sharing.  Except when it didn&#8217;t work out that way.</p>
<p>Given the number of developers and number of product owners, it was not practical to split the teams into integer numbers.  As it was, the developers assigned to any product owner was a small team, from two to five to a team.  Some of the developers had skills in short supply, so they might be assigned on a percentage basis to two or three Product Owners.  While this made the teams bigger (though still a little small), it also split the attention of the developers.  Estimates being estimates, and the work to satisfy a Product Owner being lumpy from time to time, the hours and percentages of developers didn&#8217;t always work out easily.  It was left up to the developers to make things work.  Usually they&#8217;d negotiate with the Product Owner whose work was being delayed for another, but not always.  In any event, it was the developers who were making the decisions about which work had priority.</p>
<p>I&#8217;ve described a situation here where development management is making the large-scale priority decisions balancing between business groups, and developers are making the short-term priority decisions of what gets done first.  Wouldn&#8217;t it be so much better if the business people could get together and decide business priority instead?</p>
<p>Gilad, I highly commend your suggestion of a single &#8220;product&#8221; backlog per team, even though it may contain stories from multiple projects.  It may even be that stories for multiple projects are picked for a single sprint, just because that&#8217;s how the sprint boundaries and priorities fall out.  Yes, it&#8217;s true that it&#8217;s better (more efficient) if the team concentrates on one thing at a time, but that&#8217;s a small price and the team will probably work it out OK.  It&#8217;s much more important to have clear priorities based on business value.  And if the business can&#8217;t decide what&#8217;s most important, they should solve that problem rather than abdicate to development.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=54&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2007/12/03/combined-backlog-for-multiple-projects/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Software Development is not a Commodity</title>
		<link>http://blog.gdinwiddie.com/2007/07/29/software-development-is-not-a-commodity/</link>
		<comments>http://blog.gdinwiddie.com/2007/07/29/software-development-is-not-a-commodity/#comments</comments>
		<pubDate>Sun, 29 Jul 2007 22:21:55 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Sustainability]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2007/07/29/software-development-is-not-a-commodity/</guid>
		<description><![CDATA[Esther Schindler, a senior editor and columnist at CIO.com, recently asked on the agile-testing yahoogroup, If you could get the (client) boss(es) to understand JUST ONE THING about computer consulting and contracting, what would it be? It would be that software development is not a commodity. The cost-value equation is not just enhanced by cutting [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://advice.cio.com/user/esther-schindler">Esther Schindler</a>, a <a href="http://www.cio.com/author/41421/Esther+Schindler">senior editor</a> and <a href="http://advice.cio.com/taxonomy/term/34">columnist</a> at CIO.com, recently <a href="http://tech.groups.yahoo.com/group/agile-testing/message/11985">asked on the agile-testing yahoogroup</a>,</p>
<blockquote><p>If you could get the (client) boss(es) to understand JUST ONE THING about computer consulting and contracting, what would it be?</p></blockquote>
<p>It would be that software development is not a commodity.  The cost-value equation is not just enhanced by cutting costs, but more effectively, by enhancing value.  It&#8217;s not just a matter that software is produced, but what software is produced.  Does that software clearly express the nature of the business?  Is it an asset that can be extended and adapted as the business grows and changes?  All too often, the only measure applied seems to be the hourly cost of the software production (neglecting even the number of hours required).  Too often I get the feeling that I, the consultant, pay more attention to the long-term value to the company than do the employees and executives of the company.<span id="more-42"></span></p>
<p>I can sympathize that the value of software can be very hard to measure.  This value has two components.  The external component is the costs saved, or the income received, by having the software rather than not having it.  These sorts of measures are dependent on estimates and assumptions, and therefore imprecise.  They are the sorts of estimates and assumptions that the marketing and accounting departments are accustomed to make.  The CIO can simply ask for these, assuming there is sufficient trust in the organization.  Asking for an explanation of the rationale behind the estimates can strengthen your sense of trust if it&#8217;s weak.</p>
<p>The internal component is the foundation which this software provides for building the next software you need.  This component falls naturally into the IT realm, but how do you measure it?  From an executive office, the internal quality of the code is invisible.  You could ask the opinion of a trusted technical person in your organization&#8211;but you may be worried that they, having a hand in guiding the creation of the software, will take a less-than-critical look.  You could ask an external consultant for an assessment&#8211;but you may be worried that they will merely tell you what they think you want to hear.  Or that they may tell you what they think will fuel your fears and provide them with future work.</p>
<p>If asking others for an opinion is an unreliable means of ascertaining the internal quality of your software, what might you observe to infer it yourself?  As I mentioned above, one characteristic that &#8220;good&#8221; software has is that it&#8217;s more easily extended and adapted.  You might look at how your organization reacts when asked to extend or adapt an existing program.  Do they groan and suggest a ground-up rewrite?  Or do they smoothly provide the modifications as if they were expecting them to come?  Do such modifications seem harder over time (a sign of increasing &#8220;technical debt&#8221;) or do things seem more stable?  You&#8217;ll find it easier to monitor the ease and success of such modifications if you have lots of smaller projects rather than a few big ones.</p>
<p>Now that you&#8217;ve started monitoring (albeit indirectly) the quality of your code, how do you go about improving it?  Outsourcing may reduce your costs, but is unlikely to increase the value.  A contracting company, particularly one in the outsourcing business, is most likely to do the minimum work necessary in order to cut costs and ensure winning the bid.  The sort of quality that enables long-term success requires just a bit more than the rock-bottom minimum effort.  Even if the outsourcing company does an excellent job, the knowledge of the software internals and how it maps to the business of your company will not be known by your own employees.  When next you want modifications made, you&#8217;ll find you&#8217;re even more likely to go with that outsourcing company, as they know the business better than your own IT department.</p>
<p>Long-term success is more likely to result from investing in your own capabilities.  Train your own employees to produce the kind of quality that can support the company through the inevitable coming storms.  Build a culture of excellence and knowledge.  That culture will remain, even as employees come and go.  Make it possible, no, make it easy for your employees to share their knowledge and learn from each other.  By all means, bring in outside contractors and consultants to help where needed, but bring them into your organization in a fashion such that your employees learn from them&#8211;increasing your internal capabilities.  Those you bring in should not only increase your capacity while they&#8217;re there, but leave behind an increased capacity after they&#8217;ve gone.</p>
<p>There is an old saying in organic gardening,</p>
<blockquote><p>Feed the soil, and the soil will feed the plant.</p></blockquote>
<p>I&#8217;ve seen this attributed variously to Dr. William A. Albrecht, a former chairman of the University of Missouri&#8217;s Department of Soils, and to Robert Rodale, son of J. I. Rodale who founded Rodale Press and Organic Gardening magazine.  Whoever coined the phrase, it illustrates the greater value of creating an environment for success, rather than focusing solely on the immediately desired success.  Similarly, as Franklin D. Roosevelt noted that</p>
<blockquote><p>The Nation that destroys its Soil, destroys itself,</p></blockquote>
<p>so does the Company that destroys its IT Capability, destroys itself.  The dependence of business on IT isn&#8217;t going away any time soon.  Any business that must depend on others for core development functions will be left begging when times are hard.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=42&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2007/07/29/software-development-is-not-a-commodity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is Agile?</title>
		<link>http://blog.gdinwiddie.com/2007/07/08/what-is-agile/</link>
		<comments>http://blog.gdinwiddie.com/2007/07/08/what-is-agile/#comments</comments>
		<pubDate>Sun, 08 Jul 2007 19:36:30 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Customer Collaboration]]></category>
		<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Feedback]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2007/07/08/what-is-agile/</guid>
		<description><![CDATA[There&#8217;s a thread on the Extremeprogramming yahoogroup attempting to define Agile. John Roth started this thread with a trial balloon of ways to recognize an Agile project from easily observed practices. I have a bit of difficulty with this definition; I think that it&#8217;s too prescriptive and, while it could be a useful heuristic, would [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s <a href="http://tech.groups.yahoo.com/group/extremeprogramming/message/133123">a thread on the Extremeprogramming yahoogroup attempting to define Agile</a>.  John Roth started this thread with a trial balloon of ways to recognize an Agile project from easily observed practices.  I have a bit of difficulty with this definition; I think that it&#8217;s too prescriptive and, while it could be a useful heuristic, would miss the mark in numerous cases.  To my mind, it doesn&#8217;t zero in on the heart of Agile practice.</p>
<p>So what is the heart of Agile practice?  In the ensuing discussion, <a href="http://tech.groups.yahoo.com/group/extremeprogramming/message/133134">Dale Emery posts a message</a> the turns attention to feedback.</p>
<blockquote><p>The whole team focuses intensely on producing accurate, relevant, timely feedback about product, project, and process.</p></blockquote>
<p>I&#8217;ve written about <a href="http://blog.gdinwiddie.com/2006/12/16/its-all-about-feedback/">the importance of feedback</a>, before.  Using feedback is not the defining aspect of Agile, of course.  Using feedback is the basic mechanism for any control system. <span id="more-38"></span> As <a href="http://tech.groups.yahoo.com/group/extremeprogramming/message/133144">Kelly Anderson puts it</a>,</p>
<blockquote><p>The core of any successful human endeavor is timely and accurate feedback. Human beings learn from feedback. Some may argue that it is the ONLY way humans learn. If you believe the neural networks folks, it&#8217;s ALL feedback.</p></blockquote>
<p>I have some minor quibbles with that statement, though I fundamentally agree.  Sometimes we get lucky and hit the target without feedback.  As Kelly later says, &#8220;Give a trained marksman a good rifle, and he can hit the target with the first shot.&#8221;  This is an example of a good first guess.</p>
<p>Also, I don&#8217;t think the importance of feedback is restricted to human endeavors.  Control systems work by comparing the actual with the desired, and using some portion of the resulting error measurement as an input to the system to reduce that particular error in the future.  Amplifier design controls the gain by the same method, feeding some of the output back to the input.  In both of these cases, there is an inversion of the signal being fed back, hence the technical term &#8220;negative feedback.&#8221;  That&#8217;s the mathematical &#8220;negative,&#8221; not a value judgment.  In Jerry Weinberg&#8217;s <a title="View product details at Amazon" href="http://www.amazon.com/gp/redirect.html%3FASIN=0932633226%26tag=alberg30-20%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/0932633226%253FSubscriptionId=0EMV44A9A5YT1RVDGZ82"><em>Quality Software Management: Systems Thinking</em></a> and Peter Senge&#8217;s <em><a title="View product details at Amazon" href="http://www.amazon.com/gp/redirect.html%3FASIN=0385517254%26tag=alberg30-20%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/0385517254%253FSubscriptionId=0EMV44A9A5YT1RVDGZ82">The Fifth Discipline: The Art &#038; Practice of The Learning Organization</a></em>, the authors show how this feedback is essential in managing and learning.  This is true even with self-organizing teams.  Feedback is the basic means of steering, so that we correct as we go rather than just close our eyes and head in the direction we initially chose.</p>
<p>So, if feedback is important to the practice of Agile, but is used in all controlled processes and isn&#8217;t solely the domain of Agile, what makes Agile, Agile?  As <a href="http://homepage.mac.com/themckennas/iblog/B473316818/index.html">Jeff McKenna stated</a> years ago,</p>
<blockquote><p><font face="Helvetica">Why, it is the taking of small steps.</font></p></blockquote>
<p>If feedback is applied frequently (or continuously), a control system will track the desired output much more closely, with smaller errors and, therefore, smaller corrections.  If you&#8217;re driving a car and adjust the steering wheel only every 10 feet,  your path will be rather jerky compared to that if you adjust the steering wheel every foot.  Of course, it&#8217;ll still be much better than if you would adjust every 100 feet.  Working in smaller increments allows you to adjust to minor perturbations before they become major ones.</p>
<p>Feedback also needs to be timely.  Delays in feedback cause control systems to become unstable.  They cause amplifiers to become oscillators&#8211;howling out of control like Jimi Hendrix&#8217; guitar.  If you adjusted the steering wheel every foot, but based on the input you received 10 feet ago, you&#8217;ll weave down the road like a drunk driver.  (In fact, delayed reaction time is exactly why drunk drivers weave down the road.)  Ten feet ago, you might have been on the right side of the lane, so you decide to adjust the wheel to the left.  If you&#8217;re now on the left side of the lane, that &#8220;correction&#8221; is exactly the wrong thing to do, increasing the error rather than reducing it.  It&#8217;s inevitable that your adjustments become larger and larger until you run off the road.</p>
<p>Kelly also points out that &#8220;Inaccurate feedback is also destructive.&#8221;  Destructive might not always be the right word.  In an amplifier, for example, if the amount of feedback is different for different frequencies, the amplifier becomes a filter.  That may be what&#8217;s desired, or it may not.  You could, for example, ignore the end-user feedback about the aesthetics of your software, but pay attention to feedback about the functionality.  That would arguably produce a better functioning product, if not a pretty one.  As function is, perhaps, a more objectively measured attribute than aesthetics, this might be a good trade-off.  Or, it might not.</p>
<p>Agile chooses, as a desired goal, working software that meets the Customer&#8217;s needs.  Note that, for practical reasons, this Customer role (Product Owner, in Scrum), is a proxy for all the stakeholders who desire the creation of the software.  If the person(s) filling this role make &#8220;bad&#8221; choices that don&#8217;t represent those stakeholders, that would illustrate the destructive &#8220;bad feedback&#8221; that Kelly mentions.  Suppose that Customer desires elaborate design documents rather than software?  Or measures lines of code produced rather than useful functionality?  If you think about this, you can see where the XP testing practices promote working software that meets customer needs rather than the predictable outputs of such misguided measures.  The feedback must be aligned with our real goals.</p>
<p>Feedback that is only produced by the completion of the desired software, though, would be neither timely nor frequent.  Don Wells has <a href="http://www.extremeprogramming.org/map/loops.html">an excellent graphic</a> of feedback loops that operate on different time scales.  Good pair programming gives us feedback from our pair about many aspects of our programming.  Unit tests give us feedback that our code does what we think it does.  There is feedback at all levels of software development.  Then, also, retrospectives give us feedback on our software development process.  The feedback must be pervasive.</p>
<p>What about the other XP values?  Ultimately, I think they all resolve to feedback, too.  Communication is how feedback happens.  Simplicity makes feedback more frequent, and also enhances the communication.  Courage allows communication, and hence feedback, to happen even in difficult situations.  Respect allow communications to happen between people; without respect there is little communication even if there are lots of words.</p>
<p>So, what is Agile?  I think it is the use of feedback that is</p>
<ul>
<li>frequent</li>
<li>timely</li>
<li>aligned with our desired goals</li>
<li>pervasive</li>
</ul>
<p>All the rest either supports this feedback, or is window-dressing.</p>
          <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=38&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2007/07/08/what-is-agile/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

