<?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>Tea-Driven Development &#187; lean</title>
	<atom:link href="http://blog.mattwynne.net/tag/lean/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mattwynne.net</link>
	<description>Matt Wynne taking it one tea at a time</description>
	<lastBuildDate>Tue, 10 Jan 2012 20:07:10 +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>Our Consumer Culture and What it Means for Software Craftsmanship</title>
		<link>http://blog.mattwynne.net/2012/01/10/our-consumer-culture-and-what-it-means-for-software-craftsmanship/</link>
		<comments>http://blog.mattwynne.net/2012/01/10/our-consumer-culture-and-what-it-means-for-software-craftsmanship/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 12:14:13 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[Politics]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2012/01/10/our-consumer-culture-and-what-it-means-for-software-craftsmanship/</guid>
		<description><![CDATA[We have an old Kenwood Chef A701 that&#8217;s hardly out of use in our kitchen. A few days ago, the gearbox went. I bought a reconditioned one on Ebay for £23, and this morning I made the time to do the repair. As I tinkered away with my screwdriver, I reflected on how grateful I [...]]]></description>
			<content:encoded><![CDATA[<p>We have an old Kenwood Chef A701 that&#8217;s hardly out of use in our kitchen. A few days ago, the gearbox went. I bought a reconditioned one on Ebay for £23, and this morning I made the time to do the repair.</p>

<p><img src="http://blog.mattwynne.net/wp-content/uploads/2012/01/kenwood_chef.jpg" alt="Kenwood Chef" /></p>

<p>As I tinkered away with my screwdriver, I reflected on how grateful I was that the designers of this machine had made sure it could be maintained by an idiot like me. I actually made our A701 by cannibalising two broken machines, and I have always been delighted by how easy it is to work on.</p>

<p>Perhaps it&#8217;s my <a href="http://en.wikipedia.org/wiki/Confirmation_bias">confirmation bias</a>, but it seems that machines like this no longer tend to be designed with maintenance in mind. In our consumer society, we&#8217;re encouraged to throw things away rather than repair them, and globalisation ensures that is often the apparently rational economic decision to take: paying a local repair man to fix your DVD player will cost more than popping down to Tesco and buying a new one. Thank goodness for those <a href="http://www.guardian.co.uk/world/2011/dec/04/chinese-toy-factories-christmas-disney">cheap Chinese factories</a>, eh?</p>

<p>If we don&#8217;t design our manufactured goods for maintainability, perhaps it&#8217;s no wonder we often feel like we&#8217;re swimming against the tide trying to persuade people that it&#8217;s important in software.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2012/01/10/our-consumer-culture-and-what-it-means-for-software-craftsmanship/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hi-Fidelity Project Management</title>
		<link>http://blog.mattwynne.net/2010/07/11/hi-fidelity-project-management/</link>
		<comments>http://blog.mattwynne.net/2010/07/11/hi-fidelity-project-management/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 13:19:05 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Kaban]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Systems Thinking]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2010/07/11/hi-fidelity-project-management/</guid>
		<description><![CDATA[If the only metric you use for measuring and forecasting your team&#8217;s progress is their iteration velocity, you&#8217;re missing out on a great deal of richer information that, for just a few extra minutes per day, you could easily be collecting. This is information that the team can use during the iteration to help spot [...]]]></description>
			<content:encoded><![CDATA[<p>If the only metric you use for measuring and forecasting your team&#8217;s progress is their iteration velocity, you&#8217;re missing out on a great deal of richer information that, for just a few extra minutes per day, you could easily be collecting. This is information that the team can use <em>during the iteration</em> to help spot and fix problems that are holding them back.</p>

<p>If you&#8217;re using scrum, you&#8217;re probably familiar with using a <em>Release Burndown</em> chart to track the team&#8217;s progress, iteration by iteration, towards a bigger goal:</p>

<p><a href="http://blog.mattwynne.net/wp-content/uploads/2010/07/Screen-shot-2010-07-11-at-11.11.171.png"><img class="aligncenter size-medium wp-image-219" title="Release burn-down" src="http://blog.mattwynne.net/wp-content/uploads/2010/07/Screen-shot-2010-07-11-at-11.11.171-300x188.png" alt="Release Burn-Down Chart" width="300" height="188" /></a></p>

<p>Here we can see the team&#8217;s velocity appears to be slowing down. They might still release at the end of Sprint #9, but there&#8217;s a chance, if the flattening trend in their velocity continues to worsen, that they may never finish the project at all.</p>

<p>We have enough information here to know that something may be wrong. We can use this information to warn stakeholders that our release date may be at risk of slipping, and may also start looking though the backlog of stories for things we can drop.</p>

<p>The problem with these responses is that they&#8217;re purely reactive. Assuming there is a systemic cause at the root of this slow-down, we&#8217;re not doing anything to deal with it and get the team back on track. We can go and ask the team what they think might be wrong, and try to help them correct any problems they can identify. This can often work, but sometimes the team may not have the experience or perspective to be able to see what&#8217;s going wrong.</p>

<p>Another problem is that we&#8217;ve had to wait until the end of the iteration to get this information. For an organisation that&#8217;s used to going into the darkness of 9-month waterfall projects, getting iteration velocity figures once a fortnight can see pretty decent. An awful lot can happen inside an iteration though, and having that summed up by a single number loses a lot of important detail. Like the signal on an old short-wave radio, this is low-fidelity data.</p>

<p>One crucial piece of data that&#8217;s hidden within the burn-down chart is what I call the <em>rate of discovery</em>. The whole point of agile development is that it&#8217;s iterative: we build and ship something, get some feedback, learn from that, build and ship some more, and repeat until our stakeholders are happy with it. If we&#8217;re doing iterative (as opposed to repetitive) development, we&#8217;re going to discover new user stories as we go through the project, perhaps even as we go through the iteration. This is a good thing: it means we&#8217;re listening to our customers. We need to make sure our project plans can handle this as a matter of course.</p>

<p>Going back to our release burn-down, we want to separate the rate of discovery from the rate of delivery. A great way to do this is simply to flip the vertical axis of the chart, and use a <em>Release Burn-Up</em> instead. On here we can start tracking two lines instead of one. First we draw the number of completed stories (or story points), and then stacked on top of that, we draw the number of stories still to do. That includes any story not yet done &#8211; whether it&#8217;s in the backlog or being worked on in the next iteration.
<p style="text-align: center;"><a href="http://blog.mattwynne.net/wp-content/uploads/2010/07/Screen-shot-2010-07-11-at-11.57.462.png"><img class="aligncenter size-medium wp-image-221" title="Screen shot 2010-07-11 at 11.57.46" src="http://blog.mattwynne.net/wp-content/uploads/2010/07/Screen-shot-2010-07-11-at-11.57.462-300x189.png" alt="" width="300" height="189" /></a></p>
I love these charts &#8211; they seem to easily map to people&#8217;s understanding of the project. When you explain that the area underneath the bottom line represents all the features that have been done, it&#8217;s easy for anyone involved with the project to quickly understand what it means. In the case of the chart above, we can identify that while the team are delivering at a pretty steady rate, they&#8217;re discovering features at a steady rate too. They&#8217;ll probably need to de-scope if they want to meet their release date.</p>

<p>We can add extra fidelity to this chart in two dimensions: We can collect samples more often, and we can collect details about just <em>how done</em> the stories are as they move from &#8216;not done&#8217; into &#8216;done&#8217;. Let&#8217;s start by collecting more detail about how done the stories are. Imagine our task board looks like this at the end of an iteration:</p>

<p><a href="http://blog.mattwynne.net/wp-content/uploads/2010/07/Screen-shot-2010-07-11-at-12.15.211.png"><img class="aligncenter size-medium wp-image-222" title="Screen shot 2010-07-11 at 12.15.21" src="http://blog.mattwynne.net/wp-content/uploads/2010/07/Screen-shot-2010-07-11-at-12.15.211-300x159.png" alt="" width="300" height="159" /></a></p>

<p>One story (Story A) is done, and 8 other stories are not done. As we track these counts over time, we can draw one line on our Release Burn Up chart for each category of &#8216;not done&#8217; and stack the lines:</p>

<p><a href="http://blog.mattwynne.net/wp-content/uploads/2010/07/Screen-shot-2010-07-11-at-14.08.47.png"><img class="aligncenter size-medium wp-image-217" title="Screen shot 2010-07-11 at 14.08.47" src="http://blog.mattwynne.net/wp-content/uploads/2010/07/Screen-shot-2010-07-11-at-14.08.47-300x160.png" alt="" width="300" height="160" /></a></p>

<p>This chart has another name, <em>Cumulative Flow Diagram</em> (CFD). We call it this because as stories flow from &#8216;not done&#8217; to &#8216;done&#8217; across the task board, we&#8217;re drawing the accumulation of that flow on the diagram. There are lots of things we can gleam from this diagram.</p>

<p>If we look at the example above, we can see that work is stacking up in the design stage of our process. Because our CFD chart highlights this, we can put more directed effort into relieving the bottleneck on the designers, perhaps by adding an extra analyst to the team to run ahead and do some more detailed analysis of the upcoming stories in the backlog, or by helping the designers to break the existing stories up into smaller ones that are easier to understand.</p>

<p>You can wait until the end of the iteration to count these numbers, but why stay ignorant? If you collect this data every day, you&#8217;ll get quick feedback about where bottlenecks are appearing in your team, and be able to try small tweaks to correct them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2010/07/11/hi-fidelity-project-management/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Confuse Estimates with Commitments</title>
		<link>http://blog.mattwynne.net/2009/05/04/dont-confuse-estimates-with-commitments/</link>
		<comments>http://blog.mattwynne.net/2009/05/04/dont-confuse-estimates-with-commitments/#comments</comments>
		<pubDate>Mon, 04 May 2009 21:05:10 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[commitment]]></category>
		<category><![CDATA[estimates]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[teams]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2009/05/04/dont-confuse-estimates-with-commitments/</guid>
		<description><![CDATA[Estimate: an approximate calculation of quantity or degree or worth Commitment: the act of binding yourself (intellectually or emotionally) to a course of action Estimates are not commitments. Plans based only on estimates are bad plans. Commitments based only on estimates are at best foolish, at worst dishonest. Estimates are certainly a useful tool for [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
  <p>Estimate: an approximate calculation of quantity or degree or worth</p>
  
  <p>Commitment: the act of binding yourself (intellectually or emotionally) to a course of action</p>
</blockquote>

<ul>
<li>Estimates are not commitments.</li>
<li>Plans based only on estimates are bad plans.</li>
<li>Commitments based only on estimates are at best foolish, at worst dishonest.</li>
</ul>

<p>Estimates are certainly a useful tool for making realistic commitments, but there are many others too that are equally, if not more, useful. Working at a sustainable pace, measuring data about past performance, and facilitating the genuine consensus of the whole team when committing are the way to make plans that can actually be achieved.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2009/05/04/dont-confuse-estimates-with-commitments/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>My Real Options Story</title>
		<link>http://blog.mattwynne.net/2009/02/02/my-real-options-story/</link>
		<comments>http://blog.mattwynne.net/2009/02/02/my-real-options-story/#comments</comments>
		<pubDate>Sun, 01 Feb 2009 23:41:02 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[Decisions]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[Options]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2009/02/01/my-real-options-story/</guid>
		<description><![CDATA[A few weeks ago I bumped into Chris Matts and thanked him for the &#8216;Real Options&#8217; session he&#8217;d lead at SPA last year. I promised write up this little story about what I took out of it. When I got back from the conference, my team were at a point where we had to chose [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I bumped into Chris Matts and thanked him for the <a href="http://finance.groups.yahoo.com/group/real_options_discussion/messages">&#8216;Real Options&#8217;</a> session he&#8217;d lead at SPA last year. I promised write up this little story about what I took out of it.</p>

<p>When I got back from the conference, my team were at a point where we had to chose between two competing technologies to build something. Looking at the two options, we really didn&#8217;t know which one to go for: they both had advantages, and at that time they were both unknowns to us. Wearing my new &#8216;options thinking&#8217; hat, I realised that we didn&#8217;t need to choose at this point: in fact, making a punt right now would be downright irresponsible: we didn&#8217;t have enough information to make the decision properly.</p>

<p>So instead of using my &#8216;gut feel&#8217; to pick one of the competing options like a real hero would, I did a much more pragmatic, but less intuitive thing: I decided we would do both, until it became clear which one was the right one to pick.</p>

<p>We were lucky that our constraints at this point were time, rather than cost, so we could afford the luxury of having two streams of work going on in parallel, knowing that one would eventually be thrown away. Obviously the hidden deliverable even from that throwaway stream would still be a developer or two who understood the problem domain really well, and with a new technology in their toolbox to use in the future.</p>

<p>A week later it was much clearer which of the options we should pick, and the other workstream was stopped. And everyone lived happily ever after <img src='http://blog.mattwynne.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p>Update: If you want to know more about real options, read Chris&#8217; article on InfoQ <a href="http://www.infoq.com/articles/real-options-enhance-agility">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2009/02/02/my-real-options-story/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Slides from XP Day Talk</title>
		<link>http://blog.mattwynne.net/2008/12/14/slides-from-xp-day-talk/</link>
		<comments>http://blog.mattwynne.net/2008/12/14/slides-from-xp-day-talk/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 14:51:11 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Talk]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2008/12/14/slides-from-xp-day-talk/</guid>
		<description><![CDATA[I&#8217;m just back from this year&#8217;s XP Day, London. Thanks to everyone who came and packed out the room to hear Rob and I talking about our experiences evolving our team from Scrum to Kanban. The slides are here. There&#8217;s also a great transcript of the talk here on Tom Hume&#8217;s blog. Thanks Tom!]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m just back from this year&#8217;s <a href="http://xpday.org/">XP Day</a>, London. Thanks to everyone who came and packed out the room to hear <a href="http://blog.robbowley.net/">Rob</a> and I talking about our experiences evolving our team from Scrum to Kanban.
The slides are <a href="http://github.com/mattwynne/kanban-talk/raw/master/evolving-from-scrum-to-lean.pdf">here</a>.</p>

<p>There&#8217;s also a great transcript of the talk <a href="http://www.tomhume.org/2008/12/matt-wynne-rob-bowley-evolving-from-scrum-to-lean.html">here</a> on Tom Hume&#8217;s blog. Thanks Tom!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2008/12/14/slides-from-xp-day-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DRY up your Cucumber Steps</title>
		<link>http://blog.mattwynne.net/2008/11/14/dry-up-your-cucumber-steps/</link>
		<comments>http://blog.mattwynne.net/2008/11/14/dry-up-your-cucumber-steps/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 18:40:49 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[duplication]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[steps]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2008/11/14/dry-up-your-cucumber-steps/</guid>
		<description><![CDATA[A while back, I asked the Cucumber team for the ability to call in the steps of one scenario from another. The canonical example of this is the &#8216;log in&#8217; scenario: Scenario: User logs in Given there is a User whose username is &#34;matt&#34; And I follow &#34;log in&#34; And I enter &#34;matt&#34; in &#34;username&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, <a href="http://rspec.lighthouseapp.com/projects/16211/tickets/3-create-givenscenario-dependency-accross-feature-files">I asked the Cucumber team</a> for the ability to call in the steps of one scenario from another.</p>

<p>The canonical example of this is the &#8216;log in&#8217; scenario:</p>

<p><div>
<pre class="txt" style="font-family:monospace;">Scenario: User logs in
  Given there is a User whose username is &quot;matt&quot;
  And I follow &quot;log in&quot;
  And I enter &quot;matt&quot; in &quot;username&quot;
  And I enter the User's password in &quot;password&quot;
  And I press &quot;Log In&quot;
  Then I should be logged in
  And I should see the text &quot;Hello matt&quot;</pre>
</div></p>

<p>Phew. Now obviously I don&#8217;t want all this noise in the scenario every time I specify behaviour that requires a logged in user. I want to write something like this:</p>

<p><div>
<pre class="txt" style="font-family:monospace;">Scenario: User views their dashboard
  Given I am logged in
  And I follow the &quot;dashboard&quot; link
  Then I should see &quot;This is your dashboard&quot;</pre>
</div></p>

<p>Thanks to the fabulous creativity of the Cucumber community, this is now possible. It&#8217;s also highly recommended, as it&#8217;s a great way to help you keep your step files tidy and DRY of excess duplication.</p>

<p><div>
<pre class="txt" style="font-family:monospace;">Given /I am logged in/ do
  Given &quot;there is a User&quot;
  Given &quot;I follow \&quot;log in\&quot;&quot;
  Given &quot;I enter \&quot;#{User.first.username}\&quot; in \&quot;username\&quot;&quot;
  Given &quot;I enter \&quot;#{User.first.password}\&quot; in \&quot;password\&quot;&quot;
  Given &quot;I press \&quot;Log In\&quot;&quot;
end</pre>
</div></p>

<p>I&#8217;m doing this more and more now &#8211; writing simple &#8216;building block&#8217; steps and assembling them to make steps that read nicely and make sense to the stakeholders.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2008/11/14/dry-up-your-cucumber-steps/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>&#8220;Total Programming&#8221; and the XP Team</title>
		<link>http://blog.mattwynne.net/2008/11/08/total-programming-and-the-xp-team/</link>
		<comments>http://blog.mattwynne.net/2008/11/08/total-programming-and-the-xp-team/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 20:13:50 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[duplication]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2008/11/08/total-programming-and-the-xp-team/</guid>
		<description><![CDATA[Pair programming brings a great many benefits to a team that&#8217;s truly mastered it. Those of us who are lucky enough to have experienced working on a really effective XP team know about that almost magical thing that starts to happen when the barriers between different members of the team break down, egos and code [...]]]></description>
			<content:encoded><![CDATA[<p>Pair programming brings a great many benefits to a team that&#8217;s truly mastered it.</p>

<p>Those of us who are lucky enough to have experienced working on a really effective XP team know about that almost magical thing that starts to happen when the barriers between different members of the team break down, egos and code ownership are cast aside, and the team starts to evolve the codebase as one, mighty, coding machine. It&#8217;s truly a <a href="http://www.exampler.com/ease-and-joy.html">joy</a> to be a part of, or even just to watch.</p>

<p><img src="http://blog.mattwynne.net/wp-content/uploads/2008/11/dutch-team-78.jpg" alt="dutch-team-78" /></p>

<p><span id="more-87"></span></p>

<p>When I worked at the BBC, we tried various experiments with different styles of pairing and retrospected on them regularly to figure out what was working. We went from the extreme of the same pair working together right through a whole story, sometimes staying together for a whole iteration, to <a href="http://mitchlacey.com/docs/XR4PromiscuousPairingandBeginnersMind.pdf">switching up pairs several times a day</a>. In the end, of course, we found a sweet spot somewhere in the middle, and seemed to know intuitively when a pair was going stale and needed a fresh injection of energy by changing up the members.</p>

<p>Compare this ideal with this description of &#8220;Total Football&#8221; (that&#8217;s &#8216;Soccer&#8217; for those of you speak US English!)</p>

<blockquote>
  <p>&#8220;Total Football&#8221; is the label for an influential theory of tactical association football in which any player can take over the role of any other player in the team. It was pioneered by Dutch football club Ajax Amsterdam.
  In Total Football, a player who moves out of his position is replaced by another from his team, thus retaining the team&#8217;s intended organizational structure. In this fluid system, no player > is fixed in his nominal role; anyone can be successively an attacker, a midfielder and a defender.</p>
</blockquote>

<p>Regularly rotated pairs of programmers are essential in developing this kind of fluid self-organisation within a development team. While <a href="http://leansoftwareengineering.com/2008/02/19/not-all-activities-are-best-handled-by-generalists/">specialisation may become important</a> for larger teams, there&#8217;s no doubt that keeping the whole team familiar with the whole codebase for as long as possible brings huge benefits.</p>

<p>For me, the biggest, and often the least mentioned of these benefits is that the team develops a kind of <em>shared consciousness</em> about the code and how they conventionally like to work with it. Not only does this mean the team can move extremely quickly, knowing exactly where to find something and how best to hack on it, but it is <em>a stake through duplication&#8217;s dark and twisted heart</em>: &#8220;Didn&#8217;t we work on something a bit like this last week, Brett?&#8221;. Once a team starts to think and communicate together this effectively, code re-use goes through the roof as common problems are solved in consistent ways, patterns emerge and are factored out for re-use.</p>

<p>You can probably tell, I&#8217;m a massive fan of pair programming, mainly because I absolutely love being this effective in my day-to-day work. How about you, loyal reader? What are your experiences with pair programming? Have you tried it? How was it for you?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2008/11/08/total-programming-and-the-xp-team/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Is the Value Fetish Killing Agile Teams?</title>
		<link>http://blog.mattwynne.net/2008/10/08/is-the-value-fetish-killing-agile-teams/</link>
		<comments>http://blog.mattwynne.net/2008/10/08/is-the-value-fetish-killing-agile-teams/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 11:59:40 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[citcon]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[post-agile]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[value]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2008/10/08/is-the-value-fetish-killing-agile-teams/</guid>
		<description><![CDATA[Last weekend I was at CITCON Europe, a great opportunity to meet some of the leading minds in the agile software movement. One intriguing new term I heard a few times was &#8220;value fetish&#8221;. Let me try to explain what I think it means, and discuss the implications for agile teams. Back in the pre-agile [...]]]></description>
			<content:encoded><![CDATA[<p>Last weekend I was at <a href="http://www.citconf.com/amsterdam2008/">CITCON Europe</a>, a great opportunity to meet some of the leading minds in the agile software movement. One intriguing new term I heard a few times was &#8220;value fetish&#8221;. Let me try to explain what I think it means, and discuss the implications for agile teams.</p>

<p><span id="more-81"></span></p>

<p>Back in the pre-agile days when our projects were planned around component pieces of the architecture, &#8220;value&#8221; was a meaningless concept. The whole project had a value, but day-to-day that didn&#8217;t help us prioritise our work &#8211; from inside the plan it was impossible to judge whether my database stored procedure was contributing more value than your pricing component &#8211; without one, the other would simply not function.</p>

<p>As we started to plan around small deliverables like user stories, the concept of value came to the fore. Suddenly it was obvious that the &#8220;file saving&#8221; feature was much more valuable than the &#8220;conditional formatting&#8221; feature. This helped us immensely &#8211; we could prioritise our work around this value, and as a result actually felt the glow from knowing that the work we were doing was worthwhile, valuable even.</p>

<p>Now that value has become a first-class concept to software development teams, what happens when it becomes an obsession? When managers who can now measure value and velocity start to compare teams, or offer them incentives to deliver more, faster? When we as developers get so driven and focussed on the delivery of value that we forget to design, refactor, consolidate, reflect, and sharpen our tools? When we forget to go home on time?</p>

<p>We get burned out.</p>

<p>As ever, it&#8217;s the responsibility of the developers (and their leaders) to stand firm and hold on to the space and time that they need to do their work at a <a href="http://industrialxp.org/sustainablePace.html">sustainable pace</a>. Not all the hours you spend in a day &#8211; tidying up the build scripts, writing a code generator, cleaning up a library so you can release it as open source &#8211; can or should be directly attributed to the value they will immediately offer to the business. That&#8217;s not to say we should spend our days idling, but that we should maintain a level of self-respect in everything that we do.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2008/10/08/is-the-value-fetish-killing-agile-teams/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Lessons From a Master</title>
		<link>http://blog.mattwynne.net/2008/03/22/lessons-from-a-master/</link>
		<comments>http://blog.mattwynne.net/2008/03/22/lessons-from-a-master/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 20:34:43 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[martinfowler]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2008/03/22/lessons-from-a-master/</guid>
		<description><![CDATA[One of the several great things about working for my current client is that their high public profile means it&#8217;s reasonably easy to get interesting people to come and visit us from time to time. Last week the mighty Martin Fowler dropped by to talk to us. I was lucky enough to spend a few [...]]]></description>
			<content:encoded><![CDATA[<p>One of the several great things about working for my current client is that their high public profile means it&#8217;s reasonably easy to get interesting people to come and visit us from time to time.</p>

<p>Last week the mighty <a href="http://martinfowler.com">Martin Fowler</a> dropped by to talk to us.</p>

<p><span id="more-43"></span></p>

<p>I was lucky enough to spend a few hours in Martin&#8217;s company, sharing lunch in the canteen with him and a few other senior technical bods, listening to his talk and Q&amp;A, then as he visited the various teams, taking a look at how we do things.</p>

<p>His talk lasted just over an hour, and was delivered with great panache, especially considering it was entirely off the cuff. Beginning with his experiences in software design right through his career, he described key lessons learned, building up to an inspirational tub-thumping call to arms for the British media (and my client in particular) to continue to battle the &#8216;information wasteland&#8217; coming out of the American commercial media. Fantastic stuff.</p>

<p>I made several notes during his talk and I thought I&#8217;d jot them down here.</p>

<hr />

<p>A lot of good ideas in software get lost though the generations. Part of the responsibility for this lies with the old-timers who don&#8217;t take adequate steps to communicate their ideas and lessons they&#8217;ve learned to the younger generation. Martin sees it as his main aim nowadays: to look backward, spot patterns, and try to communicate those through his books and talks.</p>

<p>The best ideas and techniques span multiple languages and technologies. By moving back and forth between the C++ and SmallTalk communities in his early days as a programmer, Martin was able to cross-pollinate ideas between the two, and filter out the most powerful concepts &#8211; those which applied to both.</p>

<p>Irreversible decisions are the most dangerous kind for any organisation. Lean (and thence Agile) principles try to make as many decisions as possible <strong>re</strong>versible, and to defer for as long as possible those which appear not to be. Largely, this is achieved by moving rapidly in small, safe steps so that the path backwards is always clear. Thus a big and risky task becomes smaller and more approachable.</p>

<p>Don&#8217;t accept that something can&#8217;t be changed &#8211; just try to figure out how.</p>

<p>If something is awkward and painful (e.g. database refactoring) then do it as often as possible, until it becomes easy.</p>

<p>Collaboration with the customer is key and to that end, the creation of a <strong>ubiquitous language</strong> is key. Other tools that can help with this collaboration are UML diagrams (as sketched on a whiteboard), CRC cards and tests.</p>

<p>The most important skill for a software developer is to be able to collaborate with people. The traditional view that mathematical skills are the most important is becoming redundant.</p>

<p>When designing code, two main features make for a good design:</p>

<ul>
<li>Lack of duplication</li>
<li>Clear reveal of intent</li>
</ul>

<p>To enable clarity of intent, naming is extremely important.</p>

<p>When designing a system, one approach is to think of modules as things which keep secrets, then partition your design around the secrets that need to be kept.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2008/03/22/lessons-from-a-master/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Retrospective: The Clue is in the Name</title>
		<link>http://blog.mattwynne.net/2008/01/13/remember-to-look-backwards-at-a-retrospective/</link>
		<comments>http://blog.mattwynne.net/2008/01/13/remember-to-look-backwards-at-a-retrospective/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 19:47:57 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Agile / Lean Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[retrospective]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[team]]></category>
		<category><![CDATA[teambuilding]]></category>
		<category><![CDATA[waste]]></category>

		<guid isPermaLink="false">http://blog.mattwynne.net/2008/01/13/remember-to-look-backwards-at-a-retrospective/</guid>
		<description><![CDATA[I facilitated our regular end-of-iteration retrospective last week, and although the feedback from the team was positive, I was left with a feeling that something wasn&#8217;t right. With our second major live release looming large on the horizon, I focussed the session on the theme of &#8216;Success&#8217;. My aim was to give the team a [...]]]></description>
			<content:encoded><![CDATA[<p>I facilitated our regular end-of-iteration retrospective last week, and although the feedback from the team was positive, I was left with a feeling that something wasn&#8217;t right.</p>

<p>With our second major live release looming large on the horizon, I focussed the session on the theme of &#8216;Success&#8217;. My aim was to give the team a blueprint for a successful iteration to keep in mind when things were tough, and to help ensure that we were all pulling in the same direction by agreeing as a team what constitutes success for us.</p>

<p><span id="more-30"></span></p>

<p>I started by asking the team to score how successful, in their own mind, the last iteration had been, drawing a histogram on the flipchart of the results. Interestingly, there was quite a variance in the scores, with most people either grading the iteration 2/5 or 4/5, perhaps suggesting that different members of the team have different criteria for success, or that they just experienced the iteration differently.</p>

<p>I then asked them to reflect on the criteria they&#8217;d used to make that judgement, again in their own mind, capturing each of the criteria on a separate index card. We then spread the cards out on the floor, and mapped them into headings: teamwork, stability, delivery, happiness &amp; joy&#8230; and a couple of others I can&#8217;t remember right now.</p>

<p>We then decided that our output would be some kind of vision statement under each heading, of the form &#8220;An iteration is a success when&#8230;&#8221; and worked through the various headings, discussing what it was that made us successful, and distilling that discussion into a bullet point on the chart.</p>

<p>Reflecting on what we&#8217;d covered, it seems to me that while the session was fun, motivating and affirming for the team, and thus valuable in it&#8217;s own way, it didn&#8217;t really enable us to focus on the major issues that are affecting us right now, such as the disruption of the recent office move. It also didn&#8217;t leave us with any concrete actions to take away and do in order to make things better. In terms of inspect and adapt, it really didn&#8217;t deliver.</p>

<p>When planning your retrospectives always remember your key goals (in priority order):</p>

<ol>
<li>Try to smoke out the most significant areas of <a href="http://www.shmula.com/223/what-is-waste">waste</a> in the team&#8217;s production of quality software</li>
<li>Invent concrete actions you can take in order to reduce this waste</li>
<li>Build and motivate the team</li>
</ol>

<p>Whilst building and motivating the team is an important goal for a session like this, it&#8217;s often a side-effect of successfully satisfying the first two. Concentrate on facilitating a session that helps reduce waste while having fun, and you&#8217;ve hit the nail on the head.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattwynne.net/2008/01/13/remember-to-look-backwards-at-a-retrospective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

