<?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</title>
	<atom:link href="http://www.agilekiwi.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.agilekiwi.com</link>
	<description>The neglected essentials of software development</description>
	<lastBuildDate>Tue, 27 Mar 2012 09:00:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Advocacy and Inquiry</title>
		<link>http://www.agilekiwi.com/peopleskills/advocacy-and-inquiry/</link>
		<comments>http://www.agilekiwi.com/peopleskills/advocacy-and-inquiry/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 19:56:15 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[People Skills]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=735</guid>
		<description><![CDATA[<p>Have you ever wondered why it is so hard to achieve real change in organisations?  Have you ever wondered why organisations don’t really seem to learn?  Have you ever feared that, in spite of all the talk about change, it will really amount to nothing in the long run?</p>
<p>There’s &#8230; <a href="http://www.agilekiwi.com/peopleskills/advocacy-and-inquiry/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p>Have you ever wondered why it is so hard to achieve real change in organisations?  Have you ever wondered why organisations don’t really seem to learn?  Have you ever feared that, in spite of all the talk about change, it will really amount to nothing in the long run?</p>
<p>There’s little-known answer to these questions, backed by several decades of research.  It’s not pretty, since it shows the true reasons why these problems are so incredibly hard to solve.  Fortunately, it also offers a solution.  The solution is difficult, requiring much commitment, patience and humility.  …But then, if you think about it, you already knew there wouldn’t be an <em>easy</em> solution, right?  :-)</p>
<h2>In a nutshell</h2>
<p>The heart of the problem is that we don’t learn because we don’t communicate effectively.  When humans communicate, we tend to value these things:</p>
<ul>
<li>achieve my goals (as defined by me)</li>
<li>win, don’t lose</li>
<li>avoid triggering negative emotions in myself or others</li>
</ul>
<p>Prof. <a href="http://en.wikipedia.org/wiki/Chris_Argyris">Chris Argyris</a> of Harvard University has found that these core values, or “governing variables” as  he calls them, underlie most human communication.  People espouse all sorts of ideas about we <em>ought</em> to communicate, but when Argyis and his colleagues observed how people actually <em>do</em> communicate, they found these same values occurred over and over again – across cultures, across genders and across many thousands of people.  I don’t know whether these values are encoded in our DNA, installed in us by our culture(s), or just a pattern that our minds subconsciously settle upon.  In any case, they form a consistent pattern of human communication, which I will refer to here as the <strong>“Default Communication Style”.</strong></p>
<p>One consequence of the Default Communication Style is that, in trying to prevent triggering negative emotions, people unilaterally protect themselves and others.  Rather than seeking the other party’s true thoughts, via genuine dialog, a person will guess or presume the other person’s thoughts and never put the guesses to the test.  So we end up walking around our offices assuming that certain people have “bad” goals or intentions, without ever testing to see if our assumptions are actually true. (Often they are not).  Wikipedia describes <a href="http://en.wikipedia.org/wiki/Chris_Argyris">a few familiar symptoms</a>: withholding information, creating rules to censor information and behaviour, and holding private meetings (aka talking about people behind their backs).</p>
<p>The values of &#8220;win; don&#8217;t lose&#8221; and &#8220;achieve my goals (as I define them)&#8221;  also hinder the free and full exchange of information.  All in all, the Default Communication Style causes people to withhold relevant thoughts and information.  So, deprived of full information, our organisations fail to learn.</p>
<h2>What’s the alternative?</h2>
<p>Argyris suggests that we should adopt the following value set instead.</p>
<ul>
<li>give and receive valid information</li>
<li>favour informed choice for all concerned (as opposed to unilateral control)</li>
<li>mutual responsibility for “looking out” for each other</li>
</ul>
<p>So we become more concerned with sharing what is on our minds, and equally we become more concerned with helping others to share what is on <em>their</em> minds. (Even when its different from our own views.).  The best terms I’ve heard to describe this are <strong>“Advocacy and Inquiry” </strong>(*)<strong>.</strong>  Advocating our own thoughts with skill and openness; and inquiring into the thoughts of others with skill (again) and curiosity.  We want to get the full picture flowing both ways: out of our own heads and into the group’s consciousness, and equally out of each other member of the group and into our own awareness.</p>
<p>When engaging in Advocacy and Inquiry, we should not be hamstrung by the desire to avoid causing offence.  That’s not an open licence to be deliberately offensive, but rather a recognition that our normal cop-outs are self-defeating.  When we avoid raising awkward issues, we ultimately let down ourselves and also the person who our silence is designed to “protect”.</p>
<h2>More evidence</h2>
<p>You might not have heard of Argyris’s work before.  But you probably will have heard of other people who have independently discovered the same ideas.  For instance, the authors of the book <a href="http://www.agilekiwi.com/peopleskills/enjoying-meetings-part-1/">Crucial Conversations</a>  followed around individuals who were good at “getting things done” in the workplace. The authors analysed the behaviour of these communication stars, to find out how they did it.  The answer centres around adding one’s own contributions to the group’s “pool of meaning”, <em>and helping others to do likewise. </em>I see<em> </em><a href="http://www.amazon.com/Crucial-Conversations-Talking-Stakes-ebook/dp/B005K0AYH4">Crucial Conversations</a> as a excellent “how to” manual, for Advocacy and Inquiry.</p>
<p>The classic guidebook to negotiation, <a href="http://www.agilekiwi.com/peopleskills/the-power-of-negotiation/">Getting to Yes</a>, emphasises sharing of valid information instead of “winning” one’s opening position.</p>
<p><a href="http://bobsutton.typepad.com/">Bob Sutton</a> of Stanford writes a great blog, and summarizes the same ideas with the phrase</p>
<blockquote><p>Argue like you’re right; listen like you’re wrong</p></blockquote>
<h2>Why is it so difficult?</h2>
<p>There’s a danger that all of the above will sound like common sense.  And to some degree it is.  Its easy to look at, and say, “Yes, I think that’s a good idea”.  It’s much harder is to actually put it into practice.  When it comes to the Default Communication Style, we’ve each had a whole lifetime of practice.  So, it is deeply ingrained in us, and we use it <a href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/">instinctively</a>.  And that is the real challenge: not simply to believe that Advocacy and Inquiry is the right way to go, but to actually act consistently with that belief in our moment-by-moment communication.</p>
<p>It is easy to fail.  Argyris found that people can agree with his ideas, but still have trouble putting them in to practice.  He calls this the difference between espoused theory (the theory expressed by what we claim to believe) and theory-in-use (the theory implied by what we actually do).  I recently experienced the difference first hand.  While having a conversation with a manager, I felt that the manager was becoming upset with what I was saying, so I backed away from fully expressing myself.  And what was the topic?  I was trying to say that we need more Advocacy and Inquiry!!!  In a conversation <em>about these exact issues</em>, I still slipped back into Default behaviour when the going got tough!</p>
<p>Why do we fall back into our old habits? Because we are used to them &#8212; very skilled in them, in fact.  We are much less skilled in Advocacy and Inquiry.  So, when the going gets tough, we unconsciously fall back to our old ways.</p>
<h2>What do we need to do?</h2>
<p>Practice.  Effective communication requires practice, just like playing tennis, reading music or programming a computer.  You won’t be perfect when you first start practicing, but <a href="http://www.agilekiwi.com/peopleskills/people-skills-for-nerds-a-summary-video/">everyone has to start somewhere</a>.</p>
<p>Actually, we don’t need <em>only </em>practice.  It also helps to obtain some up-front knowledge of the topic.  Something to “seed” our practice, so to speak. Two great starting points are the books <a href="http://www.amazon.com/Crucial-Conversations-Talking-Stakes-ebook/dp/B005K0AYH4">Crucial Conversations</a>, which I see as a manual for Advocacy and Inquiry, and <a href="http://www.amazon.com/Discussing-Undiscussable-Overcoming-Jossey-Bass-Management/dp/0787986321">Discussing the Undiscussable</a>, which is a beginner’s guide to Argyris’s work.</p>
<p>You can find additional resources at <a href="http://blog.benjaminm.net/argyris/">Benjamin Mitchell’s blog</a>, and at <a href="http://actiondesign.com/about/intellectual">Action Design</a>.</p>
<p>Finally, I hope to post more on this topic myself over the coming months.  So stay tuned…  In the meantime, please leave questions, comments, and links to additional resources below.</p>
<p>&#8212;-</p>
<p>(*) I’m calling the two sets of values the “Default Communication Style”, for the first, and “Advocacy and Inquiry” for the second.  If you’re familiar withe Argyris’s work you’ll know that these are not the standard terms.  Argyris himself uses the terms “Model I” and “Model II” respectively – with a self-deprecating grin at the blandness of the names.  Other authors use the terms “Unilateral Control Model” and “Mutual Learning Model”.   Those are good descriptive terms, but I just can’t imagine someone standing up at the front of a team meeting and saying, “Hey guys, we need to promote the Mutual Learning Model!”.   It seems more plausible to say, “Hey guys, we need more Advocacy and Inquiry!”.</p>
<p>/p</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/peopleskills/advocacy-and-inquiry/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[<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&#38;m=A3QI763M62X7GQ">Kahneman’s book</a> points out that expertise develops, virtually &#8230; <a href="http://www.agilekiwi.com/other/agile/pair-programming-wrap-up/" class="read_more">Read more</a></p>]]></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><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>1</slash:comments>
		</item>
		<item>
		<title>Clarification to Paired Experts Post</title>
		<link>http://www.agilekiwi.com/other/news/clarification-to-paired-experts-post/</link>
		<comments>http://www.agilekiwi.com/other/news/clarification-to-paired-experts-post/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 06:01:16 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=723</guid>
		<description><![CDATA[<p>FYI I&#8217;ve just appended a small clarification to the end of my recent <a title="Expertise versus Pair Programming" href="http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/">Pairing and Experts pos</a>t, clarifying what&#8217;s meant by &#8220;expert&#8221;.&#8230; <a href="http://www.agilekiwi.com/other/news/clarification-to-paired-experts-post/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p>FYI I&#8217;ve just appended a small clarification to the end of my recent <a title="Expertise versus Pair Programming" href="http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/">Pairing and Experts pos</a>t, clarifying what&#8217;s meant by &#8220;expert&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/news/clarification-to-paired-experts-post/feed/</wfw:commentRss>
		<slash:comments>0</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[<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 &#8230; <a href="http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/" class="read_more">Read more</a></p>]]></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>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/agile/expertise-meets-pair-programming/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>People Skills for Everyone</title>
		<link>http://www.agilekiwi.com/peopleskills/people-skills-for-everyone/</link>
		<comments>http://www.agilekiwi.com/peopleskills/people-skills-for-everyone/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 07:30:32 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[People Skills]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=683</guid>
		<description><![CDATA[<p>I was talking to my Mum recently.  I mentioned that I&#8217;m becoming even more interested in people skills, and she said, &#8220;Oh, so you&#8217;re interested in management then.&#8221;</p>
<p>Actually, no.</p>
<ol>
<li>I&#8217;m interested in people who are <em>not</em> managers improving their people skills.</li>
<li>I&#8217;m interested in busting the myth that &#8220;people </li>&#8230; <a href="http://www.agilekiwi.com/peopleskills/people-skills-for-everyone/" class="read_more">Read more</a></ol>]]></description>
			<content:encoded><![CDATA[<p>I was talking to my Mum recently.  I mentioned that I&#8217;m becoming even more interested in people skills, and she said, &#8220;Oh, so you&#8217;re interested in management then.&#8221;</p>
<p>Actually, no.</p>
<ol>
<li>I&#8217;m interested in people who are <em>not</em> managers improving their people skills.</li>
<li>I&#8217;m interested in busting the myth that &#8220;people skills&#8221; is a topic exclusively for managers.</li>
<li>I&#8217;m interested in busting the myth that improvements in people skills must be initiated by managers or trainers.  I want them to be initiated by   people who actually want to improve their own skills.</li>
</ol>
<p>If you&#8217;re interested in the same things, please comment below or email me (address on <a title="About" href="http://www.agilekiwi.com/about/">About</a> page).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/peopleskills/people-skills-for-everyone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Becoming an Expert</title>
		<link>http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/</link>
		<comments>http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 05:03:38 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Understanding ourselves]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=583</guid>
		<description><![CDATA[<p>Imagine looking at a dog.&#160; You instantly know that it is, indeed, a dog.&#160; That’s an incredible feat of pattern recognition, performed almost instantly and without any conscious effort. </p>
<p>Is it really incredible?&#160; Yes.&#160; It just seems easy because you’ve been doing it effortlessly since about age three.&#160; To remind &#8230; <a href="http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p>Imagine looking at a dog.&#160; You instantly know that it is, indeed, a dog.&#160; That’s an incredible feat of pattern recognition, performed almost instantly and without any conscious effort. </p>
<p>Is it really incredible?&#160; Yes.&#160; It just seems easy because you’ve been doing it effortlessly since about age three.&#160; To remind yourself how difficult it actually is, imagine designing an algorithm to recognise dogs.&#160; Exactly what would be the rules for distinguishing a small small dog from a large cat?&#160; How would you define the category “dog” such that it included Chihuahuas and Great Danes,&#160; but not foxes and wolves? </p>
<p>Nobel prize winner Daniel Kahneman uses the dog example to explain the <a href="http://www.amazon.com/Thinking-Fast-and-Slow-ebook/dp/B005MJFA2W/ref=tmm_kin_title_0?ie=UTF8&amp;m=A3QI763M62X7GQ">two ways humans think</a>.&#160; One way is <strong>effortful thought </strong>– what we do when consciously thinking about something.&#160; The other doesn’t even feel like thinking it all.&#160; It’s just effortless <strong>automatic perception</strong> – like seeing a dog.&#160; Much of our brain’s activity is of the automatic kind.&#160; Kahneman gives several examples to show the difference:</p>
<table border="0" cellspacing="0" cellpadding="2" width="600">
<tbody>
<tr>
<td valign="top" width="300"><strong>Automatic</strong></td>
<td valign="top" width="300"><strong>Effortful</strong></td>
</tr>
<tr>
<td valign="top" width="300">Detect that one object is more distant than another</td>
<td valign="top" width="300">Focus on the voice of a particular person in a crowded and noisy room</td>
</tr>
<tr>
<td valign="top" width="300">Detect hostility in a voice</td>
<td valign="top" width="300">Tell someone your phone number</td>
</tr>
<tr>
<td valign="top" width="300">Answer 2 + 2 = ?</td>
<td valign="top" width="300">Answer 17 x 24 = ?</td>
</tr>
<tr>
<td valign="top" width="300">Drive a car on a empty road (unless you are just learning to drive, in which case this belongs in the “effortful” column)</td>
<td valign="top" width="300">Check the validity of a logical argument</td>
</tr>
</tbody>
</table>
<h2>Expertise</h2>
<p>What does this have to do with expertise?&#160; The answer is simply this: expertise involves significant “automatic” thought.&#160; For example, you happen to be an expert in recognising dogs.&#160; You accomplish that task with no conscious effort whatsoever. </p>
<p>The same applies to activities that we normally associate with “expertise”.&#160; Chess masters are a compelling example.&#160; When a chess master looks at a board, several strong moves immediately spring to mind.&#160; Just like you effortlessly “see” that an animal is a dog, a chess master effortlessly “sees” which moves make sense.&#160; This set of “candidate moves” is generated automatically, without conscious effort.&#160; Only <em>after</em> the moves spring to mind does the master actually start consciously thinking about them – to decide <em>which</em> of the candidate moves is <em>best</em>.</p>
<p>As Kahneman writes:</p>
<blockquote><p>[Experts’] intuitive judgements come to mind with the same immediacy as [a child’s] “doggie!&quot;</p>
</blockquote>
<h2>An Analogy</h2>
<p>It may seem hard to believe, that many of our most difficult mental tasks are performed instantly and unconsciously.&#160; As Kahneman points out, their very automatic-ness leads us to overlook their importance.&#160; </p>
<p>When I was reading his book, I found it helpful to recall the university paper I took in artificial intelligence.&#160; There we learned about artificial neural networks. Neural networks implement an approach to computation which is inspired by the structure of the human brain. They are very fast and effective “pattern recognisers” but, having recognised an input as matching a particular pattern, they are completely unable to tell you <em>why</em> it matched the pattern. I.e. they can’t explain their “reasoning”. This exactly matches Kahneman’s description of our automatic thought – it gives you an impression/hunch very quickly, but is unable to tell you why. So:</p>
<ul>
<li>I imagined the brain’s underlying hardware as a neural network – quick to recognise patterns, but unable to explain its logic.&#160; It is here that our automatic thinking takes place.&#160; So it’s easy to see why our automatic thinking is so fast – neural networks are naturally fast pattern recognisers, and ours is implemented directly in “hardware”.&#160; </li>
<li>I imagined effortful thought as a simulation running on top of the underlying hardware.&#160; Rather like a <a href="http://en.wikipedia.org/wiki/Virtual_machine">virtual machine</a>.&#160; Inside the virtual machine, thinking is sequential and logical.&#160; But, because the virtual machine is just an <em>emulation</em>, it runs slowly and has limited working memory.&#160; (Question: does this imply our effortful thoughts aren’t “real”?&#160; No. Just that they have a complicated origin, but our automatic thoughts are not subject to the same performance limitations.) </li>
</ul>
<p><a href="http://www.agilekiwi.com/wp-content/uploads/2012/01/Simulated-System2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Simulated System2" border="0" alt="Simulated System2" src="http://www.agilekiwi.com/wp-content/uploads/2012/01/Simulated-System2_thumb.png" width="493" height="442" /></a></p>
<p>&#160;</p>
<p>I wouldn’t dare to suggest that this model is accurate in terms of the underlying biology, but as a software engineer I found it helpful in understanding Kahneman’s work.</p>
<h2>Developing Expertise</h2>
<p>Consider two chess players, a novice and a master.&#160; The novice relies almost entirely on effortful thought.&#160; “How does a knight move?”, “Let me think what would happen if I moved my rook to here…”.&#160; But the master makes heavy use of automatic thought.&#160; The master’s automatic mind takes care of most of the details that the novice struggles with, leaving the master’s effortful mind free to add value where it is most needed.&#160; Consequently the master can produce better decisions in less time.</p>
<p>But how does the novice <em>become</em> a master?&#160; How does someone using effortful thought slowly transition to creating (good-quality) automatic thoughts?&#160; Through practice.&#160; With enough time, and enough examples, your underlying neural network trains itself to recognise the patterns.</p>
<p>Three sources have influenced my thinking about this kind of practice:</p>
<ul>
<li>James Bach’s <a href="http://www.satisfice.com/presentations/rigor.pdf">Myths of Rigour</a> presentation (which to me, could equally well have been entitled “What is learning?”).&#160; [<a href="http://www.pnsqc.org/past-conferences/2009-conference/invited-speakers">Video here</a>]. </li>
<li>Anders Ericsson’s work on <a href="http://www.freakonomics.com/2006/05/07/freakonomics-in-the-times-magazine-a-star-is-made/">deliberate practice</a> </li>
<li>Alistair Cockburn’s concept of <a href="http://alistair.cockburn.us/Shu+Ha+Ri">Shu-Ha-Ri</a>.&#160; To join the dot’s between Shu-Ha-Ri and Kahneman’s work, I’d suggest that the Shu-Ha-Ri progression equates to the same progression described above: from a novice who uses only effortful thought, to an expert who uses a highly efficient blend of automatic and effortful thought.&#160;&#160; </li>
</ul>
<h2>A Software Example</h2>
<p>I recently noticed how various people debug the large software solution that I’ve been working on for some years.&#160; When I need to debug it myself, I don’t get “stuck”. I might not know the cause of the problem, but I always have an idea on what to do next – something that will take me one step closer to finding the problem. Just like experienced players instantly “see” good moves in a chess game; I tend to “see” good moves in the debugging process. A series of such moves, possibly with some backtracking, eventually leads to a solution.&#160; But I’ve noticed junior developers are much more likely to get stuck – when faced with a problem they sometimes have trouble generating the “next move”.&#160;&#160; I’ve also noticed that although I generate moves more successfully than juniors, I seem to expend <em>less</em> conscious effort in doing so.</p>
<p>Of course, this is no excuse for me to take an ego trip – after about 7000 hours with this code base, and a decade’s experience on other systems before it, I darn well <em>should</em> have automatic expertise by now!&#160; Junior programmers, or senior ones with less experience of the system at hand, have no choice but to generate fewer moves automatically and fill the gaps with effortful thought.&#160; Over time, their balance will gradually shift from effortful to automatic.</p>
<h2>Implications</h2>
<p>The science of expertise has many implications for how we recruit, train and deploy software engineers.&#160; In a future post, I intend to explore the implications for pair programming.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/peopleskills/understanding-ourselves/becoming-an-expert/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bayes&#8217; Theorem Demystified</title>
		<link>http://www.agilekiwi.com/estimationandpricing/bayes-theorem-demystified/</link>
		<comments>http://www.agilekiwi.com/estimationandpricing/bayes-theorem-demystified/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 00:52:23 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Estimation and Pricing]]></category>
		<category><![CDATA[decision making]]></category>
		<category><![CDATA[slightly off topic]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=587</guid>
		<description><![CDATA[<p><a href="http://www.codinghorror.com/blog/2007/04/an-initiate-of-the-bayesian-conspiracy.html">Bayes’ Theorem</a> is an important tool when analysing probabilities.&#160; It helps us to avoid <a href="http://en.wikipedia.org/wiki/List_of_cognitive_biases">cognitive traps</a> and make better decisions.&#160; However, it is usually presented as something difficult, or even controversial.&#160; The typical article on Bayes’ Theorem stresses how difficult it is, and then goes on to bemoan the fact &#8230; <a href="http://www.agilekiwi.com/estimationandpricing/bayes-theorem-demystified/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codinghorror.com/blog/2007/04/an-initiate-of-the-bayesian-conspiracy.html">Bayes’ Theorem</a> is an important tool when analysing probabilities.&#160; It helps us to avoid <a href="http://en.wikipedia.org/wiki/List_of_cognitive_biases">cognitive traps</a> and make better decisions.&#160; However, it is usually presented as something difficult, or even controversial.&#160; The typical article on Bayes’ Theorem stresses how difficult it is, and then goes on to bemoan the fact that its not more widely used!&#160; In contrast, I argue that Bayes can be explained concisely, memorably, and intuitively.</p>
<p>Read on, and judge for yourself whether I’ve succeeded…</p>
<p><span id="more-587"></span><br />
<h2>Example</h2>
<p>Consider this example <a href="http://en.wikipedia.org/wiki/Bayes'_theorem#Frequentist_example">adapted from Wikipedia</a>: An entomologist finds a beetle with spots on its back. She thinks it might be a rare subspecies, because 98% of the rare subspecies have such spots, but only 5% of the common variety have them.&#160; The subspecies makes up only 0.1% of the population. Given the fact that the beetle in her hand is spotty, what is the probability that it is also rare?</p>
<p>The entomologist wants to know <strong>P(rare|spotty), </strong>which reads from left to right as “probability of being rare, given that it’s spotty”.</p>
<p>This is the time to use Bayes’ Theorem.&#160; She wants <strong>P(rare|spotty)</strong> but only has <strong>P(spotty|rare).</strong>&#160; The latter is 98%, but she suspects that the former may be much lower.&#160; She’s right, the spotted beetle in her hand is probably <em>not</em> rare… and Bayes’ can tell us why.</p>
<h2>Memorable</h2>
<p>I want to explain Bayes’ Theorem in a way that is easy to remember.&#160; To begin, let’s start from scratch and think about the probability that one randomly-selected beetle is both rare <em>and</em> spotty.&#160; There are two mathematically-correct ways to express that probability.&#160; One is to write:</p>
<p>P(rare <u><em>and</em> </u>spotty) = P(spotty|rare) P(rare)&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />= “(the probability of it being spotty, given that it <em><u>is</u></em> rare)<em> times (</em>the probability of it being rare in the first place)</p>
<p>The other is:</p>
<p>P(rare <em><u>and</u></em> spotty) = P(rare|spotty) P(spotty)&#160;&#160; <br />=&#160; “(the probability of it being rare, given that it <em><u>is</u></em> spotty) <em>times</em> (the probability of it being spotty in the first place)”</p>
<p>We’ve just written down two different ways to compute the same thing.&#160; So they must be equal to each other. I.e.:</p>
<p>P(spotty|rare) P(rare)&#160; = P(rare|spotty) P(spotty)</p>
<p>If we re-express this in a general-purpose notation, we get</p>
<p><strong><font size="4">P(A|B) P(B) = P(B|A) P(A)</font></strong></p>
<p>That is the formula you need to remember.&#160; To recall its left-hand side, remember this intuitive fact: the probability of two events <em>both</em> happening is the (<a href="http://en.wikipedia.org/wiki/Conditional_probability">conditional</a>) probability of one happening given that the other already <em>has</em> happened, times the (un-conditional) probability of the other.&#160;&#160;&#160;&#160; The right-hand side is just the same thing round the other way.</p>
<p>That’s all you need to remember.&#160; Start with the above formula, then use basic algebra to re-arrange it into the form you want.&#160; For instance, if you want to compute P(A|B), just divide both sides by P(B).&#160; (You’ll end up with the usual form of the Bayes’ equation, as seen in textbooks.)</p>
<h2>Intuitive</h2>
<p>Where Bayes gets interesting is when its used to assess the probability of some hypothesis, given the available evidence.&#160;&#160;&#160; Dividing both sides of our formula by P(B), and renaming&#160; A as the “hypothesis” and B as the “evidence”, we get this:</p>
<p>P(hypothesis|evidence) = P(evidence|hypothesis)&#160;&#160; P(hypothesis)    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; P(evidence)</p>
<p>Let&#8217;s consider a simple example involving a blond-haired young boy called Johnny, and an apple that’ is missing from the neighbour’s tree.&#160; The hypothesis in question is “Little Johnny stole the apple” and the evidence is “blond hair left snagged in apple tree”.&#160;&#160; The angry neighbour wants to know the probability that Johnny did indeed steal the apple, given the evidence of the hair – i.e.&#160; P(Johnny-stole-apple|blond-hair-left-at-scene).&#160; Our formula becomes</p>
<p>P(Johnny-stole-apple|blond-hair-left-at-scene) =    </p>
<p>&#160;&#160;&#160;&#160; P(blond-hair-left-at-scene|Johnny-stole-apple)&#160; P(Johnny-stole-apple)     <br />&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#160; <br />&#160;&#160;&#160;&#160;&#160; P(blond-hair-left-at-scene)</p>
<p>When used is this way, the formula includes three things:</p>
<ul>
<li>the left-hand-side, P(Johnny-stole-apple|blond-hair-left-at-scene), represents our degree of belief that Johnny stole the apple, <em>after</em> taking into account the evidence of the blond hair.&#160; This is called the <em>posterior</em> probability. </li>
<li>the term on the far right, P(Johnny-stole-apple), represents our degree of belief that Johnny stole the apple, <em>before</em> taking into account the evidence of the blond hair.&#160; This is called the <em>prior</em> probability.&#160; </li>
<li>The rest (i.e. middle) of the equation represents how the evidence of the blond hair influences the prior belief, by making it stronger or weaker. </li>
</ul>
<p>Let’s consider each of the RHS terms, and see how they are relevant to the outcome.&#160; Firstly, consider <strong>P(blond-hair-left-at-scene|Johnny-stole-apple).</strong>&#160; For instance, if the neighbour knew that Johnny suffered from excessive hair loss, then this probability would go up.&#160; I.e. if he was particularly likely to lose hair, then the presence of hair would be stronger evidence of his guilt (as opposed to <em>someone else’s</em> guilt).&#160; Conversely, if Johnny always wore hats, then the presence of a hair would be weaker evidence of <em>his</em> guilt.</p>
<p>Secondly, let’s consider <strong>P(blond-hair-left-at-scene).</strong>&#160; This is the overall probability of a blond hair left at the scene, regardless of who committed the crime.&#160; If this number goes up, then the hair is considered weaker evidence of guilt. For instance, if the crime occurred in a Swedish town where most boys have blond hair, then a blond hair would be relatively weak evidence against Johnny.&#160; It could have come from almost anyone.&#160; But if the crime occurred in China, the probability of a <em>blond</em> hair being left at the scene would be much lower, so the fact that one <em>was</em> found is stronger evidence against little blond Johnny.</p>
<p>Finally, let’s consider <strong>P(Johnny-stole-apple).</strong>&#160; This is the neighbour’s prior belief that Johnny stole the apple – i.e. his belief before considering <em>this particular</em> evidence.&#160; If the neighbour knows that Johnny is a caring, honest, Boy Scout with an allergy to apples, then his prior belief in Johnny’s guilt will be relatively low.&#160; To reverse that prior belief, and produce a high posterior probability of guilt, the evidence of the hair would have to be particularly compelling.&#160; (E.g. Johnny is the only blond-haired boy in a Chinese village, and he suffers from persistent hair loss).&#160;&#160; If the neighbour doesn’t know Johnny at all, then he has no option but to assign prior probability based on the population in general – e.g. if there are 10 kids in the neighbourhood, the prior probability of Johnny being the thief could be assumed to be 1/10th.</p>
<p>So we can see that all terms of the right hand side contribute to the final result in ways that are intuitively sensible.&#160; Bayes’ is not so hard.&#160; <em>It actually makes intuitive sense.</em></p>
<h2>What’s so difficult then?</h2>
<p>In practice, there can be some obstacles to applying Bayes’ successfully. Obstacles such as:</p>
<ol>
<li><em>Remembering</em> that P(hypothesis) is an <em>input</em> to computing P(hypothesis|evidence).&#160; If you use the formula, you won’t forget. But when we rely on our intuitions instead of the formula, we tend to neglect P(hypothesis).&#160; This mistake is known as <a href="http://en.wikipedia.org/wiki/Base_rate_fallacy">base rate neglect</a>.&#160; For instance, in the spotted beetle example, P(rare) is the base rate – and it’s only only 0.1%.&#160; If you neglect the base rate, you’ll intuitively over estimate the chances of a spotted beetle being rare. </li>
<li>Being <em>willing</em> to use P(hypothesis) as an input.&#160; Having to rely on P(hypothesis) may seem inconvenient because its often hard to obtain an objectively-correct value for       <br />P(hypothesis).&#160; So, out of necessity, we may end up using subjective guesses for P(hypothesis).&#160; This subjectivity is the cause of much of the controversy that dogged Bayes’ Theorem in the 20th century.&#160; The solution is that, for many kinds of problems, “probability” actually means “<a href="http://en.wikipedia.org/wiki/Bayesian_probability">measure of belief</a>” – rather than some number which is computed from repeatable trials.&#160; [Subjective evaluation of P(hypothesis) is also the cause of much of the <em>power</em> of Bayes, since the formula doesn’t <em>mind</em> if P(hypothesis) is subjective.&#160; Therefore, it’s a great way to take an initial viewpoint, which may be subjective, and adjust it as we receive new objective evidence.] </li>
<li>Computational difficulties when generalizing beyond simple yes/no hypotheses and one piece of evidence.&#160; For instance, you may want to consider several events (blond hair left at scene <em>and</em> passer-by reports glimpsing possible thief in pink tracksuit), or you may have <a href="http://en.wikipedia.org/wiki/Random_variables">random variables</a> instead of boolean events.&#160; These issues are entirely solvable, but beyond the scope of this blog post. </li>
</ol>
<p>&#160;</p>
<p>Bayes’ Theorem gives us a powerful tool for dealing with uncertainty.&#160; I hope this page will help you (and me) recall the basics ;-)</p>
<hr />
<p>Finally, for an enjoyable read on the history and uses of Bayes’ Theorem, check out <a href="http://www.amazon.com/Theory-That-Would-Not-ebook/dp/B0050QB3EQ/ref=tmm_kin_title_0?ie=UTF8&amp;m=A3QI763M62X7GQ&amp;qid=1325203926&amp;sr=8-1">this new book</a> from Sharon Bertsch McGrayne.</p>
<p><em>Postscript:</em> <a href="http://www.reddit.com/r/statistics/comments/nxa24/bayes_theorem_demystified_dont_keep_saying_its/">feedback about this post</a> included the following comment, which is worth quoting here in full: “fundamentally the idea actually <em>is</em> very simple and the interpretation and application where all the difficulty lies.”&#160;&#160; That seems like point worth noting: that the basics of Bayes are very simple, but successfully applying it to real world problems is much more difficult.&#160; I hope that this blog post has helped to convey the simplicity of the underlying idea.&#160; I wrote this post while reading the above book, since I couldn’t enjoy the book without understanding what Bayes’ Theorem really <em>is</em> :-)&#160;&#160; As for the difficult problems of devising real-world models and hypotheses, I’ll have to plead (relative) ignorance I’m afraid – since I’m a software designer not a statistician.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/estimationandpricing/bayes-theorem-demystified/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Estimation Summary for Agile Projects &#8211; Nov 2011</title>
		<link>http://www.agilekiwi.com/estimationandpricing/estimation-summary-for-agile-projects-nov-2011/</link>
		<comments>http://www.agilekiwi.com/estimationandpricing/estimation-summary-for-agile-projects-nov-2011/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 22:29:00 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[Estimation and Pricing]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/?p=573</guid>
		<description><![CDATA[<p>It’s over 7 years since my first post on contracts for agile projects.&#160; During the years since I’ve worked almost exclusively on agile projects with fixed scope, learning some real-life lessons along the way.</p>
<p>So here are some of the key points that now I keep in mind when considering &#8230; <a href="http://www.agilekiwi.com/estimationandpricing/estimation-summary-for-agile-projects-nov-2011/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p>It’s over 7 years since my first post on contracts for agile projects.&#160; During the years since I’ve worked almost exclusively on agile projects with fixed scope, learning some real-life lessons along the way.</p>
<p>So here are some of the key points that now I keep in mind when considering estimation, pricing and contracts for agile projects.&#160; These points are particularly relevant when customers have asked for fixed price <em>and</em> fixed scope.</p>
<p><span id="more-573"></span>
<p>&#160;</p>
<h2>1. It’s a valid thing to ask for…</h2>
<p>It’s perfectly natural for customers to want some up-front insight into likely cost and scope.&#160; In the spirit of <a href="http://www.agilekiwi.com/peopleskills/the-power-of-negotiation/">good negotiation</a>, we should take their concerns seriously.</p>
<p>&#160;</p>
<h2>2. … but many agile teams successfully dodge the issue.</h2>
<p>I asked someone recently what they were doing about this, and their reply was that they don’t really find themselves doing many contracts with fixed price and fixed scope.&#160; That certainly solves the problem ;-)&#160; I suspect it depends on the kind of company you work for.&#160; If you’re an in-house IT shop (i.e. customer and supplier are the same organisation) then I would imagine that there is little call to fix both scope and budget.&#160; However if you work as I do, in a company that undertakes development projects for other organisations, then you’re more likely to be asked to fix both price and scope.&#160; It also depends on the “purchasing culture” in the city where you work.&#160; For instance I work in Wellington, where government procurement processes heavily influence the way people expect contracts to be framed.&#160; But in Auckland, which is only an 8 hour drive away, there’s a very different procurement culture that’s dominated by private companies.</p>
<p>&#160;</p>
<h2>3. There are lots of different kinds of contracts which you might consider</h2>
<p>Alistair Cockburn has a big list of suitable contract types <a href="http://alistair.cockburn.us/Agile+contracts">here</a>. </p>
<p>&#160;</p>
<h2>4. Flexible pricing is probably good</h2>
<p>Rather than absolutely fixing both price and scope, it makes the project run better if you can allow at least one of them to “flex” in a controlled way.&#160; This still gives the customer early insight into commitments and benefits,&#160; but avoids the harsher downsides of absolutely fixing both.&#160; <a href="http://www.agilekiwi.com/estimationandpricing/target-cost-contracts/">Here’s</a> an approach that I’ve tried and liked.&#160; It’s not for everyone, but in cases where it’s understood and embraced by both parties, I do believe its better than fixing everything.</p>
<p>&#160;</p>
<h2>5. Here are my favourite “ingredients for success”:</h2>
<ul>
<li>Use a “discovery phase”.&#160; This is a timeboxed phase at the start of the project where you learn more about what the customer needs, and prepare an itemized breakdown of functionality.&#160; That itemized breakdown is the scope that you then&#160; commit to.&#160; A discovery phase is good for both parties, because it results in much better-informed scoping than projects which attempt to fix the scope without such a phase.&#160; The discovery phase should be paid, rather than delivered for free – both because the customer gets value out of it, and because adequate discovery is too big to do for free.&#160; In terms of sizing the discovery phase, the Feature Driven Development community uses a rule of thumb that this phase should last for 2 weeks for every 6 months of development (IIRC).&#160; I think that’s about right.&#160; For example, I used 3 weeks for a 6 month project once, but during those 3 weeks we also built a prototype. </li>
<li>The bigger the project, the more coarse-grained your discovery phase must be. (Within a realistic timeframe, you simply can’t drill down into as much detail as you might in the discovery phase for a smaller project.&#160;&#160; And if you do, it turns into BDUF, which is counter-productive for all the well-known reasons.&#160; So I’d suggest making do with a coarse-grained breakdown on large projects.) </li>
<li>The itemized breakdown of scope should be tabular rather than prose (i.e. a table rather than a document). This is a lesson I learned the hard way – the document was too ambiguous.&#160; One good way to organise the tabular breakdown is with a <a href="http://www.agileproductdesign.com/blog/the_new_backlog.html">story map</a>. </li>
<li>Ideally, that itemized breakdown of scope will actually serve three purposes: it will define the scope, it will form the basis of your estimate, and it will be what you track your progress against as you work through the project.&#160; IMHO, if you’re not using the <em>same</em> list for all three purposes, you’re risking trouble. </li>
<li>Typically, your cost estimate will be based on summing up points for every feature that’s in scope.&#160; Make sure you add a “buffer” of additional budget over and above that.&#160; There are two reasons why you might need such a buffer: (a) the inherent uncertainty in estimation and (ii) the need to allow time for for <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">Validation</a> (i.e. ensuring fitness for purpose, rather than merely <a href="http://www.agilekiwi.com/other/agile/compliance-to-spec-considered-unprofessional/">compliance to spec</a>).&#160; </li>
<li>Adding this buffer will typically produce an estimate which feels too high. So my rule of thumb is as follows, “if your estimate feels about right, its probably not.” ;-)&#160; Add the buffer! </li>
<li>A buffer that adequately accommodates both estimation uncertainty and validation effort tends to unfeasibly large. (Unfeasible in the sense that some manager somewhere won’t accept it ;-)&#160; So I prefer to use a <a href="http://www.agilekiwi.com/estimationandpricing/target-cost-contracts/">target cost contract</a>.&#160; Some of the necessary buffering is built into the <em>target</em> in the target cost contract, but the rest is provided by the (controlled) <em>flexibility</em>. </li>
<li>Know how you’ll draw the line between “this is an addition to scope, and therefore requires a budget increase”, versus “this is something we should just do, and therefore requires no change in budget”.&#160;&#160; You always need at least some of the latter, certainly for Validation and probably also for convenience (its too much paperwork for formally increase the budget for every tiny change).&#160; I’ve outlined one suggestion for drawing this line, part way down the <a href="http://www.agilekiwi.com/estimationandpricing/target-cost-contracts/">target cost</a> page. </li>
<li>It’s not enough for <em>you</em>&#160; to know how you’ll draw that line.&#160; Your <em>customer</em> must understand too.&#160; And <em>agree</em>.&#160; This applies to both management and subject matter experts, to both ‘gold owners’ and ‘goal donors’.&#160; All must understand what kinds of changes will affect the budget and what will not. </li>
<li>Use a project tracking and management tool that gives you a “whole of scope” view.&#160; If your tool only shows the current iteration or release, but your commitments are for the whole-of-scope, then you’re flying blind. </li>
</ul>
<p>&#160;</p>
<h2>6. “If I do all that, will it work?”</h2>
<p>Maybe. Maybe not ;-)&#160;&#160; Fixing price and scope of agile projects is fiendishly difficult.&#160;&#160; But there is a genuine business need for it so we, as agile practitioners, owe it to our customers to continue trying (and learning).</p>
<p>&#160;</p>
<h2>7. Understand Estimation</h2>
<p>When I finally started studying estimation, I was shocked to discover how little I, and my colleagues, really knew about it.&#160; We’d been getting by for years with little more than a grab-bag of misconceptions.&#160; And we didn’t even realise.&#160; So read Steve McConnell’s <a href="http://www.stevemcconnell.com/est.htm">Software Estimation: Demystifying the Black Art</a>.&#160; I haven’t found any other book that combines all the necessary material into one readable volume.&#160; </p>
<p>&#160;</p>
<h2>8. Understand the bit that Steve omitted from his book</h2>
<p>If you’re bidding for work, in a competitive situation, then you’ve got to read <a href="http://blogs.construx.com/blogs/stevemcc/archive/2007/06/06/estimating-in-an-outsourcing-context.aspx">this post from Steve McConnell</a> (including the comments) and my follow up <a href="http://www.agilekiwi.com/estimationandpricing/estimation-in-a-competitive-context/">here</a>.&#160; It’s not entirely comforting, in that it describes a problem which software vendors can’t easily solve on their own. (The obvious solutions require engagement from purchasers.)&#160; On a more positive note, the US engineering profession <a href="http://www.agilekiwi.com/estimationandpricing/beware-the-lowest-price/">did successfully solve</a> this problem.&#160; </p>
<p>I hope to eventually blog more about this in years to come, particularly some thoughts on what we can do in the absence of a purchaser-side solution.</p>
<p>&#160;</p>
<h2>9. See what others are doing.</h2>
<p>A great example is Atomic Object in Michigan.&#160; <a href="http://spin.atomicobject.com/2011/04/27/fixed-budget-fixed-scope-high-quality-custom-software/">Here’s a post</a> on their corporate blog to get you started.&#160; (You’ll notice they also like to introduce controlled flexibility. In Atomic’s case, they flex the scope rather than the price.)&#160; You should also check out their&#160; <a href="http://spin.atomicobject.com/2008/11/26/making-better-estimates/">whole series</a> on estimation. </p>
<p>&#160;</p>
<p>Good luck.</p>
<hr />
<p>PS. Is there a tool that can help?&#160; </p>
<p>Mostly its not about tools, but since you asked ;-) ….&#160; I think several things help: taking a whole-of-scope view; using story mapping; using the same artefacts as the basis for scoping, estimating and tracking; and keeping the user story/feature descriptions concise in order to prevent BDUF.&#160; I don’t know of any one single tool that meets all those criteria – <a href="http://www.tactyle.net/docs/how-is-tactyle-different/">so I started writing one</a>.&#160; It’s not finished yet, but with a little creativity there are many other ways to get by without an integrated tool.&#160; </p>
<p>All in all, this is not really in tools problem.&#160; Its really about understanding, attitude, negotiation and communication.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/estimationandpricing/estimation-summary-for-agile-projects-nov-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ambiguity</title>
		<link>http://www.agilekiwi.com/other/news/ambiguity/</link>
		<comments>http://www.agilekiwi.com/other/news/ambiguity/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 02:47:47 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/other/news/ambiguity/</guid>
		<description><![CDATA[<p>Alistair Cockburn <a href="http://alistair.cockburn.us/Interview+with+Alistair+2011+for+Nicolas+Lochet">wrote</a></p>
<blockquote><p>Agile development calls for a certain amount of ambiguity and flux in the project. Not everyone enjoys ambiguity and flux. I would suggest that most people don’t.</p>
</blockquote>
<p>A very good point.&#160; I think this affects some agile implementations – causing them to back away from being really &#8230; <a href="http://www.agilekiwi.com/other/news/ambiguity/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p>Alistair Cockburn <a href="http://alistair.cockburn.us/Interview+with+Alistair+2011+for+Nicolas+Lochet">wrote</a></p>
<blockquote><p>Agile development calls for a certain amount of ambiguity and flux in the project. Not everyone enjoys ambiguity and flux. I would suggest that most people don’t.</p>
</blockquote>
<p>A very good point.&#160; I think this affects some agile implementations – causing them to back away from being really agile, into a no-man’s-land between agile and waterfall.&#160; </p>
<p>Personally, I prefer the honest ambiguity of agile to the Clayton’s certainty of waterfall.&#160; Software development <em>is</em> risky.&#160; Customers and suppliers <em>do</em> learn during the project.&#160; Users <em>do</em> give better feedback from trying software than reading documents. To pretend otherwise may feel safer in the short term, but it disappoints in the long run.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/other/news/ambiguity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enjoying Meetings, part 1</title>
		<link>http://www.agilekiwi.com/peopleskills/enjoying-meetings-part-1/</link>
		<comments>http://www.agilekiwi.com/peopleskills/enjoying-meetings-part-1/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 08:29:25 +0000</pubDate>
		<dc:creator>John Rusk</dc:creator>
				<category><![CDATA[People Skills]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[meetings]]></category>

		<guid isPermaLink="false">http://www.agilekiwi.com/peopleskills/enjoying-meetings-part-1/</guid>
		<description><![CDATA[<p>I’m reading the book “<a href="http://www.amazon.com/Crucial-Conversations-Talking-Stakes-ebook/dp/B005K0AYH4">Crucial Conversations: Tools for Talking when the Stakes are High</a>”.&#160; It’s absolutely excellent.&#160; And not just for conversations when the stakes are high – but also when the stakes are rather more mundane, such as your typical day-to-day business meeting.&#160; I’ve been consciously trying &#8230; <a href="http://www.agilekiwi.com/peopleskills/enjoying-meetings-part-1/" class="read_more">Read more</a></p>]]></description>
			<content:encoded><![CDATA[<p>I’m reading the book “<a href="http://www.amazon.com/Crucial-Conversations-Talking-Stakes-ebook/dp/B005K0AYH4">Crucial Conversations: Tools for Talking when the Stakes are High</a>”.&#160; It’s absolutely excellent.&#160; And not just for conversations when the stakes are high – but also when the stakes are rather more mundane, such as your typical day-to-day business meeting.&#160; I’ve been consciously trying to apply the principles from the book for a while now, and I’ve found that meetings seem much more enjoyable.</p>
<p>The key principle of the book is that conversations work best when everyone is able to “add their meaning to the pool”.&#160; I.e. to share what’s on their mind.&#160; Conversely, conversations work <em>poorly </em>when people withhold information and viewpoints:</p>
<blockquote><p>When people purposefully withhold meaning from one another, individually <em>smart</em> people can do collectively <em>stupid</em> things.</p>
</blockquote>
<p>Therefore, successful dialog depends on two <a href="http://www.agilekiwi.com/peopleskills/people-skills-for-nerds-a-summary-video/">learnable</a> skills: (a) helping other people to share what’s on <em>their</em> mind, and (b) being able to share what’s on <em>your</em> mind even in difficult situations.&#160; I’d like to share a recent example of the latter…</p>
<p>Our (excellent) manager was describing a change to our processes.&#160; I hated the idea. It seemed bureaucratic, time-consuming and just plain wrong.&#160; As he said how much “we need to do it”, I found myself giving up.&#160; My instinct was to withdraw from the conversation.&#160; If he was <em>so</em> sure, what point was there in discussing it?&#160; He wasn’t actually <em>asking</em> for our opinions.&#160; And besides, everyone else seemed to agree.&#160; At least, they were sitting there nodding.&#160; </p>
<p>But just in that moment of giving up, I caught myself. Sharing meaning is good, right?&#160; Yes!&#160; And even fun?&#160; Yes, as I have discovered. So in that moment I decided to take the enjoyable, productive route, instead of the grumpy silent one. I said something like this:</p>
<blockquote><p>I feel a bit concerned about the cost of doing this.&#160; On &lt;project X&gt; we deliberately avoided gathering this data, and it was fine.&#160; We used high-level figures, instead of the detailed breakdown we’re talking about here, and …”&#160; <em> I went on to briefly expand on our experience on &lt;project X&gt;.</em></p>
</blockquote>
<p>Instead of giving up, I had managed to share “my meaning” with the group.&#160; It wasn’t so hard.&#160; It didn’t seem like I’d offended anybody, and I felt much better within myself for having shared.&#160; </p>
<p>(Incidentally, talking along the lines of “I feel concerned about…” is a useful collaboration technique that I’ve picked up along the way.&#160; It works much better, and is more honest and more informative, than bluntly saying “I don’t like that”.&#160;&#160;&#160; Another handy technique is to talk in terms of concrete stories, as I did about &lt;project X&gt;.&#160; Both these techniques deserve blog posts of their own one day…)</p>
<p>So did it work?&#160; Did adding my meaning to the pool actually advance the discussion?&#160; Yes it did.&#160; The boss replied with a clarification of his underlying goals.&#160; Which was great, because then we were able to think about <em>all</em> possible ways to meet that goal – instead of just debating between his original plan and my suggested alternative.&#160; We haven’t finalised the decision yet, but it looks like we’re going to end up with something better than either of us had imagined. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.agilekiwi.com/peopleskills/enjoying-meetings-part-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

