<?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>AgileKiwi &#187; Agile Software Development</title>
	<atom:link href="http://www.agilekiwi.com/category/other/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.agilekiwi.com</link>
	<description>The neglected essentials of software development</description>
	<lastBuildDate>Sat, 08 Jun 2013 06:07:16 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Agile with Fixed Scope</title>
		<link>http://www.agilekiwi.com/earnedvalue/agile-with-fixed-scope/</link>
		<comments>http://www.agilekiwi.com/earnedvalue/agile-with-fixed-scope/#comments</comments>
		<pubDate>Sat, 23 Mar 2013 00:05:39 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Earned Value Management]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=847</guid>
		<description><![CDATA[It’s a common misconception that agile processes can’t be used with fixed scope.  But a misconception is exactly what it is.   A number of the founders of the agile movement developed their forms of agile on fixed-scope projects. As I write this, I’m working myself on an 18-month project with about 20 people and a [...]]]></description>
				<content:encoded><![CDATA[<p>It’s a common misconception that agile processes can’t be used with fixed scope.  But a misconception is exactly what it is.   A number of the founders of the agile movement developed their forms of agile <em>on fixed-scope projects.</em> As I write this, I’m working myself on an 18-month project with about 20 people and a fixed(ish) scope (see below).  So it can be done.  But how?</p>
<p>There are several different strategies you can use:</p>
<h2>Strategy 1: Fix the scope and flex the price</h2>
<p>This keeps scope management very simple, you just build all of it.  The catch is it may take longer than you expected, so you may need to flex the price through a time-and-materials contract or some kind of <a href="http://www.agilekiwi.com/estimationandpricing/target-cost-contracts/">sharing of financial risk</a>.  Understandably, this risk of cost overruns renders this simple approach unsuitable in many environments.</p>
<h2>Strategy 2: Work in priority order and stop when the money runs out</h2>
<p>(Admittedly, this is not exactly <em>fixed</em> scope.) This is very commonly recommended on agile projects, <a href="http://www.agilekiwi.com/estimationandpricing/cutting-scope-is-not-the-whole-answer/">too commonly in my opinion</a>.  But again, it has the virtue of being relatively simple.  Do the most beneficial stuff first, leaving the least beneficial until last.  When the money runs out, just stop and don’t do the rest.  Agile makes this approach possible – but not mandatory.</p>
<h2>Strategy 3: Implement remaining features more simply when short of time</h2>
<p>There are many factors that influence the effort required to develop a feature (or user story, depending on your terminology).  Some of those factors are probably under your control: e.g. How extensive is the validation? How much effort do we put into optimising the user experience (UX) and appearance?  Do we fully automate everything, or do we allow manual overrides so we don’t have to code every single  edge case?  Can we think of something that would save development time, and still meet the overall business goal (albeit in a different way from what was originally expected)?</p>
<p>If you are using good <a href="http://www.agilekiwi.com/earnedvalue/resources/">earned value tracking</a> you should know, <em>within the first quarter of the project</em>, whether you are likely to run out of time at the end.  Once you find that out, immediately start seizing all these opportunities to simplify the remaining 75% of the project.  And, because you have good earned value tracking, you can <em>justify</em> the simplifications to your stakeholders.  The aim is to deliver all of the planned <em>business benefits</em>, just with simpler implementations than might have been originally expected.</p>
<p>We’re using a variant of this strategy on my current project.  We built the highly-used parts of the system first, taking a lot of care with their appearance and usability. The second half of the project consists of functionality that is much less commonly used, so here usability and appearance are much less important. (If it takes a user a few extra minutes to do something, it doesn’t really matter if they only do that thing a few times each year.) So for the second half of the project, we have consciously shifted our design approach away from ease of use, and towards simplicity of implementation.  Because we were using earned value-like tracking, we can justify this change of approach to users and management.</p>
<h2>Strategy 4: Split each feature (or user story) into essential and nice-to-have parts</h2>
<p>This a refinement of the previous strategy. Right from the start of the project, you split features/user stories into two pieces: an essential minimum piece, which you implement early, and nice-to-have embellishments (such as advanced data validation or visual styling) which you defer to the tail end of the project.  If you run out of time, you drop some of the embellishments from the tail, and still deliver a working system with the full scope of capability/functionality.</p>
<h2>Strategy 5: Make multiple passes over each story, doing the basics first and then improving it later</h2>
<p>Similar to strategy 4, but you may “visit” a given user story 3 or more times within the project, instead of just twice as in Strategy 4.  I like this in theory, but in practice I think it’s too hard to used earned value or burn-chart tracking in this strategy.  Whereas in strategy 4, I feel that earned value remains (just) feasible.</p>
<p>[Tim Wright's comment,  below, gives more details on how this strategy can be done]</p>
<h1>Summary</h1>
<p>The last three strategies are all variations on a theme. Within a single project, you may use several of them, and maybe also resort to strategy 2 for a few user stories.</p>
<p>I recently heard the phrase “value management” to describe the work of deciding not only what to build, but also how simply or thoroughly to build it  The aim is to meet the business goals with the optimal expenditure of effort – i.e. do what needs to be done, without overspending on superfluous details.</p>
<h1>Further Reading</h1>
<p>All of the following are excellent.</p>
<p>Alistair Cockburn’s <a href="http://alistair.cockburn.us/Design+as+Knowledge+Acquisition">Trim the Tail</a>.  A rich explanation of the theory and practice of strategies 4 and 5, with significant additional benefits in risk management.</p>
<p>Alistair’s <a href="http://alistair.cockburn.us/The+A-B+work+split,+feature+thinning+and+fractal+walking+skeletons/v/slim">list of related strategies</a>.</p>
<p>Jeff Patton’s concept of Feature Thinning: Jeff’s a leading practitioner of Strategy 5. See: <a href="http://www.stickyminds.com/sitewide.asp?ObjectId=10330&amp;Function=DETAILBROWSE&amp;ObjectType=COL&amp;sqry=%2AZ%28SM%29%2AJ%28COL%29%2AR%28createdate%29%2AK%28colarchive%29%2AF%28%7E%29%2A&amp;sidx=31&amp;sopp=10&amp;sitewide.asp?sid=1&amp;sqry=%2AZ%28SM%29%2AJ%28COL%29%2AR%28createdate%29%2AK%28colarchive%29%2AF%28%7E%29%2A&amp;sidx=31&amp;sopp=10">Finish on time by managing scale</a>, <a href="http://www.stickyminds.com/sitewide.asp?Function=edetail&amp;ObjectType=COL&amp;ObjectId=13178&amp;tth=DYN&amp;tt=siteemail&amp;iDyn=2">Difference between incremental and iterative</a>, <a href="http://www.agileproductdesign.com/blog/acurate_estimate_red_herring.html">Accurate estimation = red herring</a>  Jeff has often used these techniques on fixed-scope, fixed-price projects.</p>
<p>Description from an agile company called Atomic Object, of how they operate with fixed budget and controlled (rather than fixed): <a href="http://spin.atomicobject.com/2011/04/27/fixed-budget-fixed-scope-high-quality-custom-software/">here</a> and <a href="http://spin.atomicobject.com/2011/03/22/time-and-materials-is-dead/">here</a>.</p>
<p>Martin Fowler’s <a href="http://martinfowler.com/bliki/ScopeLimbering.html">Scope Limbering</a></p>
<p>The opening section my my own <a href="http://www.agilekiwi.com/EarnedValueForAgileProjects.pdf">agile earned value (pdf</a>) has more info on why fixed scope is a valid option in agile.</p>
<p>I’ve also posted a summary of <a href="http://www.agilekiwi.com/estimationandpricing/estimation-summary-for-agile-projects-nov-2011/">estimation tips for agile projects</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/earnedvalue/agile-with-fixed-scope/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Faith, doubt and evidence &#8211; agile as religion versus agile as social science</title>
		<link>http://www.agilekiwi.com/other/agile/faith-doubt-and-evidence-agile-as-religion-versus-agile-as-social-science/</link>
		<comments>http://www.agilekiwi.com/other/agile/faith-doubt-and-evidence-agile-as-religion-versus-agile-as-social-science/#comments</comments>
		<pubDate>Sun, 03 Mar 2013 05:51:42 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=803</guid>
		<description><![CDATA[My first exposure to Agile was in the early 2000’s, when a friend leant me the Schwaber and Beedle Scrum book.  It kept talking about mysterious  “emergent properties”, which were apparently the good things that would inevitably happen when you followed the process.  But it never really explained why those properties would emerge and, to [...]]]></description>
				<content:encoded><![CDATA[<p>My first exposure to Agile was in the early 2000’s, when a friend leant me the <a href="http://www.amazon.com/Agile-Software-Development-Scrum/dp/0130676349">Schwaber and Beedle</a> Scrum book.  It kept talking about mysterious  “emergent properties”, which were apparently the good things that would inevitably happen when you followed the process.  But it never really explained <em>why</em> those properties would emerge and, to my mind, it never even gave satisfactory evidence that they really <em>would</em> emerge.</p>
<p>That was my first taste of agile as a belief-based movement.  It’s dangerous ground, a philosophical quicksand which has grown over the following years – to enthral some and to alienate others.  I vividly remember a presentation, again on Scrum, which I paid to attend some years later. It reminded me of something which no professional event should ever resemble: a recruiting session for a strange religious cult.  The kind where the charismatic speaker sways all listeners with his eloquence and fervour… then gets arrested three years later for embezzlement and child abuse.  (I once stayed in the commune of just such a cult.  After one uneventful yet unsettling night, I was glad to see the last of it.  Years later, the leader was indeed arrested!)</p>
<p><strong>Agile as a belief system</strong></p>
<p>At its worst and most cult-like extremes, belief-based agile can be dismissed out-of-hand, and rightly so.  But at the milder end of the scale, such as the Schwaber-Beedle book, it serves a valid purpose.  It presents a clear and compelling introduction to agile, which is great for people who have never heard about it before.  It worked for me.  My team tried what we read in the book, and we loved it. It was great to have such a simple introduction to agile.  Without that simplicity, we might never have got started.</p>
<p>But then we started to struggle.  Our projects didn’t seem to fit the book.  We had constraints which the book didn’t even mention.  I began to suspect Scrum was good for other people but not quite right for us.</p>
<p>But what bothered me more was that I still didn’t <em>understand</em> it.  What the heck are these so-called emergent properties anyway? And how do you force them to happen? ;-)</p>
<p><strong>Agile as (social) science</strong></p>
<p>I wasn’t until I read Alistair Cockburn’s book <a href="http://www.agilekiwi.com/other/agile/crystal-clear-methodology/">Crystal Clear</a> that things started to make sense.  The book is not about Scrum, it’s about Alistair’s rather different formulation of agile (more on that in a moment).  And yet, it was only by reading Crystal Clear that I actually understood Scrum.  Although it uses different terminology from Scrum, Crystal Clear filled in the missing pieces and answered my questions about Scrum’s “emergent properties”.</p>
<p>But Crystal Clear did three things which even more important:</p>
<ol>
<li>It showed that <strong>agile can be based on evidence and science</strong>.  (Although, when you base it on science, agile turns out slightly, yet significantly, different from the &#8220;agile&#8221; you may be accustomed to.)  I&#8217;m not talking here about the popular misconception of science-as-blind-faith-in-experts, but about the true nature of science where even the experts question their own judgement and are determined to follow the evidence where ever it may lead.  Crystal Clear grew out of Alistair&#8217;s PhD research (which in turn grew from his process work at IBM and elsewhere). Based on observations of real-world projects, Alistair formed hypotheses about the factors that led to success in software development.  Then he painfully discarded one hypothesis after another, as the evidence demanded.  He eventually arrived at the family of methodologies known as Crystal, of which Crystal Clear is the version applicable to small teams.  (Alistair’s development of Crystal <a href="http://c2.com/cgi/wiki?CrystalClearMethodology">preceded</a> the founding of the agile movement.  He was later one of the 17 co-creators of the <a href="http://agilemanifesto.org/">Agile Manifesto</a>.)</li>
<li>It showed that <strong>agile should be flexible, to suit the nature of humans</strong>.  It is impossible to read Crystal and not be struck by how human-friendly it is;  how it allows, and in fact requires, variation to meet your circumstances; and how one-size-fits-all rules are the very antithesis of agile.</li>
<li>It explained that <strong>simple belief-based formulations of agile are the starting point, not the destination</strong>.  The common rigid, belief-based formulation of agile is an ideal learning tool, but it’s only the starting point on the learning journey, not the end.</li>
</ol>
<p><strong>Conclusion</strong></p>
<p>Today, I happily use Scrum – informed by and infused with a healthy dose of Crystal Clear.  If you are not familiar with Crystal Clear and Alistair’s work in general, you owe it to yourself, and your project, to learn.</p>
<p>Seek a broader perspective and, at the risk of being facetious, don’t stay in the commune until the leader gets arrested!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/faith-doubt-and-evidence-agile-as-religion-versus-agile-as-social-science/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Become practiced in making changes</title>
		<link>http://www.agilekiwi.com/other/agile/become-practiced-in-making-changes/</link>
		<comments>http://www.agilekiwi.com/other/agile/become-practiced-in-making-changes/#comments</comments>
		<pubDate>Tue, 04 Sep 2012 09:21:24 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=773</guid>
		<description><![CDATA[Agile has always embraced change.&#160; But businesses are still be tempted to minimise those changes, by trying to get things “right” first time.&#160; On my current project, we’re realised that minimising change is not necessarily a good thing. Why? After the system goes live, we must be able to change it.&#160; (In our opinion, an [...]]]></description>
				<content:encoded><![CDATA[<p>Agile has always embraced change.&#160; But businesses are still be tempted to <em>minimise</em> those changes, by trying to get things “right” first time.&#160; </p>
<p>On my current project, we’re realised that minimising change is not necessarily a good thing. Why? After the system goes live, we <em>must</em> be able to change it.&#160; (In our opinion, an unmaintainable system would be a failure.)&#160; So… if we are going to successfully change the system <em>after</em> go-live, then we must <em>practice</em> making changes <em>before </em>go live.&#160; Without such practice, how would we know whether the architecture is maintainable?&#160; How would we know whether the team has the necessary skills and confidence to safely change the code?</p>
<p>So each mistake, dead-end, or change of direction has a silver lining: it’s a chance for us to practice the essential skill of changing our code.&#160; We <em>need</em> these mistakes to happen, so we can practice correcting them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/become-practiced-in-making-changes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pair Programming Wrap-Up</title>
		<link>http://www.agilekiwi.com/other/agile/pair-programming-wrap-up/</link>
		<comments>http://www.agilekiwi.com/other/agile/pair-programming-wrap-up/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 08:53:00 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Understanding ourselves]]></category>
		<category><![CDATA[expertise]]></category>
		<category><![CDATA[pair programming]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=728</guid>
		<description><![CDATA[I previously blogged about the nature of expertise, and resulting questions about the efficiency of expert-expert pairings.  Here I’d like to tidy up some loose ends with regard to the relationship between expertise and pair programming. How does expertise develop? Kahneman’s book points out that expertise develops, virtually inevitably, when a practitioner has long experience [...]]]></description>
				<content:encoded><![CDATA[<p>I previously blogged about the <a href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/">nature of expertise</a>, and resulting questions about the <a href="http://www.agilekiwi.com/?p=688">efficiency of expert-expert pairings</a>.  Here I’d like to tidy up some loose ends with regard to the relationship between expertise and pair programming.</p>
<h2>How does expertise develop?</h2>
<p><a href="http://www.amazon.com/Thinking-Fast-and-Slow-ebook/dp/B005MJFA2W/ref=tmm_kin_title_0?ie=UTF8&amp;m=A3QI763M62X7GQ">Kahneman’s book</a> points out that expertise develops, virtually inevitably, when a practitioner has long experience in a field where both of the following apply:</p>
<ol>
<li>There is indeed some correlation between decisions and outcomes. (Conversely, no amount of practice will ever give you expertise in predicting the next outcome on a roulette wheel!) In the field of software development, our design decisions do indeed influence the outcomes of correctness, performance and maintainability.</li>
<li>Practitioners receive feedback on their decisions (so that their inner neural network can learn). In other words, we make decisions, and then actually see how those decisions affect the correctness, performance and maintainability of our software. As long as we maintain an open-minded willingness to learn, and we don’t change jobs too often, we will receive this feedback and therefore expertise will develop.</li>
</ol>
<h2>A case in favour of pairing</h2>
<p>While I’ve questioned the efficiency of expert-expert pairings, the science of expertise suggests a possible benefit of expert-novice pairings – a benefit which I have not seen described elsewhere. I suspect that such pairing may help the novice to develop expertise more quickly. Not because of what they expert <em>says</em> (as implied by some other descriptions of expert-novice parings), but because of what the expert <em>does</em>. Remember that much of what we call “expertise” takes place unconsciously. So the expert couldn’t put it into words even if they tried. But, perhaps, there is some value in less experienced programmers <em>seeing</em> how the expert works. Maybe that will give the less-experienced member of the pair a chance to pick up on things which the expert could never teach verbally.</p>
<p>A related point is that much of programming is about how the software is <em>produced</em>. Yes, you can learn from reading other people’s code after it’s finished (and we should do this more often) but I think we might learn more from observing <em>how</em> that code is produced &#8211; What kind of things did the author try as they worked? Where did they backtrack? How did unit tests guide their work? What are their special Google search tricks for finding relevant information?</p>
<p>(Note: don&#8217;t forget the conventional advice that &#8220;pair programming is best done by peers&#8221;. An expert-novice pairing is arguably not at all the same thing as regular pair programming.  My point here is that it might be a valuable tool for transferring the expert&#8217;s &#8220;automatic&#8221; (&#8220;non-concsious&#8221;) skills.  I would see it being used in moderation; rather than  for 6 or 8 hours a day like regular pairing.)</p>
<h2>The mathematics of paired experts</h2>
<p>I discussed my <a href="http://www.agilekiwi.com/?p=688">previous post</a> with a friend before writing it. We agreed that experts can’t discuss the first part of their thinking (the automatic bit), and that discussing the second part (the effortful bit) takes longer because the experts have to slow down to the speed of human speech.  However my friend suggested that the collaboration will still pay off, due to improved quality of the final decision.</p>
<p>That could be a very strong argument if feedback from a peer was the only kind of feedback available.  But, it’s not.  Experts also get feedback <a href="http://www.agilekiwi.com/other/news/conversation-with-the-situation-a-software-example/">from the situation</a>, via unit tests etc.</p>
<p><strong>Example:</strong> An expert is looking for the cause of a defect.  The bug is reproducible, but the expert doesn’t know what causes it.  Hunting for the bug is like a search.  At each step in the process, the expert chooses a “move” that will narrow the range of possible causes.  Moves may include setting particular breakpoints, looking for patterns in the inputs that cause the bug, stepping through the code, adding additional unit tests, and so on.  Each move narrows down the search space, until eventually the defect is found.  The better the move, the more it narrows the search space.  A really good first move might eliminate 90% of possible causes, leaving only 10% remaining.  A less efficient move may eliminate only 50% of the possible causes, leaving the other 50% still to be searched.</p>
<p><strong>Question:</strong> if the expert is paired with another, will the pair choose substantially better moves?  Yes, they probably will.  After some discussion, the pair may choose a “90% move” (eliminating 90% of possible causes) while an expert working alone might only come up with a “70% move”.</p>
<p>But what about the time cost of the pair’s discussion?  In the time that the pair spend discussing one move, a solo expert might try several. Imagine that a solo expert can make two moves in the time it takes a pair to discuss one.  If the solo expert tries one 70% move, followed by another, they’ll cut the search space down to 9% of the original space. [ (100% – 70%)^2 =  30%^2 = 9%].   That’s about the same amount of progress as the pair’s “90% move”.   So the solo expert has produced the same result as the pair, in the same amount of time, but for <em>only half the personnel cost</em>.  If the solo expert&#8217;s cycle time is even shorter still, allowing them to try 3 or 4 things in the time that the pair tries one, the solo expert will outperform the pair in both cost <em>and</em> elapsed time.</p>
<p>In summary I suggest that: <em>by using a shorter cycle time</em> a solo expert might outperform a pair of experts.  This a special case of the general principle that “starting to iterate” often beats “improving the plan”.</p>
<h2>So how should experts interact?</h2>
<p>If experts avoid pair programming, will they end up working completely alone?  No.  I think there are at least two options worth considering:</p>
<p><span style="text-decoration: underline;">Option 1: Expert “pair preview”<br />
</span><br />
I’m suggesting this based on a real life example.  I’m calling it “preview” rather than “review” because it comes before the code is written.  I’ll anonymise it by changing the names to “Alice” and “Bob”.</p>
<p>Alice was (and still is) an awesome programmer, whose expertise I greatly respect.  She was working alone on a difficult part of the system.  Once Alice had an initial design in mind, she ran it by Bob for review.  So far, so good.  But the review is where things came unstuck.  Alice and Bob didn’t know Kahneman’s concept of effortful versus automatic thought.  Alice described her proposed design to Bob.  Bob understood it, but had a hunch that an alternative design would be simpler.  Bob didn’t know it, but his half-formed alternative design was generated by the automatic “part” of his mind.  Because it was automatically-generated, it seemed like nothing but a vague hunch.  Consequently neither Bob nor Alice gave it the attention it deserved.</p>
<p>In hindsight, they should have recognised Bob’s hunch for what it was: an instinctive product of Bob’s long expertise, and therefore something worth looking into.  Perhaps Alice should have spent a couple of days <a href="http://www.extremeprogramming.org/rules/spike.html">spiking</a> Bob’s idea.  That would have tested the hunch, and by having Alice do the spiking (rather than Bob, who had suggested it), we would have leveraged Alice’s existing detailed knowledge of the problem space.  (Having Alice do the spike would have also made it psychologically easier for her to embrace the new idea, if it did indeed prove to be the best.)</p>
<p>Unfortunately, no such spiking happened, and the two programmers did not manage to have an effective discussion of the problem.  Alice spent about 5 weeks implementing her proposed design.  Some years later, it proved inadequate to the growing needs of the system, at which point it was re-implemented along the lines of Bob&#8217;s hunch &#8211; in only 2.5 days.</p>
<p><span style="text-decoration: underline;">Option 2: “Expert Escalates”</span></p>
<p>Even experts get stuck.  Part of being a responsible expert is to realise when you’re not making productive progress, and seek out someone to bounce ideas off.  Perhaps they will see something that you haven’t, or spark some new ideas.</p>
<h2>What about the evidence?</h2>
<p>Two commenters on my previous post suggested that my concerns were all very well, but couldn’t be valid because the research shows that pair programming works.  I promised to respond with some comments on “the evidence”.</p>
<p>It turns out that the evidence is rather more mixed that you might suppose. Here’s a quote from the abstract of a <a href="http://en.wikipedia.org/wiki/Meta-analysis">meta analysis</a> done by the excellent <a href="http://simula.no">Simula Research Laboratory</a>.</p>
<blockquote><p>…between-study variance is significant, and there are signs of publication bias among published studies on pair programming.  A more detailed examination of the evidence suggests that pair programming is faster than solo programming when programming task complexity is low and yields code solutions of higher quality when task complexity is high. <strong>The higher quality for complex tasks comes at a price of considerably greater effort<br />
</strong>&#8211; from <a href="http://www.sciencedirect.com/science/article/pii/S0950584909000123">here</a>, or <a href="http://simula.no/research/se/publications/Simula.SE.309">alternate link</a> [emphasis added]</p></blockquote>
<p>The finding, that paired effort for complex tasks is much greater than solo effort, appears consistent with my above concerns and reasoning about paired experts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/pair-programming-wrap-up/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Expertise versus Pair Programming</title>
		<link>http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/</link>
		<comments>http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 19:00:04 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Understanding ourselves]]></category>
		<category><![CDATA[expertise]]></category>
		<category><![CDATA[pair programming]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=688</guid>
		<description><![CDATA[Let’s start this post with a thought experiment.  Not in software development, but in playing chess. Imagine two novice chess players, working as a team. (We’ll assume their opponent is a computer, so it can’t overhear them talk.)  Our two novices will benefit greatly from their collaboration.  They’ll discuss all their thinking – everything from [...]]]></description>
				<content:encoded><![CDATA[<p>Let’s start this post with a thought experiment.  Not in software development, but in playing chess.</p>
<p>Imagine two novice chess players, working as a team. (We’ll assume their opponent is a computer, so it can’t overhear them talk.)  Our two novices will benefit greatly from their collaboration.  They’ll discuss all their thinking – everything from possible moves, to correcting each others mistakes, to “can you remind me how a knight moves?”.  Working together like this they will make fewer mistakes, and generate better moves than each would have done alone.</p>
<p>But what if we paired two chess masters?  <a href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/">Scientific research proves</a> that the thinking of experts is different. Much of it happens as automatic pattern recognition rather than conscious reasoning.  When a chess master looks at a chess position, (good) possible moves spring to mind immediately.  As described in my previous post, these “candidate moves” are generated directly by the brain’s underlying neural network.  Neural networks can’t explain their own reasoning, so the master doesn’t consciously know <em>why</em> those moves came to mind.  Of course, the moves are indeed based on the master’s long experience, but the mapping from prior experience to current ideas is not open to inspection by the conscious mind.</p>
<p><span id="more-688"></span></p>
<p>So how will our two chess masters collaborate?  Neither can explain to the other <em>why</em> they thought of particular moves – because the conscious, effortful part of the mind doesn’t actually <em>know</em>. So what will their conversation consist of?</p>
<ul>
<li>They <strong>can’t discuss the justification</strong> for their proposed moves, because as we just saw, they don’t <em>know</em> the justification.  (Several writers, including Nobel-winner Daniel Kahneman, point out that if you ask an expert, “Why did you suggest that?”, their effortful mind will indeed come up with a justification of the idea, but the justification is produced <em>after the fact</em>. It doesn’t necessarily match the invisible reasoning that originally <em>created</em> the idea.  In fact, I’d suggest that since the invisible reasoning consisted of pattern matching in a neural network, any attempt at a logical sequential description would be incomplete at best.)</li>
<li>Instead, imagine that they pool their sets of candidate moves, and then discuss <em>which</em> of those moves to actually play.  This approach makes sense because, as we saw in the <a href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/">previous post</a>, selecting <em>one</em> of the candidate moves requires effortful thought.  And effortful thoughts can be perceived and described by the thinker.  So let’s assume our two chess masters try to share these thoughts.  If they do, I believe they’ll run into another problem: <strong>verbalizing the thought process slows it down – a lot</strong>.  A master thinks through many possibilities: What would happen if I play this move?  How would my opponent probably respond?  How would I respond to that?  A master can process these “what ifs” relatively quickly.  Not nearly as quickly as the automatic thinking that produced the initial set of candidate moves, but much, much faster than the rate of human speech.   To share thoughts verbally, the master must slow down to speaking speed.  In summary, although it’s possible to verbalize these thoughts, there’s a high (performance) cost in doing so.</li>
</ul>
<h2>Pair Programming</h2>
<p>Now let’s consider the analogy to pair programming. Novice programmers don’t yet make significant used of automatic pattern recognition, instead they rely more heavily on effortful thought.   Therefore their thoughts are open to introspection and can be verbally shared.  Experts, on the other hand, make significant use of the “automatic” part of their mind.  So most of their thought processes are not open to conscious introspection, and the remainder are so fast that verbalization carries a huge performance cost.</p>
<p>I think this may explain the confusion and frustration that some experienced programmers, including myself, feel when we’re asked to pair.  We can’t see how to map our automatic thought processes into the driver/navigator model of pair programming.  Furthermore we probably can’t explain what the problem is – at least, I know I couldn’t, until I read <a href="http://www.amazon.com/Thinking-Fast-and-Slow-ebook/dp/B005MJFA2W/ref=tmm_kin_title_0?ie=UTF8&amp;m=A3QI763M62X7GQ">Kahneman’s effortful/automatic description of the brain</a>.  His book points out that because automatic thought is, well, <em>automatic</em>, we lack awareness of its role in our thinking.  Since we lack awareness, we struggle to explain the difficulty we have with pairing. I hope that greater awareness of Kahneman’s work will give us a suitable vocabulary to describe the problem.</p>
<p>I also hope to stimulate discussion.  The thought processes of an expert, which elegantly combine the automatic with the logical, are extremely efficient. I believe pairing undermines this efficiency – by leading coders to create after-the-fact justifications of their automatic intuitions, and forcing them to unpack their conscious thoughts into spoken language.  I suspect paired experts may even find themselves forced back into novice-like patterns of thought.</p>
<p>What do you think, does pairing prevent experts from performing at their best?</p>
<p><strong>Update, 31 Jan:</strong> I should clarify what I mean by &#8220;expert&#8221;.  I use the term in the sense used by Daniel Kanheman, Anders Ericsson and other researches into expertise.  But you might have seem some pair programming studies use the term “expert” in a different way, particularly those studies where all test subjects were students.  In those studies the word “expert” simply means “good performer” – a student who gets unusually good grades.  These cannot be experts in the Kahneman/Ericsson sense of term.  Developing that kind of expertise takes many years, far longer than any university degree.  Furthermore, Kahneman/Ericsson expertise is not simply about <em>possessing</em> knowledge, in the manner of an A student; instead it is about a mode of thought in which much of the knowledge is possessed <em>and processed</em> unconsciously, through <a title="Becoming an Expert" href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/">automatic pattern-recognition</a> honed by long experience.</p>
<p><strong>Update, 15 July</strong>: Arlo Belshee replied with a very informative comment, below.  He addresses the concerns of this post as follows:</p>
<blockquote><p>Pairings of experts can work very well. But they have to stop explaining <em>why</em> to each other, and just state partial <em>what</em>. Assume the other expert gets the why, or can create his own. <em>Don’t slow down the thinking to talk</em>; shorten the talking to fit within the fast cycles and focus on the part that will challenge the other guy’s thinking.  [emphasis added]</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Compliance to Spec Considered Unprofessional</title>
		<link>http://www.agilekiwi.com/other/agile/compliance-to-spec-considered-unprofessional/</link>
		<comments>http://www.agilekiwi.com/other/agile/compliance-to-spec-considered-unprofessional/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 00:00:00 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Agile BA]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=385</guid>
		<description><![CDATA[In keeping with the theme of this blog, which is “the neglected essentials of software development”, I’d like to share something I’ve learned recently.  It’s about how Professional people in other fields think – people like architects, town planners and doctors.]]></description>
				<content:encoded><![CDATA[<p>In keeping with the theme of this blog, which is “the neglected essentials of software development”, I’d like to share something I’ve learned recently.  It’s about how Professional people in other fields think – people like architects, town planners and doctors.  As they work, they engage in an on-going</p>
<blockquote><p>…conversation with the situation.</p></blockquote>
<p>What a lovely phrase.  It comes from the classic book <em><a href="http://www.amazon.com/Reflective-Practitioner-Professionals-Think-Action/dp/1857423194/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1298005156&amp;sr=1-1">The Reflective Practitioner: How Professionals Think In Action</a></em> by Donald Schön. Schön was an influential professor at MIT.  His book was published in 1983, so none of his case studies come from IT, and yet he finds something that agile software developers will recognise.  In all the professions he studied, professionals relied heavily on <strong>feedback</strong> and <strong>reflection</strong> (i.e. being observant and thoughtful, and changing your mind as necessary).  He found that this approach is not just the <em>normal</em> way for professionals to work – it’s also the <em>best</em> way.</p>
<p>Here are some favourite quotes from the book:</p>
<blockquote><p>At the same time that the enquirer [i.e. professional] tries to shape the situation…, he must hold himself open to the situation’s back-talk. He must be willing to enter into new confusions and uncertainties.  Hence, he must adopt a kind of double vision.  He must act in accordance with the view he has adopted, but he must realize that he an always break it open [change it] later, indeed <em>must</em> break it open later in order to make new sense of his transaction with the situation.</p></blockquote>
<blockquote><p>… he recognizes that the situation, having a life of its own distinct from his intentions, may foil his [plans] and reveal new meanings.</p></blockquote>
<h2>Implications</h2>
<p>Schön’s work sheds light on some key issues in software development:</p>
<p><strong>Issue 1 – BDUF</strong></p>
<p>Firstly, consider the agile aversion to Big Design Up Front (BDUF).  <strong>BDUF</strong> is not an on-going conversation with the situation.  It’s just a period of thinking, followed by an attempt to give the situation a lecture!  That doesn’t work in any other professions.</p>
<p><strong>Issue 2 – Handing over “designs”</strong></p>
<p>Secondly, there are implications for <strong>passing work from one person to another</strong>.  Some years ago, as a software architect, I had difficulty working with a more junior developer.  Our interactions just didn’t seem to be successful.  I now realise what was going on.  He thought I was handing over a description of what he should build; but I thought I was handing over a <em>conversation with the situation</em>.</p>
<p>It’s difficult to hand over an in-flight conversation, for someone else to continue in your absence.  And yet, when a senior hands over a “design” to a junior, that is exactly what’s happening.  The senior is stepping back from the conversation with the situation, and expecting the junior to continue it.</p>
<blockquote><p>Here’s this conversation I’ve been having with the problem. Here’s a rough outline of what I said and how the situation replied.  So I think we might proceed as follows…&lt;outline of suggested solution goes here&gt;.  <strong>But, don’t just take my word for it.  Continue the conversation,</strong><em> </em>thinking and altering course when necessary, as I would have done if I had continued the conversation myself<em>.</em> Finally, if you need to change course, but don’t know how, ask me and we’ll figure it out together.”</p></blockquote>
<p>That’s the verbose way to say it.  Unfortunately, we often cut corners and say, “Here, build this”.  Junior programmers don’t know that, “Here, build this”, really means , “Please continue my conversation.”  In fact lots of senior programmers don’t know that either – I know I didn’t.  It was only when I read Shön’s book that I finally had the mental tools to really understand the situation.</p>
<p><strong>Issue 3 – “BA” or “Designer”</strong></p>
<p>Finally, the conversation metaphor tells us about <strong>the role of business analysts,</strong> on both traditional and agile projects.  At the recent  <a href="http://10yearsagile.org/">#10yrsagile</a> event in Utah, Jeff Patton and others commented on the difference between <a href="http://advice.cio.com/michael_hugos/15315/business_analysts_versus_business_designers">“BAs” and “designers”.</a> The “designer” model directly supports “conversations with the situation”, since the person in the designer role clearly undertakes such dialog with the situation.  But in the BA model, if interaction between the BA and developer is either (i) infrequent, (ii) asynchronous or (iii) one-way, then the conversation with the situation breaks down.</p>
<h2>Example</h2>
<p>Here is a detailed real example, of a <a href="/other/news/conversation-with-the-situation-a-software-example/">conversation with the situation while coding</a>.</p>
<h2>Support from Other Authors</h2>
<p>Several other authors have shared similar findings.  For instance, in his book “The Design of Design” Fred Brooks quotes the following diagram (originally from Maher, Poon and Boulanger):</p>
<p><a href="http://www.agilekiwi.com/wp-content/uploads/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://www.agilekiwi.com/wp-content/uploads/image_thumb1.png" border="0" alt="image" width="608" height="213" /></a></p>
<p>In this diagram, the problem and solution both shape <em>each other,</em> as we move left-to-right through time.  (I remember it as the “crocodile diagram”, since the zig-zags look like the teeth of a crudely-drawn crocodile.)</p>
<p>And, of course, no discussion of these topics would be complete without referring to the <a href="http://www.developerdotstar.com/mag/articles/reeves_design_main.html">classic paper from Jack Reeves</a>. Schön’s work adds weight to his arguments.</p>
<h2>Conclusion</h2>
<p>When we put all this together, we are led to a surprising conclusion regarding specifications (and their agile equivalents, such as acceptance tests or criteria that are prepared in advance of coding).</p>
<table border="0" cellspacing="0" cellpadding="2" width="678">
<tbody>
<tr>
<td width="676" valign="top"><span style="font-size: large;">If you produce a system that exactly matches its specification, <em>you have acted unprofessionally.</em></p>
<p>Either, you didn’t maintain a conversation with the situation after you got the spec; or you kept on talking with the situation, but you ignored it’s advice whenever it disagreed with the spec.<br />
</span>
</td>
</tr>
</tbody>
</table>
<p>Regrettably, we are all encouraged to make this mistake.  On traditional projects, there may be implicit or explicit pressure to minimise the number of change requests.  On agile projects, there may be pressure to keep the velocity up, and some developers may respond by doing just enough to meet the pre-written acceptance tests, and quite deliberately “not asking too many questions”.  In so doing, they rob the project of their natural talent for “<a href="http://alistair.cockburn.us/Characterizing+people+as+non-linear,+first-order+components+in+software+development">looking around and taking initiative</a>”.  Finally, on projects of all kinds, there is often insufficient time budgeted for the Validation (<a href="http://www.stickyminds.com/sitewide.asp?Function=edetail&amp;ObjectType=COL&amp;ObjectId=13798&amp;tth=DYN&amp;tt=siteemail&amp;iDyn=2">fitness to purpose</a>) part of “<a href="http://www.stickyminds.com/sitewide.asp?Function=edetail&amp;ObjectType=COL&amp;ObjectId=13498&amp;tth=DYN&amp;tt=siteemail&amp;iDyn=2">Verification and Validation</a>”.</p>
<p>I hope that, with increasing recognition of Schön’s work, will come the realisation that true professionals do not comply with a spec, they surpass it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/compliance-to-spec-considered-unprofessional/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>10 Years Agile &#8211; a perspective from outside the room</title>
		<link>http://www.agilekiwi.com/other/agile/10-years-agile-a-perspective-from-outside-the-room/</link>
		<comments>http://www.agilekiwi.com/other/agile/10-years-agile-a-perspective-from-outside-the-room/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 21:13:35 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=399</guid>
		<description><![CDATA[Recently Alistair Cockburn invited 32 agile practitioners to join him at the Snowbird ski resort, for a retrospective on the agile movement as a whole.  I followed the event via Twitter, sitting under a sun umbrella here in the southern hemisphere, reading the tweets from the snow. The event was both a celebration of the [...]]]></description>
				<content:encoded><![CDATA[<p>Recently Alistair Cockburn invited 32 agile practitioners to join him at the Snowbird ski resort, for a <a href="http://10yearsagile.org/">retrospective on the agile movement</a> as a whole.  I followed the event via Twitter, sitting under a sun umbrella here in the southern hemisphere, reading the tweets from the snow.</p>
<p>The event was both a celebration of the first 10 years of agile, and an attempt to answer three questions which Alistair circulated before the meeting:</p>
<ol>
<li>What problems in software or product development have we solved (and therefore should not simply keep re-solving)?</li>
<li>What problems are fundamentally unsolvable (so therefore we should not keep trying to “solve” them)?</li>
<li>What problems can we sensibly address – problems that we can mitigate either with money, effort or innovation? (and therefore, these are the problems we should set our attention to, next.)</li>
</ol>
<p>There was clearly much to celebrate from the past 10 years of agile, but when it came to the future, there seemed to be concerns in several areas: the slowness with which good practices are adopted in some quarters; the risk of losing momentum now that there is no longer a common “enemy” (as heavy process was, when agile began); and a perceived lack of strength, clarity and consensus in the group’s answer to Alistair’s third question – “what next?”</p>
<p>Reflecting on those concerns, here are my “ah-has” from my virtual participation:</p>
<h2>Gradual Change is Normal (Part 1)</h2>
<p>Mike Cohn wrote a great post <a href="http://blog.mountaingoatsoftware.com/reflections-on-the-10-years-since-the-agile-manifesto">likening agile to Object Orientation</a>.  Eventually, OO was taken for granted, and people stopped talking about it.  He suggests that agile will go the same way, and I agree.</p>
<p>However, these things can take a <em>really, really</em> long time. Here’s an example, that extends Mike’s OO one: By the late 90’s, OO had blossomed so much that the premier OO conference, OOPSLA, moved away from its original goal of making OO practical and understandable.  OOPSLA’s work was done.  But, at the turn of the century, there were still a lot of people who weren’t using OO.  Legions of VB6 developers making business apps on the Microsoft platform were not using OO at all.  Slowly, over the decade that followed, OO seeped into the Microsoft development community.  Languages were replaced and improved, and starting in about 2007 we saw wide adoption of Object-Relational Mapping and a variant of Smalltalk’s decades-old Model-View-Presenter pattern.  (Yes, Microsoft played a role in the timing, but so did changing sentiment within the developer community.)</p>
<p>There are two key things to note from this example:</p>
<ul>
<li>We are currently seeing (real) OO go mainstream in the Microsoft community –  about a decade after it went mainstream in most other parts of the development community.</li>
<li>This happened without any industry association driving it.   There was no equivalent to the Agile Alliance, cajoling Microsoft developers into using Objects.  There was no need for such a body, because OO had become adequately embedded in the industry&#8217;s  consciousness back in the 90s.  It was like a virus that had infected enough  of the population that it could no longer be eliminated.  Slowly, over the decade that followed, it reached the rest.</li>
</ul>
<p>So don’t sweat it. Agile isn’t going away.  It will continue to influence people, and to be embraced by new users, long after the early adopters have taken it for granted and stopped talking about it.</p>
<h2>Gradual Change is Normal (Part 2)</h2>
<p>In a post on his <a href="http://agilesadist.blogspot.com/">delightfully-named blog</a>, Jonathan House <a href="http://agilesadist.blogspot.com/2011/02/my-ahas-from-10-years-agile.html">wrote</a> the following after the Snowbird event:</p>
<blockquote><p>Does Agile really make a difference? &#8211; Not so much a question that showed up at the conference, but one that kept running around in my head, kicking over garbage cans and spray-painting the cat. … It&#8217;s clear we&#8217;ve made excellent progress over the past 10 years, but it&#8217;s still not so clear to me why businesses aren&#8217;t beating down the door to really adopt Agile throughout the enterprise …</p></blockquote>
<p>Jonathan, I’m fairly sure this is not a reflection on agile.  It is reflection on business.  Business leaders often fail to follow advice, <em>even when they actually agree that the advice is good</em>.  I don’t say this out of personal dissatisfaction; it is a well-researched fact.  There’s even a book on the subject, called <em><a href="http://www.amazon.com/Knowing-Doing-Gap-Companies-Knowledge-Action/dp/1578511240">The Knowing-Doing Gap</a> </em>by Jeff Pfeffer and Bob Sutton.  (I mentioned Pfeffer and Sutton in my Agile Roots talk.  As an agilist and geek, I find their work extremely credible and relevant).</p>
<p>I am convinced that you are observing not a failure in agile, but a significant problem in business in general.</p>
<p>(Having said that, it wouldn’t hurt if we in the agile community could familiarize ourselves with how the more self-aware sections of business community do already understand agile, <a href="http://www.agilekiwi.com/peopleskills/opinions/">just with different words</a> and under different names.  It will be much more polite, and therefore more likely to succeed, if we listen before we lecture).</p>
<h2>Diversity is Good</h2>
<p>I think some people who were following the Snowbird event may have been disappointed at an apparent lack of consensus.  I know I was, at first.  But then I remembered that diversity is good.  Think of the importance of genetic diversity in populations of animals; remember how the messy diversity of capitalism out-performed Soviet central planning; and think back to the diversity of the original 17 signatories to the Agile Manifesto – a diversity which was alive and well both <a href="http://alistair.cockburn.us/No+center+to+agile">before and after</a> they signed the Manifesto.</p>
<p>By having a range of people, with <a href="http://www.netobjectives.com/blogs/snowbird10">differing</a> <a href="http://www.pragprog.com/magazines/2011-02/agile--">interests and priorities</a>, the agile community is much more likely to successfully address the many and varied challenges of the next decade.</p>
<p>I think the point with diversity is not just to accept it, but to actually encourage it.  Good agile, particularly by <a href="http://martinfowler.com/bliki/ShuHaRi.html">experienced</a> practitioners, <a href="http://pmdoi.org/">will be situationally specific</a>.  I suspect this point has not fully seeped into the overall consciousness of the wider agile community.  Perhaps one of the tasks for the next 10 years is to promote the acceptance of “situationally specific agile”, and to help people learn (i.e. practice) how to do it.</p>
<h2>There is Plenty to Do</h2>
<p>Several people pointed out that agile lacks a clear “enemy” now.  When agile started, heavyweight process was the enemy. But today there is no clearly-identifiable external enemy.  So what is the point of the agile movement now?</p>
<p>David Anderson seemed to reflect the mood of the group when he <a href="http://agilemanagement.net/index.php/Blog/reflections_on_10_years_of_agile/">wrote</a>:</p>
<blockquote><p>The mission now is incremental improvement. It’s evolution, education and improving levels of maturity, rather than a revolution. The enemy is now within. The enemy is as Joshua Kerievsky put it “all the crap I see out there” despite 10 years of Agile methods.</p></blockquote>
<p>David Anderson went on to write</p>
<blockquote><p>I don’t believe the Agile movement knows how to operate without something to revolt against. Agile came, it served its purpose, it had a positive effect. What next? Perhaps it is time to move on?</p></blockquote>
<p>Is the really nothing more to do?  Nothing more but combating the enemies within, of complacency and poor execution?  I can see the logic of what Joshua and David (and others) are saying, but please, please don’t let it be true!  There is so much more to do.  Here are just a few topics that come to mind:</p>
<ul>
<li>The spread of agile beyond software (as per Jonathan House’s comment above, and others on the day)</li>
<li>Jeff Patton’s story mapping and feature thinning – two wonderful techniques which deserve to become much more prominent in agile’s second decade</li>
<li>Advancement of knowledge/skill in Ri-level/situationally-specific agile</li>
<li>Philippe Kruchten’s <a href="http://pkruchten.wordpress.com/2011/02/13/the-elephants-in-the-agile-room/">herd of elephants</a> (elaborated/commented on <a href="http://drdobbs.com/architecture-and-design/229301128?pgno=2">here</a> by Scott Ambler)</li>
<li>Really paying attention to “Individuals and Interactions”.  For 10 years we’ve been getting this first point of the Agile Manifesto <a href="http://www.agilekiwi.com/peopleskills/individuals-and-interactions/">round the wrong way</a>!!  So you can’t tell me there’s nothing left to do ;-)  James Coplien phrased it well in his outstanding <a href="http://www.infoq.com/articles/agile-10-years-on">reflection on the first 10 years</a>: “We have test scripts and jUnit trumping individuals and interactions”.</li>
<li>Sharing our failures as well as our successes, as several people mentioned on the day</li>
<li>Contracts for agile projects – currently, only a partially-solved problem at best.</li>
</ul>
<p>We’ve only been doing knowledge work in teams for a short part of human history.  The previous millennia did not prepare us well for the last few decades of complex, abstract, co-operation in non-trivial teams.  So of course this is still more to learn.</p>
<h2>Summary</h2>
<p>We need to keep thinking, keep talking and keep learning.</p>
<p>We need to keep agile’s sense of humanity – of valuing, respecting and caring for people in the workplace.</p>
<p>We need to retain and treasure the global and local communities of practitioners, which the agile movement has created.</p>
<p>We need to keep all these things, even though there is no longer a common enemy to unite us.  We need to learn to operate in an agile community that doesn’t just accept, but actively promotes, its own diversity.</p>
<p>I recently stumbled across a quote from the French poet Stéphane Mallarmé:</p>
<blockquote><p>to define is to kill, to suggest is to create</p></blockquote>
<p>Let us not define our future.  Let’s suggest it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/10-years-agile-a-perspective-from-outside-the-room/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Big Lessons from a Little Process</title>
		<link>http://www.agilekiwi.com/other/agile/big-lessons-from-a-little-process/</link>
		<comments>http://www.agilekiwi.com/other/agile/big-lessons-from-a-little-process/#comments</comments>
		<pubDate>Fri, 07 Dec 2007 17:23:00 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>
		<category><![CDATA[Agile BA]]></category>

		<guid isPermaLink="false">http://dell-pc/AgileKiwiWordpress/news/big-lessons-from-a-little-process/</guid>
		<description><![CDATA[I presented a session at today&#8217;s Wellington Agile BarCamp.  The session was called &#8220;Crystal Clear: Big Lessons from a Little Process&#8220;.  Instead of describing all the details of the process, I outlined four of the most important lessons I have learned from it. Here are some brief notes on the presentation. Introduction General background on [...]]]></description>
				<content:encoded><![CDATA[<p>I presented a session at today&#8217;s <a href="http://barcamp.org/BarCampAgileWellington"><span style="text-decoration: underline;">Wellington Agile BarCamp</span></a>.  The session was called &#8220;<em>Crystal Clear: Big Lessons from a Little Process</em>&#8220;.  Instead of describing all the details of the process, I outlined four of the most important lessons I have learned from it.</p>
<p>Here are some brief notes on the presentation.</p>
<p><span id="more-71"></span></p>
<p><strong>Introduction</strong></p>
<p><a href="http://www.agilekiwi.com/crystal_clear.htm"><span style="text-decoration: underline;">General background</span></a> on Crystal Clear</p>
<p><strong>Big Lessons that I&#8217;ve Learned from Crystal Clear</strong></p>
<ul>
<li><a href="http://alistair.cockburn.us/index.php/Just-in-time_methodology_construction"><span style="text-decoration: underline;">Methodology-per-process</span></a>.  How you can (and <a href="http://alistair.cockburn.us/index.php/Talk:Just-in-time_methodology_construction"><span style="text-decoration: underline;">should</span></a>) tune your process to the project at hand.</li>
<li>Defusing debates about documentation, by recognising the two purposes of documents: supporting the current project; and supporting future maintenance programmers.  In my projects, I have found it best <em>not </em>to kill two birds with one stone.</li>
<li><a href="http://www.agileproductdesign.com/blog/shu_business.html"><span style="text-decoration: underline;">Shu-Ha-R</span></a>i, the stages of learning skills and how that applies to agile.  People at different stages have different needs for prescriptive process versus flexibility; and different comfort levels with finalizing process elements &#8220;later&#8221;.</li>
<li>Simple = good.  The simplicity of Crystal Clear is backed by both theory and practice.  Its simplicity supports the design goals of Crystal, which are safety (delivering a successful project), efficiency (cost-effectiveness) and habitability (people are comfortable using Crystal).</li>
</ul>
<p><strong>Links to other resources</strong></p>
<p>I mentioned various other resources during the presentation.  They included:</p>
<ul>
<li><a href="http://alistair.cockburn.us/index.php/Are_iterations_hazardous_to_your_project"><span style="text-decoration: underline;">Material on iteration lengths</span></a>: why there is no real value in saying &#8220;my iteration is shorter than yours&#8221;.</li>
<li><a href="http://alistair.cockburn.us/index.php/Collaboration:_the_dance_of_contribution"><span style="text-decoration: underline;">Collaboration: the Dance of Contribution</span></a>.  A lengthy piece, with a lot to take in.  I skim read it the first time I saw it, but I got more out of it when I re-read it some months later.  My favourite bit: &#8220;No idea is rejected out of hand and no idea gets a free pass.&#8221;  I&#8217;m still learning how to apply it ;-)</li>
<li><a href="http://www.ericsink.com/articles/Requirements.html"><span style="text-decoration: underline;">Are requirements a document or a database</span></a>?  I found Eric Sink&#8217;s article explains this dilemma very well.  (As for his comments about agile in the same article, I think he&#8217;s touching on an issue which James Bach described well <a href="http://www.satisfice.com/blog/archives/45"><span style="text-decoration: underline;">here</span></a>. Although they may not phrase it this way themselves, I&#8217;d suggest that Eric and James are both &#8220;Ri-style&#8221; practitioners, objecting to the over-emphasis of &#8220;Shu-style&#8221; agile.  As we discussed today, both styles have their place.)</li>
<li>I also mentioned Eric&#8217;s &#8220;<a href="http://www.ericsink.com/Career_Calculus.html"><span style="text-decoration: underline;">Career Calculus</span></a>&#8221; page, and suggested that the same approach applies to process.  The most important thing is not where you start; but how fast you improve.</li>
<li><a href="http://www.xprogramming.com/xpmag/docBigPictureAndSpec.htm"><span style="text-decoration: underline;">Ron Jeffries on documentation</span></a>.  His recommendations are broadly similar to the Crystal ones except (a) he has a firm view that the tests <em>are</em> the requirements documentation (Crystal is more flexible about how requirements are noted down) (b) he implies that you might not need future facing documentation (I would assume that if your software was worth writing, then it&#8217;s probably worth maintaining, which means it usually is worthwhile to write a future-facing document)</li>
</ul>
<p>That all looks very brief, but on the day it took 50 minutes &#8211; honest.</p>
<p>By the way, I did it as an &#8220;incremental presentation&#8221;.  After each of the four main points, I paused for questions.  The idea was that each main point was like an &#8220;iteration&#8221;, and pausing for questions was like &#8220;releasing&#8221; that iteration.  It seemed to work.  We had good discussion after most points, and interleaving questions with presentation made it easier to fit the timeslot. (If all questions are left to the end, how much time should you leave?  Will people ask lots of questions?  Will they ask none?)</p>
<p>If you were there (or you weren&#8217;t) please let me know if you have any questions that are not covered in these notes.  Either leave a comment below, or <a href="http://www.agilekiwi.com/contact.htm"><span style="text-decoration: underline;">email me</span></a>.</p>
<p><strong>Update 6 March 08:</strong></p>
<p>I gave the presentation again <a href="http://newzealand.theiiba.org/default.asp?contentID=592"><span style="text-decoration: underline;">today</span></a>.  Here are some of the BA-related resources that I mentioned:</p>
<p>Scott Ambler on:</p>
<ul>
<li><a href="http://www.agilemodeling.com/essays/agileAnalysis.htm"><span style="text-decoration: underline;">Agile analysis</span></a></li>
<li>Thoughts on the <a href="http://www.agilemodeling.com/essays/businessAnalysts.htm"><span style="text-decoration: underline;">role of BA&#8217;s in agile projects</span></a></li>
<li><a href="http://www.agilemodeling.com/essays/barelyGoodEnough.html"><span style="text-decoration: underline;">Artifacts on agile projects</span></a></li>
</ul>
<p>A couple of interesting points came out in discussion afterwards.  They included the idea of &#8220;emphasising facillitation over artifact creation&#8221;, the concept of <a href="http://steve.emxsoftware.com/Domain+Driven+Design/DDD+Ubiqitous+Language"><span style="text-decoration: underline;">ubiquitous language</span></a>, and the notion that in <em>some </em>cases asking the customer to describe what they need is like a bunch of blind men describing an elephant.  Everyone you ask says something different, and what the business <em>really</em> needs might be different again.  In cases like these (where the customer organisation is, for whatever reason, unable to speak with a single authoritative voice) my thoughts are: don&#8217;t just say &#8220;that&#8217;s the customer&#8217;s problem&#8221;, or &#8220;we can&#8217;t do agile in these circumstances&#8221;, but instead apply BA skills to<a href="http://www.agilemodeling.com/essays/businessAnalysts.htm#TowardsAgileAnalysts"><span style="text-decoration: underline;"> help the customer to articulate their needs</span></a>.</p>
<p>&gt;Finally, here is the page on <a href="http://www.agilekiwi.com/negotiation.htm"><span style="text-decoration: underline;">negotiation</span></a>, which I mentioned at the end.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/big-lessons-from-a-little-process/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Making Better Programmers</title>
		<link>http://www.agilekiwi.com/other/agile/making-better-programmers/</link>
		<comments>http://www.agilekiwi.com/other/agile/making-better-programmers/#comments</comments>
		<pubDate>Wed, 21 Mar 2007 20:40:00 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>

		<guid isPermaLink="false">http://dell-pc/AgileKiwiWordpress/news/making-better-programmers/</guid>
		<description><![CDATA[Regular feedback is a key element of agile development.&#160; Rapid feedback improves our software.&#160; I suggest it also improves us, the people who write the software. I&#8217;ve just read a fascinating article on where talent comes from, over on Freakonomics.com.&#160; It outlines research into the key factors that develop talent.&#160; The key factors are: &#34;setting [...]]]></description>
				<content:encoded><![CDATA[<p>Regular feedback is a key element of agile development.&#160; Rapid feedback improves our software.&#160; I suggest it also improves <i>us</i>, the people who write the software.</p>
<p>I&#8217;ve just read a fascinating article on <a href="http://www.freakonomics.com/times0507col.html"><u>where talent comes from</u></a>, over on <a href="http://www.freakonomics.com"><u>Freakonomics.com</u></a>.&#160; It outlines research into the key factors that develop talent.&#160; The key factors are:</p>
<blockquote><p><i>&quot;setting specific goals, </i><i><b>obtaining </b></i><i><b>immediate feedback</b></i><i> </i><i>and concentrating as much on technique as on outcome&quot;</i>. [emphasis added]</p>
</blockquote>
<p>For instance, life-long learning comes naturally to surgeons because they get instant feedback on the effectiveness of their decisions.&#160; But similar learning doesn&#8217;t come naturally to doctors in fields where there is a&#160; long delay between decision and outcome.</p>
<p>The research finds that development of talent is heavily dependent on the practitioner receiving prompt feedback on their decisions.&#160; The timeliness of the feedback matters.&#160; </p>
<p>Waterfall processes lack timeliness of feedback.&#160; A classic example would be an analyst or architect making decisions at the start of a waterfall project.&#160; Many months may pass before they learn the result of their decisions.&#160; (Sometimes they <i>never </i>learn the result because they move to another project before the first one is finished.&#160; Such so-called &quot;experience&quot; is of little value.)</p>
<p>In agile development, decision makers get feedback quickly.&#160; Timeboxed iterations give feedback in a few weeks; unit tests give feedback in minutes; and paired programmers give feedback in seconds.&#160; Research suggests this feedback doesn&#8217;t just improve the program; it also improves the programmers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/making-better-programmers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scientific Experiments</title>
		<link>http://www.agilekiwi.com/other/agile/scientific-experiments/</link>
		<comments>http://www.agilekiwi.com/other/agile/scientific-experiments/#comments</comments>
		<pubDate>Mon, 02 Oct 2006 17:28:00 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Agile Software Development]]></category>

		<guid isPermaLink="false">http://dell-pc/AgileKiwiWordpress/news/scientific-experiments/</guid>
		<description><![CDATA[Steve Yegge points out that it&#8217;s very hard to do a valid scientific experiment in software development: &#8220;You can&#8217;t have the same team do the same project twice; a bunch of stuff changes the second time around. You can&#8217;t have 2 teams do the same project; it&#8217;s too hard to control all the variables, and [...]]]></description>
				<content:encoded><![CDATA[<p>Steve Yegge points out that it&#8217;s very hard to do a valid <a href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html"><span style="text-decoration: underline;">scientific experiment</span></a> in software development:</p>
<blockquote><p><em>&#8220;You can&#8217;t have the same team do the same project twice; a bunch of stuff changes the second time around. You can&#8217;t have 2 teams do the same project; it&#8217;s too hard to control all the variables, and it&#8217;s prohibitively expensive to try it in any case. The same team doing 2 different projects in a row isn&#8217;t an experiment either.</em></p>
<p><em>About the best you can do is gather statistical data across a </em><em><strong>lot </strong></em><em>of teams doing a </em><em><strong>lot </strong></em><em>of projects, and try to identify similarities, and perform some regressions, and hope you find some meaningful correlations.&#8221;</em></p></blockquote>
<p>That&#8217;s exactly how <a href="http://www.agilekiwi.com/crystal_clear.htm"><span style="text-decoration: underline;">Crystal Clear</span></a> came about.  Alistair Cockburn spent a lot of time studying successful teams, looking for the similarities, then he documented them.  That&#8217;s not the kind of half-baked <a href="http://www.agilekiwi.com/fads.htm"><span style="text-decoration: underline;">fad</span></a> which Steve criticises, it&#8217;s about as scientific as it gets (in our field).  In fact, it was scientific enough to earn Alistair his Ph.D.  His <a href="http://alistair.cockburn.us/index.php/People_and_methodologies_in_software_development"><span style="text-decoration: underline;">doctoral dissertation is on-line</span></a> and makes suprisingly easy reading.  (Or you can find a shorter outline <a href="http://alistair.cockburn.us/Characterizing+people+as+non-linear,+first-order+components+in+software+development">here</a>.) I encourage you to read it, to see how Alistair grappled with the very problems Steve describes. (Eventually, he solved them much more successfully than Steve would expect. He documented his results as Crystal Clear).</p>
<p>Steve makes some very valid criticisms of the Agile movement.   However, his assertion of a lack of scientific rigour is incorrect (in Alistair&#8217;s case, at least).  Alistair conducted exactly the kind of research which Steve calls for, without any pre-conceived notions of what the outcome should be (he started years before the agile movement was founded).  He came up with a simple, effective process &#8211; which happens to be agile.</p>
<p>Interestingly, Alistair&#8217;s research-based process is somewhat different from XP.  As I&#8217;ve said before, <a href="http://www.agilekiwi.com/definition.htm"><span style="text-decoration: underline;">XP is a subset of agile, not a synonym</span></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/scientific-experiments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
