<?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; Responding to Change</title>
	<atom:link href="http://blog.gdinwiddie.com/category/responding-to-change/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gdinwiddie.com</link>
	<description>Effective software development</description>
	<lastBuildDate>Fri, 06 Aug 2010 13:37:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>3 Legs to Running an Agile Transition</title>
		<link>http://blog.gdinwiddie.com/2010/05/12/3-legs-to-running-an-agile-transition/</link>
		<comments>http://blog.gdinwiddie.com/2010/05/12/3-legs-to-running-an-agile-transition/#comments</comments>
		<pubDate>Wed, 12 May 2010 17:29:08 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Change]]></category>
		<category><![CDATA[Coaching]]></category>
		<category><![CDATA[Progress]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=457</guid>
		<description><![CDATA[A while back, I wrote 3 Legs to Standing Up an Agile Project from the perspective of an Agile team just getting started.  Lately, I&#8217;ve been thinking about the same sort of thing, but from the perspective of a coach or an executive that wants to transform the organization.  At first glance, this seems no [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, I wrote <a title="earlier blog post" href="http://blog.gdinwiddie.com/2010/02/18/3-legs-to-standing-up-an-agile-project/">3 Legs to Standing Up an Agile Project</a> from the perspective of an Agile team just getting started.  Lately, I&#8217;ve been thinking about the same sort of thing, but from the perspective of a coach or an executive that wants to transform the organization.  At first glance, this seems no different. Further reflection, however, reveals that this is less about &#8220;how to work in an Agile fashion&#8221; and more about &#8220;how to introduce change in the way people work.&#8221;  The earlier post was a description what an Agile project needs.  This one is a recipe for creating what an Agile project needs.<span id="more-457"></span></p>
<h1>Teamwork</h1>
<p>The fundamental practice of teamwork remains essential.  Agile succeeds in large part by reducing wasted effort, and much wasted effort is the result of various people pulling in different directions.  Even slightly different directions will create enough friction to noticeably slow the project.  It&#8217;s well worth spending some time and effort on building an effective team within the context of the project.  The two practices most essential for supporting teamwork in an Agile transition are working with a <strong>whole team</strong> in a <strong>common area</strong>.</p>
<h2>Whole Team</h2>
<p>While collaborative teamwork among all the developers, for example, is beneficial to any project, it&#8217;s not enough to accomplish a transition to Agile.  At a core, you&#8217;ll need high-bandwidth collaboration between your Product Owner, Scrummaster, and Developers.  This is the minimum, in Scrum terms.  In most organizations, Developers really includes both programmers and testers; in some it includes user experience designers.  Yours may include people with other titles, such as architect, database administrator, security officer, system administrator, operations engineer, technical writer&#8230;.</p>
<p>Your project community will also consist of other stakeholders, such as executives, customers, end users, support personnel, other development teams, facilities maintenance&#8230;. There are a lot of people with interest in the project or the things that the project team is doing.</p>
<p>The boundary between the core team and the rest of the project community is rarely distinct.  One useful distinction is whether a person is focused principally on the project, or whether the project is just one of many things with which the person is concerned.  This distinction is not without peril, however.</p>
<p>All too often an organization will assign multiple projects to people where it would be much better if they were focused on one.  If you give your Product Owner, your programmers, or your testers multiple simultaneous projects, you&#8217;re likely headed for trouble.  You <em>may</em> be headed for trouble if you multi-task in some of the other specialties, but there&#8217;s more variation from one context to another.  As a rule of thumb, if there is any way to let someone focus on only one project, then you should do so.</p>
<h2>Common Area</h2>
<p>Building a team, which is different from a mere work group, takes a lot of work.  With skill, you can facilitate that teambuilding to help it happen more reliably and a little faster.  If you don&#8217;t have a skilled facilitator, though, you&#8217;re still in luck.  People have practiced self-organizing into small groups for their common good for millennia. If they&#8217;re working together for a common goal in a common area, distinct from those working on other goals, they&#8217;ll likely build a gelled team without an outside facilitator.  There are many reasons for this, from trust building to osmotic communication.</p>
<p>&#8220;But we can&#8217;t do that,&#8221; I hear you cry!  Why not?  Is this project, this Agile transition, so unimportant that you can&#8217;t sit together?</p>
<p>&#8220;Our Product Owner has an office elsewhere, and needs to attend to other things.&#8221; Maybe you&#8217;ve chosen the wrong product owner.  Maybe the Product Owner can sit in the team room for part of the day.</p>
<p>&#8220;Our project team is scattered around the globe.&#8221;  Don&#8217;t do that.  While it&#8217;s possible for people scattered around the globe to work together, it&#8217;s much harder.  The odds of making that work <em>while also making an Agile transition</em> are slim to none.  <a title="earlier blog post on distributed development" href="http://blog.gdinwiddie.com/2010/03/31/distributed-development/">If you must do distributed projects</a>, set up a collocated team at each location and minimize the working dependencies between the teams.</p>
<p>&#8220;We don&#8217;t have a space that supports that.&#8221;  Find or make one.  Move furniture.  Take down cube walls.  Set up temporary or movable partitions.  If the furniture arrangement is more important than the project, consider canceling the project.</p>
<h1>Visible Progress</h1>
<p>In order to see whether or not we&#8217;re headed toward our goals, we need visibility into the progress.  Usually, this boils down to the questions &#8220;Are we going to get everything done?&#8221; and &#8220;Are we going to get done in time?&#8221;  If the answer to one or more of these questions is &#8220;no&#8221; then we can make adjustments to how we&#8217;re doing things, how much (and which things) we expect to get done, and what time we expect to have them done.  We can subdivide this visibility into two simple practices: taking <strong>baby steps</strong> and getting things <strong>done</strong>.</p>
<h2>Baby Steps</h2>
<p>Everything we do, from releasing interim versions down to validating the code we write, we should do in small steps.  Working in small steps gives us a much finer-grained view of the progress.  It lets us view the initial trends sooner.  It lets us view changes in the trends sooner.  It gives us more opportunities to make corrections or course changes.  It gives us more practice and comparing where we&#8217;re going with where we want to go, so we get better at doing that.  It requires less work before we see that we&#8217;re doing something wrong, or doing the wrong thing, therefore there is less work to be thrown away and redone.</p>
<h2>Done</h2>
<p>There&#8217;s little point in measuring something as progress unless we know that it actually contributes toward reaching our goal.  Measuring amount of work done doesn&#8217;t tell us that.  Consider this scene from the movie, <a title="Captain Ron on IMDB" href="http://www.imdb.com/title/tt0103924/" target="_blank">Captain Ron</a>:</p>
<blockquote><p><strong>Captain Ron</strong>: We should be okay. &#8216;Cause I know we&#8217;re near land.<br />
<strong>Martin Harvey</strong>: Great, Cap. Great. Ya hear that? We&#8217;re almost there. Explain to the kids how you know that, Captain Ron. Someone translate for General Armando.<br />
<strong>Captain Ron</strong>: Alright, now stay with me: When we left, we had just enough fuel to make it to San Juan. And we are out of fuel.</p></blockquote>
<p>The gap in that logic is immediately obvious, but plan-driven projects attempt the equivalent all the time. We must measure relative to the goal, not relative to the path we&#8217;ve taken.</p>
<p>It&#8217;s important that we measure functional slices. It&#8217;s often tempting to measure tasks that have been accomplished. Sometimes, however, these tasks turn out to be unnecessary, and they don&#8217;t contribute to accomplishing the goal.  Sometimes, while they look right in isolation, they turn out to have flaws when we look at the bigger picture.  Sometimes they don&#8217;t quite meet with other tasks, and there is a gap to be filled between the tasks.  Such a gap in unknown undoneness.</p>
<p>We need ways of seeing progress that won&#8217;t like to us about how much progress we&#8217;ve made, or how much is left to do.  We want to measure functional slices that go <em>all the way</em> through the system.  It&#8217;s easy to neglect some of the things that people think of &#8220;someone else&#8217;s responsibility&#8221; after the system is &#8220;complete.&#8221;  These things might include an installation procedure, or deployment to a different computing environment.  Sometimes people neglect something so basic as testing that the system works.</p>
<p>We want to see functional progress&#8211;something we can demonstrate and test, something we know is desirable.  Expending the amount allotted is not such an indication.  Getting most of the way to the goal is no guarantee that we&#8217;ll get the rest of the way there&#8211;particularly when the remaining part is fundamentally different than what we&#8217;ve been doing.  We want to always, or at least at frequent intervals, be able to stop and have something that can be used, even if incomplete.</p>
<p>Putting these together can be difficult for a team making a transition to Agile.  It&#8217;s hard enough to get everything working, but much more so when you&#8217;re having to do that all the time.</p>
<p>Fortunately there are a lot of well-known engineering practices to support combining baby steps with getting to done at each step.  I&#8217;m starting with the assumption that the team is already capable of creating working software using whatever techniques they already know.  Eventually they&#8217;ll need to learn other practices to support this new way of working, and even to get better in general.</p>
<h1>Continuous Improvement</h1>
<p>Being able to work as a team and measure progress in a visible manner is only the start.  At first, we&#8217;ll do these things in a rather rough manner.  As the system grows in size and complexity, that rough manner won&#8217;t sustain forward progress.  We&#8217;ve got to get better in order to keep moving.</p>
<p>And there&#8217;s no limit to how good we can get.  No matter how practiced we are, there&#8217;s further improvement we can make.  If we conscientiously practice our techniques, we&#8217;ll see places where we can improve them.  We can then practice those improvements, so they become a part of our routine, and we do them even when distracted by the latest disaster.  When things go wrong, it&#8217;s no time to ease off on the practices that make us more effective.</p>
<p>As a team, we need to take stock from time to time to see the longer term trends, both good and bad, and the issues that only become visible in retrospect.  Holding retrospectives at various tempos&#8211;each iteration, each quarter, each release&#8211;will give us various views into what we&#8217;re doing, and result in different insights.  We must use these insights to plan ways in which to improve in the future.</p>
<p>From these starting points of <strong>teamwork</strong> and <strong>visible progress</strong>, and proceeding with a program of <strong>continuous improvement</strong>, we can learn all of the practices that support Agile development.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=457&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2010/05/12/3-legs-to-running-an-agile-transition/feed/</wfw:commentRss>
		<slash:comments>1</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 [...]]]></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>10</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>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>More on Agile Usability</title>
		<link>http://blog.gdinwiddie.com/2008/12/08/more-on-agile-usability/</link>
		<comments>http://blog.gdinwiddie.com/2008/12/08/more-on-agile-usability/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 02:43:19 +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[Agile]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/?p=86</guid>
		<description><![CDATA[I recently wrote about Agile Usability.  Now I find an article on StickyMinds, &#8220;Getting Agile With User-Centered Design,&#8221; by Jon Dickinson and Darius Kumana.  They talk about a number of issues that can come up.  My favorite bit is this: We must actively challenge the mindset of divided responsibility&#8211;&#8221; You spec and design it; we&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<p>I recently wrote about <a href="http://blog.gdinwiddie.com/2008/11/28/agile-usability/">Agile Usability</a>.  Now I find an article on StickyMinds, &#8220;<a href="http://www.stickyminds.com/BetterSoftware/magazine.asp?fn=cifea&amp;ac=384" target="_blank"><em>Getting Agile With User-Centered Design</em></a>,&#8221; by <span class="Text">Jon Dickinson and Darius Kumana.  They talk about a number of issues that can come up.  My favorite bit is this:</span></p>
<blockquote><p><span class="Text">We must actively challenge the mindset of divided responsibility&#8211;&#8221; You spec and design it; we&#8217;ll build what you spec.&#8221; Everyone should work toward the shared vision of a successful experience.</span></p></blockquote>
<p>That says so elegantly what I tried to say in my article.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=86&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2008/12/08/more-on-agile-usability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AYE 2008 &#8211; Moving Projects Forward: The Clinic Method</title>
		<link>http://blog.gdinwiddie.com/2008/11/29/aye-2008-moving-projects-forward-the-clinic-method/</link>
		<comments>http://blog.gdinwiddie.com/2008/11/29/aye-2008-moving-projects-forward-the-clinic-method/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 21:36:43 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Tools and Techniques]]></category>
		<category><![CDATA[Coaching]]></category>
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2008/11/29/aye-2008-moving-projects-forward-the-clinic-method/</guid>
		<description><![CDATA[As I slowly work through my notebook from the Amplifying Your Effectiveness Conference (having blogged about sessions on Unearthing the Data You Need, Remembering Your Resources When Stressed, and Congruent Coaching), I come to Jerry Weinberg&#8217;s session of Tuesday afternoon, Moving Projects Forward: The Clinic Method. As long as projects are staffed and led by [...]]]></description>
			<content:encoded><![CDATA[<p>As I slowly work through my notebook from the <a target="_blank" href="http://www.ayeconference.com/">Amplifying Your Effectiveness Conference</a> (having blogged about sessions on <a href="http://blog.gdinwiddie.com/2008/11/09/aye-2008-unearthing-the-data-you-need/">Unearthing the Data You Need</a>, <a href="http://blog.gdinwiddie.com/2008/11/10/aye-2008-remembering-your-resources-when-stressed/">Remembering Your Resources When Stressed</a>, and <a href="http://blog.gdinwiddie.com/2008/11/13/aye-2008-congruent-coaching/">Congruent Coaching</a>), I come to Jerry Weinberg&#8217;s session of Tuesday afternoon, <em>Moving Projects Forward: The Clinic Method<em>.</em></em></p>
<p>As long as projects are staffed and led by people, we can be sure that they will sometimes get stuck, or headed in the wrong direction, or something.  This is true no matter what sort of methodology you follow.  Even if the methodology is perfect, the people following it are not.  They will make mistakes.  They will have blind spots, and not see what it is that they&#8217;re not seeing.  Projects will still get in trouble.  (Yes, even Agile projects.)</p>
<p>So, what do you do about this certainty? <span id="more-77"></span>Jerry suggests The Clinic Method.  What&#8217;s this?  It&#8217;s a nurses&#8217; station for projects that are sick.  If a project manager or product owner or scrum master or anyone feels that a project is in trouble, it&#8217;s a place to go for help.  Get five or six of your best people and have them meet for half a day, once a week.  Choose people who are</p>
<ul>
<li>good problem solvers</li>
<li>good communicators</li>
<li>good decision makers</li>
<li>and who understand the business</li>
</ul>
<p>Don&#8217;t choose everyone by the same criteria&#8211;you want diversity on this team.  You can also rotate people through this committee, but on a staggered basis so you don&#8217;t change them all at once.  Publicize this meeting so that anyone with a concern can attend and ask for help.</p>
<p>What does this team do when someone brings a problem?  They <em>don&#8217;t</em> solve the problem.  They help <em>that person</em> come up with a positive step to move forward.  Remember:</p>
<blockquote><p>The problem is not the problem.  The <em>coping</em> with the problem is the problem.</p></blockquote>
<p>So you dig down for the underlying issues.  You triage the issues and pick out what&#8217;s a real bottleneck.  And you help the person in need come up with some strategies for a solution, and at least one step they can take immediately.  That step may be a small as gathering some necessary information that they don&#8217;t have, and bringing that information back the next week.</p>
<p>We played roles and gave this a try.  I was fortunate to have an opportunity to play both a person with a problem, and a person on the clinic team.  Being on the clinic is not easy.  You have to think hard, and bring all your experience to bear to generate insights.  And you have to listen and understand what others are saying (or not saying), both those who bring problems to you, and those who sit on the clinic with you.  Remember, this is not just a job for anyone, but for some of your best people.  It doesn&#8217;t even have to be an officially sanctioned body of the organization&#8211;in most organizations of size, your best people can make this happen on their own.</p>
<p>And if no one comes with a problem?  Go looking for them.  They&#8217;re out there.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=77&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2008/11/29/aye-2008-moving-projects-forward-the-clinic-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Usability</title>
		<link>http://blog.gdinwiddie.com/2008/11/28/agile-usability/</link>
		<comments>http://blog.gdinwiddie.com/2008/11/28/agile-usability/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 18:38:41 +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[Agile]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2008/11/28/agile-usability/</guid>
		<description><![CDATA[If I had time, I would re-read Tom DeMarco&#8217;s book Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency, because I have precious little slack in my own life, these days.  So it is that I just now got around to reading Jakob Nielsen&#8217;s article, Agile Development Projects and Usability, which William Pietri [...]]]></description>
			<content:encoded><![CDATA[<p>If I had time, I would re-read Tom DeMarco&#8217;s book <a title="View product details at Amazon" href="http://www.amazon.com/Slack-Getting-Burnout-Busywork-Efficiency/dp/0767907698%3FSubscriptionId%3D0EMV44A9A5YT1RVDGZ82%26tag%3Dalberg30-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0767907698">Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency</a>, because I have precious little slack in my own life, these days.  So it is that I just now got around to reading Jakob Nielsen&#8217;s article, <em><a target="_blank" href="http://www.useit.com/alertbox/agile-methods.html">Agile Development Projects and Usability</a></em>, which <a target="_blank" href="http://www.scissor.com/people-WilliamPietri.htm">William Pietri</a> noted on the <a target="_blank" href="http://groups.yahoo.com/group/agile-usability/">Agile Usability list</a> on November 17.</p>
<p>The statement</p>
<blockquote><p>&#8220;For a project to take interaction design and usability seriously, it must assign them &#8216;story points&#8217; (i.e., resources) on an equal footing with the coding&#8221;</p></blockquote>
<p>jumped out at me.  Alistair Cockburn wrote a <a target="_blank" href="http://alistair.cockburn.us/Nielsen+on+agile+and+usability">thoughtful reply</a> where he noted the same statement.  I agree with Alistair&#8217;s comments, but I&#8217;d like to comment on this statement from a slightly different perspective.<span id="more-76"></span></p>
<p>First of all, story points do not represent resources applied.  They&#8217;re an estimate of the work required to accomplish a small but measurable increment of functionality.  This work has never been just &#8220;coding.&#8221;  At the very least it includes testing and acceptance by the Customer.  If the functionality includes a change to the UI, then figuring out what that UI change should be is also part of it.</p>
<p>Many shops don&#8217;t have UI experts, so figuring out that UI change falls to the developer and the Customer having a discussion and making a decision.  Yes, this sometimes results in a terrible UI from a usability point of view.  The good news is that, if you&#8217;re working in small increments in an iterative fashion, you can always revisit this and change it.  If it&#8217;s bad enough, this usually happens.</p>
<p>When there is a UX/UI designer, their work is too-often treated as an up-front requirements definition phase, handed to the development process as a <em>fait accompli</em> to be developed without any further discussion.  The problem with this is not that it&#8217;s not &#8220;Agile,&#8221; it&#8217;s that it sabotages the benefits that people seek when they adopt Agile.  The Customer might have made some subtle adjustments to the functionality of the story, and the pre-designed UI might no longer be so appropriate.  The precisely-defined UI might be really expensive to develop, and a much cheaper approach might be approximately as good.  And, if the story is never scheduled for development, this up-front design is completely wasted.</p>
<p>It appears to me that the only way to get the Agile benefits of balancing needs and costs to get the best bang for the buck, is to move this UX/UI design work into the incremental, iterative development cycle.  That doesn&#8217;t mean to create a separate story card for UI design, and then another for implementation.  The completion of the story includes the UI design, the implementation, the testing, and the acceptance by the Customer.</p>
<p>&#8220;But,&#8221; some designers protest, &#8220;we need to do usability testing with mockups to know which is the best design.&#8221;  Well, perhaps.  On the one hand, with enough experience you might be able to design a &#8220;good enough&#8221; UI without this step, particularly if you know it can be changed in the future.  Doing the usability testing with live code, rather than a mockup, might provide better feedback because it tests the concept as-implemented, rather than as-conceived.</p>
<p>Sometimes, of course, we just won&#8217;t know enough to jump right to code.  This happens with coders, too, and we have a tool to deal with this situation.  That tool is a &#8220;spike.&#8221;  This is a time-boxed exploration to learn what we know we don&#8217;t know.  For a coder, it may be coding up an alternative implementation to see if it will work, or if it will provide advantages.  For a UI/UX designer, it may be creating and testing a low-fidelity prototype.   It&#8217;s time-boxed because it&#8217;s not directly producing value&#8211;it&#8217;s producing knowledge that we must then leverage to produce value.  Our goal is to answer some questions, not produce the best possible prototype.</p>
<p>When Nielsen recommends,</p>
<blockquote><p>Most successful teams have adopted a <strong>parallel track</strong> approach, where the user experience work is continuously done one step ahead of the implementation work. So, by the time such teams start to develop a feature, the initial user experience work on it has just completed.</p></blockquote>
<p>I think that he&#8217;s offering a half-step toward a more agile, effective approach.  While doing the UX work &#8220;one step ahead&#8221; is better than six month&#8217;s ahead, it&#8217;s treading on the same slippery slope as doing acceptance testing &#8220;one step after&#8221; implementation.  Splitting these concerns into a three-iteration waterfall makes the presumption that the work done in one iteration will not be affected by the associated work done in another.  This is rarely the case.  Even William Royce&#8217;s classic paper, <em><a target="_blank" href="http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf">Managing the Development  of Large Software Systems</a></em>, which described the approach now called &#8220;waterfall,&#8221; shows feedback from one phase to the previous.  The work done in implementation may inform the UI design and the work done in testing may inform both the UI design and the implementation.  Either the story is not <em>done-done</em> or it drags on for more iterations, being handed back for re-work.</p>
<p>Most successful Agile teams have learned to incorporate testing in the same iteration as development.  Sure, it&#8217;s less convenient that way.  They always struggle to keep these aligned without resorting to a mini-QA phase at the end of the iteration.  The developers and the testers have to take the bigger picture into account, and not focus solely on their own tasks.  It&#8217;s more difficult, particularly at first, but it&#8217;s <strong>more effective</strong>.</p>
<p>In the same way, Agile teams with UX/UI experts can incorporate UI design into the same iteration as development.  Those UX/UI experts will have to look at a bigger picture than just their area of expertise.  They&#8217;ll find this more difficult, especially at first.  But it will be more effective.  There will be times when they need to answer some questions before a story is ready for development.  In those cases, they should do a low-fidelity prototype spike to answer the questions they have.  It may be that the knowledge gained from that spike will mean the story itself is scrapped.  Or it should give them enough information to proceed with the more detailed design <em>with</em> the developers who are implementing it.  They might even consider measuring the actual implementation with usability testing <em>in the same iteration</em>, along with the functional testing that is part and parcel of calling the story done.</p>
<p>So, usability experts, are you up for the challenge?  Are you willing to stick your neck out and take responsibility for the usability of the delivered software?  Or are you going to take the easy route and say, &#8220;I did my task; the developers just didn&#8217;t follow my directions properly.&#8221;   I&#8217;ve heard that for years from people who fancy themselves as architects.  I don&#8217;t buy it from them, either.  Those who would be experts in design have a responsibility to see that design through to successful deployment.  Anything less doesn&#8217;t count.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=76&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2008/11/28/agile-usability/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Making your retrospectives more effective</title>
		<link>http://blog.gdinwiddie.com/2008/10/22/making-your-retrospectives-more-effective/</link>
		<comments>http://blog.gdinwiddie.com/2008/10/22/making-your-retrospectives-more-effective/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 11:11:16 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Retrospectives]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2008/10/22/making-your-retrospectives-more-effective/</guid>
		<description><![CDATA[I just noticed that Bob Payne has posted an interview with Esther Derby on the Agile Toolkit Podcast. This interview took place at the end of the Agile 2008 Conference and covered a number of topics. The topic that I found most interesting and timely was that of retrospectives, and ways to make them actually [...]]]></description>
			<content:encoded><![CDATA[<p>I just noticed that <a title="Electroglide" target="_blank" href="http://electroglide.biz/">Bob Payne</a> has posted an interview with <a title="Esther Derby Associates" target="_blank" href="http://estherderby.com/">Esther Derby</a> on the <a title="Agile Toolkit interview with Esther Derby" target="_blank" href="http://agiletoolkit.libsyn.com/index.php?post_id=393143">Agile Toolkit Podcast</a>.  This interview took place at the end of the Agile 2008 Conference and covered a number of topics.  The topic that I found most interesting and timely was that of retrospectives, and ways to make them actually accomplish something instead of just talking about the same things repeatedly.<span id="more-71"></span>I wrote down a couple of notes while listening to it:</p>
<ul>
<li>Put your <em>actions to improve</em> on story cards and add them to the iteration backlog.</li>
</ul>
<p>I wouldn&#8217;t want to give them story points (I also don&#8217;t like to give story points for engineering tasks), but this is a way to keep them visible and get them done.  It also requires that they be <em>actions</em>, rather than just <em>wishes</em>.</p>
<ul>
<li>Ask people, not what is the biggest or most important problem, but what do they have the energy to improve.</li>
</ul>
<p>The biggest problem is often too daunting to tackle.  That&#8217;s why it seems the biggest.  Instead, pick something that seems important, but doable.</p>
<p>This reminds me of the way I often approach the refactoring of large or old legacy code bases.  Often I find that I can&#8217;t make any headway on what seems like the most fundamental problem with the code.  When that happens, I start chipping away at smaller issues, isolating problem areas into relatively distinct chunks.  Ultimately, when enough of these smaller issues have been tackled, the big unapproachable refactoring no longer looks so big.</p>
<p>There&#8217;s lots more there than what I&#8217;ve mentioned here.  I recommend that you <a title="Agile Toolkit interview with Esther Derby" target="_blank" href="http://agiletoolkit.libsyn.com/index.php?post_id=393143">go give it a listen</a>.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=71&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2008/10/22/making-your-retrospectives-more-effective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Short-term profit or long-term prosperity</title>
		<link>http://blog.gdinwiddie.com/2008/03/11/short-term-profit-or-long-term-prosperity/</link>
		<comments>http://blog.gdinwiddie.com/2008/03/11/short-term-profit-or-long-term-prosperity/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 15:42:51 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Sustainability]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2008/03/11/short-term-profit-or-long-term-prosperity/</guid>
		<description><![CDATA[David Maister asks, in a business turndown, do you respond with cost-cutting measures, such as layoffs of junior personnel, or do you reduce the profitability at the top, redirecting the efforts of your top people to long-term growth while the junior people attend to the reduced amount of immediate work? As he says, As always, [...]]]></description>
			<content:encoded><![CDATA[<p>David Maister <a target="_blank" href="http://davidmaister.com/blog/569/Recession-Responses">asks</a>, in a business turndown, do you respond with cost-cutting measures, such as layoffs of junior personnel, or do you reduce the profitability at the top, redirecting the efforts of your top people to long-term growth while the junior people attend to the reduced amount of immediate work?  As he says,</p>
<blockquote><p>As always, I have to stress that this is not a moral issue but one of pragmatics.</p></blockquote>
<p>As I read through the comments on this post, I came across one that noted this was a case of</p>
<blockquote><p>The classic fight between short-term &#8220;success&#8221; and long-term prosperity.</p></blockquote>
<p>Suddenly I was struck by the parallels between this dilemma faced by business owners and those faced by software developers.<span id="more-63"></span></p>
<p>Imagine it&#8217;s getting late, and you&#8217;re tired from a long day&#8217;s work.  A feature you&#8217;re implementing has exceeded your estimation.  It should have been done by now, but there were some unexpected complications and you&#8217;re still working on it.  You just want to get it done and go home, right?</p>
<p>Do you</p>
<ol>
<li>make it pass the test, check it in, and go home, or</li>
<li>think about how this code fits into the bigger picture, and why you ran into those unexpected complications, make this code clearly reflect this code&#8217;s role in that bigger picture (perhaps extracting a class to explicitly acknowledge a secondary responsibility), as well as making it pass the test.</li>
</ol>
<p>Which is better for long-term prosperity of the code?</p>
<p>Have you faced this dilemma before in this code base?  Are those unexpected complications a consequence of code that was left a little less than clear in the past?</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=63&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2008/03/11/short-term-profit-or-long-term-prosperity/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Learning from experience</title>
		<link>http://blog.gdinwiddie.com/2008/02/28/learning-from-experience/</link>
		<comments>http://blog.gdinwiddie.com/2008/02/28/learning-from-experience/#comments</comments>
		<pubDate>Thu, 28 Feb 2008 16:53:07 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Pairing]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2008/02/28/learning-from-experience/</guid>
		<description><![CDATA[It is good when we learn from our experiences&#8211;much better than when we don&#8217;t learn from them. I recently wrote about learning, or failing to learn, from observing others. A recent discussion on the scrumdevelopment yahoogroup got me thinking about another way to learn from experiences, and that&#8217;s learning from the experiences of others. The [...]]]></description>
			<content:encoded><![CDATA[<p>It is good when we learn from our experiences&#8211;much better than when we don&#8217;t learn from them.  I <a href="http://blog.gdinwiddie.com/2008/01/22/what-do-you-know/">recently wrote</a> about learning, or failing to learn, from observing others.  A recent discussion on the scrumdevelopment yahoogroup got me thinking about another way to learn from experiences, and that&#8217;s learning from the experiences of others.</p>
<p>The discussion I mean <a target="_blank" href="http://groups.yahoo.com/group/scrumdevelopment/message/27524">started in the middle of another thread</a>, when Clay Dreslough asked about Pair Programming.</p>
<blockquote><p>But I have never had any success with actual Pair Programming.</p>
<p>So &#8230; am I missing a key component of XP? Or have other people found the same reticence with adopting Pair Programming?</p>
<p>Are there some valuable gains here that I&#8217;m missing? And if so, how would you recommend getting programmers to change their habits?<span id="more-62"></span></p></blockquote>
<p>Very reasonable questions, in my opinion.  And so I branched the thread to one about pair programming, stating that I did, indeed, think there were valuable gains that were being missed.  But rather than start with discussing the value of the practice (which doesn&#8217;t necessarily persuade people to try it) or specific <a href="http://blog.gdinwiddie.com/2007/08/18/pair-programming-techniques/">techniques of pair programming</a>, I asked about the context in which it had been tried and the experiences that resulted.  Rather than give a sales presentation, I wanted to compare experiences so that we could each learn from the other.</p>
<p>Surprisingly enough, this triggered a response from someone else, ranting about zealotry, one-size-fits-all practices, and people-over-process that caught me totally off-guard.  It was as if the very mention of pair programming on a scrum list was forbidden territory.  Certainly I had said nothing about the practice being essential.  And I&#8217;ve found pair programming to be an incredibly people-centric practice that defies attempts to control exactly how the process is followed.</p>
<p>I hope that the discussion will return to pair programming, itself, but the issue about whether it&#8217;s permissible to discuss a topic is also an important one.  As I said there, talking about experiences, whether successful, unsuccessful, or somewhere in between, can help people learn and choose. Making such discussions forbidden is as much an indication of zealotry as is an insistence that a practice must be followed. Or, perhaps, more so&#8211;for a wise person can learn from the one-sided exhortation of a zealot more readily than from the silence of a forbidden topic.</p>
<p>Or, as Robert Frost was <a target="_blank" href="http://tech.groups.yahoo.com/group/extremeprogramming/message/140070">recently quoted on the XP list</a>, &#8220;Education is the ability to listen to almost anything without losing your temper or your self-confidence.&#8221;</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=62&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2008/02/28/learning-from-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What do you know?</title>
		<link>http://blog.gdinwiddie.com/2008/01/22/what-do-you-know/</link>
		<comments>http://blog.gdinwiddie.com/2008/01/22/what-do-you-know/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 19:59:52 +0000</pubDate>
		<dc:creator>George Dinwiddie</dc:creator>
				<category><![CDATA[Individuals and Interactions]]></category>
		<category><![CDATA[Responding to Change]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Learning]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2008/01/22/what-do-you-know/</guid>
		<description><![CDATA[A while back, I was working with a young and cocky software developer. He was a smart guy, and sure of his abilities. He had seven years of Java experience, he said, and he knew how to write code. As he was a new member of the team, I described the strategy I&#8217;d planned for [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, I was working with a young and cocky software developer.  He was a smart guy, and sure of his abilities.  He had seven years of Java experience, he said, and he knew how to write code.</p>
<p>As he was a new member of the team, I described the strategy I&#8217;d planned for a bit of code.  I showed him what I&#8217;d already written, and asked him to complete the functionality.</p>
<p>&#8220;But I can do it another way.&#8221;  And he described a different technique.<span id="more-58"></span></p>
<p>&#8220;Yes, but they&#8217;re already talking about changing this piece.  Though it&#8217;s a little more code, this way is simpler and easier to change.  It keeps the knowledge of the screen layout configuration in one place.&#8221;</p>
<p>&#8220;OK.&#8221;</p>
<p>Later, when I was reviewing code that had been checked into the source code repository, I saw that he&#8217;d done it his way.  He has also left the beginnings I&#8217;d asked him to complete, though it wasn&#8217;t used anywhere, as dead code.  And when I brought up the fact that he&#8217;d increased the coupling in the system, since now the database had to understand the details of configuring the screen layout as well as the code, he asked, &#8220;What&#8217;s coupling?&#8221;</p>
<p>I think that instead of seven years&#8217; experience, he had one year, seven times.</p>
<p>As I write this, I&#8217;m reminded of a day when I was a teenager.  The father of a friend needed to pick up a van from across town and bring it home, but he didn&#8217;t have anyone available to drive the second vehicle.  He offered me a few bucks to go with him and drive the van back.  &#8220;Sure.&#8221;</p>
<p>I was following him back, when he suddenly took an unexpected turn.  &#8220;Where is he going?&#8221; I wondered as I continued on my way.</p>
<p>When I pulled into the driveway, his car was already there.  He came out of the house saying, over his shoulder, &#8220;Never mind; here he is.&#8221;</p>
<p><em>What an idiot I was!</em>  Why wasn&#8217;t it obvious to me that he&#8217;d been over this ground many times and knew all the roads to his own house.  I knew only one.  Because I knew only one, it was THE way.  I had been so proud of myself for knowing THE way that I&#8217;d bypassed an opportunity to learn more.</p>
<p>My friend&#8217;s father never hired me for another errand, either.</p>
<p>I&#8217;d like to say that, now that I&#8217;m older and wiser, I don&#8217;t do things like this any more.  Perhaps I do it less, but I&#8217;m well aware that sometimes I pass up learning because I think I already know THE answer.</p>
<p><em>Do you have a story where you passed up a learning opportunity because you thought you already knew the answer?</em></p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=58&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2008/01/22/what-do-you-know/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Refactoring a House</title>
		<link>http://blog.gdinwiddie.com/2007/12/25/refactoring-a-house/</link>
		<comments>http://blog.gdinwiddie.com/2007/12/25/refactoring-a-house/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 00:24:27 +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[Refactoring]]></category>

		<guid isPermaLink="false">http://blog.gdinwiddie.com/2007/12/25/refactoring-a-house/</guid>
		<description><![CDATA[Some of you may remember that I started a house construction project. Things are moving very fast, now, and the actual construction may take less time than it took to get all the necessary permits. So far, the project&#8217;s about 100% over the time budget. And people say that software development should be more like [...]]]></description>
			<content:encoded><![CDATA[<p>Some of you may remember that I started a <a href="http://blog.gdinwiddie.com/2006/12/27/the-construction-analogy/">house construction project</a>.  Things are moving very fast, now, and the actual construction may take less time than it took to get all the necessary permits.  So far, the project&#8217;s about 100% over the time budget.  And people say that software development should be more like the construction industry!</p>
<p>But the fact that the construction has run slower than expected is not the reason for this post.  Neither is the fact that this project has been consuming a large portion of my attention, and hindering posts on this blog.</p>
<p>This post is about an example of refactoring found in the house construction domain.<span id="more-55"></span></p>
<p>Here&#8217;s a photo<br />
<img align="middle" id="image56" alt="Before refactoring" src="http://blog.gdinwiddie.com/wp-content/uploads/2007/12/before.jpg" /> of the west wall of our new house as originally constructed.  Notice that there are three separate headers, one over each of the window openings and one over the door opening.  The builder decided that this wouldn&#8217;t be rigid enough, and had the framer&#8217;s refactor this design to<br />
<img align="middle" id="image57" alt="After refactoring" src="http://blog.gdinwiddie.com/wp-content/uploads/2007/12/after.jpg" /> a single microlam beam across all the windows and doors.  I wasn&#8217;t in town when this was accomplished, but I would have loved to see how they did it.</p>
<p>In any event, it&#8217;s a classic example of refactoring.  The design is improved, but the function is unchanged.  And it was done in place, without deconstructing and rebuilding.</p>
         <img src="http://blog.gdinwiddie.com/?ak_action=api_record_view&id=55&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.gdinwiddie.com/2007/12/25/refactoring-a-house/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
