<?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/"
	>

<channel>
	<title>David Harvey</title>
	<link>http://www.teamsandtechnology.com/dh</link>
	<description>David's blog - teams and technology, software practice, music, and more</description>
	<pubDate>Tue, 27 Jul 2010 16:42:04 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0</generator>
	<language>en</language>
			<item>
		<title>Don&#8217;t talk to me about tango&#8230;</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/07/27/dont-talk-to-me-about-tango/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/07/27/dont-talk-to-me-about-tango/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 16:35:25 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Observations</category>
		<guid isPermaLink="false">/?p=104</guid>
		<description><![CDATA[“Agile is like tango - it&#8217;s about the passion, not about the steps” (Jeff Sutherland, tweeted by @jaredrichardson)
Wrong on many levels, Jeff. Oh, it&#8217;s a neat soundbyte, and if you don&#8217;t know tango and are feeling enthusiastic but anxious about agile it might give you a bit of a buzz. But saying tango is “not [...]]]></description>
			<content:encoded><![CDATA[	<p>“Agile is like tango - it&#8217;s about the passion, not about the steps” (Jeff Sutherland, tweeted by @jaredrichardson)</p>
<p>Wrong on many levels, Jeff. Oh, it&#8217;s a neat soundbyte, and if you don&#8217;t know tango and are feeling enthusiastic but anxious about agile it might give you a bit of a buzz. But saying tango is “not about the steps” is like saying music &#8220;is not about the notes&#8221;.<br />
<a id="more-104"></a></p>
<p>Imagine, if you will, a conversation with an experienced, maybe professional tango artist. They&#8217;ll talk about passion, sure, but also of the hours spent practising, with or without a partner; the months of frustration when a routine they&#8217;d been working on just didn&#8217;t come together; the fierce discipline of their last coach; the sore feet and aching legs. You really don&#8217;t want to watch an inexperienced tango artist, however passionate.</p>
<p>I&#8217;m reminded of an interview with a former Olympic gymnast. She&#8217;d stopped telling people about what she did, because of the standard reaction - &#8220;oh yes, my son/daughter (mostly daughter) does that&#8221;. Invariably the child would be in a school or local gym club, maybe on Saturday mornings: what exasperated the gymnast was the assumption that on the basis of that tiny exposure people assumed both a bond with the more experienced and a right to talk as if they knew what gymnastics really is - hours of training and coaching, long coach journeys to distant schools and sports centres to compete, the missed school and social life, seeing more of your trainer than your parents and friends. </p>
<p>You earn passion by virtue of technique, and you acquire technique through a fervid combination of desire, discipline and dogged will-power. Add a generous helping of experience (and how about a sprinkle of the humility that comes with real experience) and then - only then - can you start saying &#8220;it&#8217;s not about the steps&#8221;.</p>
<p>Though I have concerns with the software craftsmanship movement, it seems to me that the focus on technique and discipline is absolutely spot on. As Alan Kay <a target="_blank" href="http://www.amazon.com/gp/blog/post/PLNKVUNBWIDAS9YQ">memorably wrote</a>:</p>
<blockquote><p>&#8230;there are thresholds that have to be achieved before one can enter various conversations and processes. &#8220;Air guitar and attitude&#8221; won&#8217;t do.
</p>
</blockquote>
<p>Don&#8217;t get me wrong - you need passion (though it&#8217;s surely not only passion that carries you through the hard times in acquiring any body of technique). Technique and discipline without passion is a recipe for boredom and mere routine: I’d no sooner want to watch an unpassionate tango dancer than a technically incompetent one. But to pretend that passion is all you need is misleading, irresponsible and disrespectful.</p>
<blockquote><div align="right">
<p>
The best lack all conviction, while the worst<br />
Are full of passionate intensity</p>
</div>
<div align="right">
<p>W.B. Yeats, <i>The Second Coming</i>
</p>
</div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/07/27/dont-talk-to-me-about-tango/feed/</wfw:commentRss>
		</item>
		<item>
		<title>On coaching and being coached #acguk</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/07/19/on-coaching-and-being-coached-acguk/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/07/19/on-coaching-and-being-coached-acguk/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 10:26:09 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>People</category>
	<category>Software</category>
	<category>Practice</category>
	<category>Teams</category>
		<guid isPermaLink="false">/?p=103</guid>
		<description><![CDATA[As last year, the UK Agile Coaches Gathering was both a great community-builder, and a total ideas-fest. In particular, Tobias Mayer (Presentation is not Facilitation) helped reinforce the poverty of presentation as a training technique, and Petra Skapa&#8217;s question about what we can learn from other coaching disciplines elicited some great stories about experiences of [...]]]></description>
			<content:encoded><![CDATA[<p>As last year, the <a href="http://www.agilecoachesgathering.org/" target="_blank">UK Agile Coaches Gathering</a> was both a great community-builder, and a total ideas-fest. In particular, Tobias Mayer (Presentation is not Facilitation) helped reinforce the poverty of presentation as a training technique, and Petra Skapa&#8217;s question about what we can learn from other coaching disciplines elicited some great stories about experiences of coaching and being coached.<br />
<a id="more-103"></a><br />
These stories stick in my mind as the strongest memories of the weekend. The non-swimmer, tired of being terrified of water, who through coaching not only learned to swim but came to appreciate swimming as an end in itself, achieving a deep awareness of moving efficiently and beautifully through the water. The motor-cycle coach whose pupil &#8212; a qualified driving instructor &#8212; repeatedly resisted an observation, rode through a hedge, and continued to resist, even after agreeing that the coach was right. The snow-boarding coach with deep insight into teaching and learning physical skills: three key principles of safety, enjoyment, then learning may seem odd (learning is #3?) but think about it: being terrified, bored or dead seriously inhibits learning. Note too that the principle is learning, not teaching.</p>
<p>And yet &#8230; it seems to me that there are many agile coaches whose experience of coaching is limited to working with software development teams. This seems to me a pity: though domains differ, there are many universals around teaching and learning (increasingly, people are starting to understand this <a href="http://www.neuroeducational.net/" target="_blank">at a neurological level</a>, in addition to the social and cultural). Without exception I&#8217;ve found the most effective and inspirational coaches working with agile teams have at least one other domain in which they&#8217;re either passionate as coaches, or striving as coachees (and of course, it&#8217;s not uncommon to be both).</p>
<p>The other lesson to learn is that it&#8217;s not enough to be able to coach. Diana Larsen tweeted recently that a good team is one in which everyone can coach. There&#8217;s a corollary to this &#8212; everyone must also be able to receive coaching. If we don&#8217;t practice being on the other end of the coaching relationship, we run the risks of losing touch with what it feels like to be coached, of not being able to place ourselves in our teams&#8217; shoes, and of not being able to connect with their fears, misunderstandings, resistances, nor with their achievements, insights and triumphs.</p>
<p>With thanks to Matt Wynne (snowboard coach), Karl McCambridge (motorcycle coach) and anonymous swimming coachee (if you&#8217;re reading this please ping me, credit to follow).
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/07/19/on-coaching-and-being-coached-acguk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Penguins and architecture</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/06/08/penguins-and-architecture/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/06/08/penguins-and-architecture/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 21:27:24 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Observations</category>
		<guid isPermaLink="false">/?p=102</guid>
		<description><![CDATA[A delicious quotation from Ian Nairn, in a letter to the Guardian this week (from Andrew Huxtable).

I find the following somehow &#8230; familiar &#8230;


Modern architecture is hamstring by self-consciousness and strangled by intellectual inhibitions. It is always what people ought to want, and too often what they had better want, or else; almost never what [...]]]></description>
			<content:encoded><![CDATA[<p>A delicious quotation from <a href="http://www.guardian.co.uk/society/2005/dec/08/communities.mainsection">Ian Nairn</a>, in a letter to the Guardian this week (from Andrew Huxtable).</p>
<p><a id="more-102"></a><br />
I find the following somehow &#8230; familiar &#8230;</p>
<div>
<img src="http://farm3.static.flickr.com/2442/3820244795_933a601e40_m.jpg" alt="Penguin pool" width="20%" align="right" /></p>
<blockquote><p>Modern architecture is hamstring by self-consciousness and strangled by intellectual inhibitions. It is always what people ought to want, and too often what they had better want, or else; almost never what they really want. Everything is done for people, not with them; the whole thing is sick. And meanwhile the penguins walk solemnly up and down their interlocking concrete spirals, a parody of every committee which ever decided about &#8216;amenity&#8217; or &#8216;the people&#8217; or &#8216;urban pattern&#8217;. They&#8217;re all right, Jack, but we aren&#8217;t.</p>
</blockquote>
</div>
<p>This from a note on the Penguin Pool in London&#8217;s Regent&#8217;s Park Zoo: it inspired this delicious cartoon by <a href="http://www.tomgauld.com/">Tom Gauld</a>:</p>
<p align="center"><img src="http://farm5.static.flickr.com/4040/4668627321_da91649a53.jpg" alt="Penguins" width-"80%"/></p>
<p>We couldn&#8217;t be guilty of this in software, could we?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/06/08/penguins-and-architecture/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Teams, coaches, coachees</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/06/06/teams-coaches-coachees/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/06/06/teams-coaches-coachees/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 08:15:08 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Teams</category>
	<category>Observations</category>
		<guid isPermaLink="false">/?p=101</guid>
		<description><![CDATA[Diana Larsen recently tweeted about an ideal team being one which everyone can be a coach &#8212; a mutually coaching team. There&#8217;s an important corollary to this: such a team must be a team of people willing and able to be coached. Often not a characteristic of software developers (and &#8212; dare I say it [...]]]></description>
			<content:encoded><![CDATA[<p>Diana Larsen recently tweeted about an ideal team being one which everyone can be a coach &#8212; a mutually coaching team. There&#8217;s an important corollary to this: such a team must be a team of people willing and able to <b>be</b> coached. Often not a characteristic of software developers (and &#8212; dare I say it &#8212; not as prevalent amongst coaches as we&#8217;d like it to be). Requires humility, a willingness to accept that someone else&#8217;s way of doing things might be better than yours, a readiness to learn (yes, maybe from someone younger than you, or who you consider to be <i>less</i> experienced) and to change.
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/06/06/teams-coaches-coachees/feed/</wfw:commentRss>
		</item>
		<item>
		<title>#spa2010 reflections 2: Three hours to teach (and learn) a new language</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/05/28/spa2010-reflections-2-three-hours-to-teach-and-learn-a-new-language/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/05/28/spa2010-reflections-2-three-hours-to-teach-and-learn-a-new-language/#comments</comments>
		<pubDate>Fri, 28 May 2010 10:16:17 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Software</category>
	<category>Languages</category>
		<guid isPermaLink="false">/?p=100</guid>
		<description><![CDATA[One of the pleasures of SPA is the coverage of new and interesting ideas in programming languages. This reflects its origins as the conference of the BCS Object Oriented Programming and Systems specialist group - OOPS - although as the history of the group relates, a focus on teams and organisations coupled with a commitment [...]]]></description>
			<content:encoded><![CDATA[<p>One of the pleasures of SPA is the coverage of new and interesting ideas in programming languages. This reflects its origins as the conference of the BCS Object Oriented Programming and Systems specialist group - OOPS - although as the <a href="http://www.bcs-spa.org/index.php?page=history">history of the group</a> relates, a focus on teams and organisations coupled with a commitment to reflective practice has been there from the start. But how do you get across the flavour of a new language in a short period of time? SPA workshops are commonly three hours long, which doesn&#8217;t seem much to be able to both outline what&#8217;s special about a language and (crucially) to give people hands-on experience of working with it.<br />
<a id="more-100"></a><br />
This year at SPA I went to sessions on Clojure (which was new to me, though I&#8217;m familiar (or was (at least some years ago)) with Lisp), Scala (I read the book and had a play when it was new, so this was something of a refresher) and Haskell (one day, I&#8217;ll find a problem I need to solve in Haskell and learn it properly). All interesting, all different, but all made me think not about the languages themselves, but about how best to teach and learn them in the workshop setting.</p>
<p>The sessions on Scala and Clojure were informative, but ultimately frustrating. They ended up being too much talk and not enough doing, mostly down to the presenters&#8217; anxiety to answer specific questions (has to be tempered with keeping things moving for the rest of the group), but also because the sessions didn&#8217;t seem to be designed to build knowledge through practice &#8212; perhaps, though, too much time on talk meant we didn&#8217;t get to the planned lab sessions. The Haskell session focussed on one aspect of the language (lazy evaluation), and was more successful, even though (oddly) it was the least interactive: a first half demonstrated with several code extracts how laziness worked in Haskell, moving from simple to complex: I think I learned more of the operational model in that hour than I&#8217;d picked up from any amount of reading before. A second half of live coding worked through an example (solving a mastermind puzzle) step-by-step, more or less a masterclass in thinking in Haskell. Maybe given the mind-shifts that most of us need to make with Haskell this was the best way.</p>
<p>In 2007 Peter Marks and I ran a session called <b>Serious JavaScript</b> &#8212; in which we proposed JavaScript as a powerful and flexible language that could be turned to numerous purposes other than browser scripting (with V8 and tools such as node.js it&#8217;s good to see it escaping from the browser environment). The session had two parts - firstly a series of <b>conversations</b>, then a lab session we called <b>explorations</b>. The conversations featured what we called &#8216;an interview with the interpreter&#8221; &#8212; Peter talked and asked questions, I typed in response (we used Rhino and the Rhino shell, along with Scite with fonts set <b>really big</b>):</p>
<pre>

Can I print a number?
    js&gt; 42
    42

add two numbers?
    js&gt; 1 + 2.5
    3.5
(all numbers are floating point)

what about 1 + 2 * 3?
    js&gt; 1 + 2 * 3
    7
(operator precedence works as expected)

Division by 0?
   js&gt; 1 / 0
   Infinity

What do strings look like?
    js&gt; 'Hello JavaScript'
    Hello JavaScript

Can we concatenate strings?
   js&gt; 'Goodbye ' + "World"
   Goodbye World
(single and double quotes can be used)

String and number?
   js&gt; "All for " + 1
   All for 1
(operators overload)
</pre>
<p>And so on, through basic types, arrays, objects, control, functions and methods. If this looks familiar, that&#8217;s because it isn&#8217;t original: we borrowed the structure from <em>The Little Lisper</em>, Daniel Friedman&#8217;s wonderful book on the basics of Lisp (now in its fourth edition, as <em>The Little Schemer</em>):</p>
<p align="center"><img src="/images/LittleSchemer.jpg" alt="LittleSchemer Example" width="80%"/></p>
<p>We interspersed these with four short exercises for the participants: files of code for pairs to play with covering the ideas introduced in the previous conversation: here&#8217;s the beginning of the first one: </p>
<pre class="brush:javascript">

//---------------------------------- 1
x = 1;
print(x);
// What will this print?
quit();

//---------------------------------- 2
//w;
//print (w);
// What will this print?
// Why is this commented out?
// (Hint - try uncommenting it ... )
quit();

//---------------------------------- 3
var y;
print (y);
// What will this print?
quit();

//---------------------------------- 4
print (yy);
var yy;
// What will this print?
quit();

//---------------------------------- 5
y = 1;
print (y);
// What will this print?
quit();

// . . .
</pre>
<p>For each point, pairs were to look at the code, try to predict what would happen, try it out, see if their prediction was correct, try to understand what happened if it was not, then comment out the quit() call to move on to the next. Doing this, we covered fundamentals very quickly, setting us up for the second half of the session, where pairs could choose one or more <b>explorations</b>, ranging from the simple (exploring lists and functional abstraction) to the complex (implementing classes and aspects) to the insane (yes, monads!). Here&#8217;s one of the simpler explorations:</p>
<pre class="brush:javascript">

/*

Using closures to implement objects
=================================
(Grade - easy)

1) Can you write a function called account which
    - takes a single parameter called b
    - returns a function (let's call it M) of no arguments
      which returns the value b

2) Now change the function M so that it
    - takes a single parameter
    - updates b by adding the parameter
    - returns the new b

Is this a little like objects? Yes!

3) Change account so that it returns an object with a single
method called deposit that is exactly the same as M in 2 above, but
doesn't return anything. Add another method called withdraw that
deducts its parameter from b. Add another called balance that returns b.

Congratulations! You've implemented an object programming model! Note
that it enforces encapsulation, which JavaScript's object model does not.

What is the downside of this model?

*/
</pre>
<p>From our own experience of this session, and from the feedback, we think this is a good way to introduce language ideas. Some key points for us:</p>
<ul>
<li>Like everything else, running this session is more fun in pairs. Find someone who&#8217;s as keen as you on the language to work with
</li>
<li>Say a few words about why the language is interesting or important, and give a brief outline of its history, before you start
</li>
<li>People need to use the language in such sessions. Syntax on slides and lots of talk doesn&#8217;t cut it. The sooner they&#8217;re trying things out, the better
</li>
<li>Start simple, and demonstrate what&#8217;s familiar before tackling more individualistic aspects of a language (but feel free to throw in a &#8216;taster&#8217; or two of the more powerful features to get people curious)</li>
<li>Keep things moving. In the exposition of the language ideas, it&#8217;s important not to get sidetracked by the one or two members of the group (there will always be some) who ask challenging or interesting questions. No-one will mind if you say &#8220;let&#8217;s cover that later&#8221; or &#8220;we might not get to that, but try it out in the practical&#8221;
</li>
<li>Syntax on slides is generally not a great way of getting things across. Show code in an editor or interpreter, then run it.
</li>
<li>Preparation, preparation, preparation. Rehearse the coding (I&#8217;ve seen presenters surprised by things not happening as expected in a live coding session)
</li>
<li>A simple copy or one-click install for the environment and materials for the practical sessions is important. Make sure you have versions for the common environments you&#8217;ll find on peoples&#8217; machines (OS X, Windows, probably Ubuntu amongst the linuxes), and make sure you&#8217;ve trialled the installation and practicals in these environments
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/05/28/spa2010-reflections-2-three-hours-to-teach-and-learn-a-new-language/feed/</wfw:commentRss>
		</item>
		<item>
		<title>#spa2010 reflections 1: Maurice Mitchell on complexity, fit, the human dimension</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/05/21/spa2010-reflections-1-maurice-mitchell-on-complexity-fit-the-human-dimension/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/05/21/spa2010-reflections-1-maurice-mitchell-on-complexity-fit-the-human-dimension/#comments</comments>
		<pubDate>Fri, 21 May 2010 07:54:58 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Software</category>
	<category>Practice</category>
	<category>Observations</category>
		<guid isPermaLink="false">/?p=99</guid>
		<description><![CDATA[Ever since hearing about the architecture of rapid change and scarce resources I&#8217;ve wanted to talk to Maurice Mitchell, one of its leading advocates. I was delighted when he agreed to give an invited talk at SPA2010.

I&#8217;d asked Maurice not to try and draw any specific parallels between his work and the work of software [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since hearing about the <a href="/dh/blog/2008/05/03/scarce-resources-rapid-change/">architecture of rapid change and scarce resources</a> I&#8217;ve wanted to talk to Maurice Mitchell, one of its leading advocates. I was delighted when he agreed to give an invited talk at SPA2010.<br />
<a id="more-99"></a><br />
I&#8217;d asked Maurice not to try and draw any specific parallels between his work and the work of software development: just to talk about his work and let any connections spark and germinate in the minds of the audience. He did just that - over the course of an hour, and in nearly ninety images (next to no words on the slides) we ranged from the slums and shanties of Delhi and Mumbia, student projects at the Centre for Alternative Technology (CAT) in North Wales, through a meditation on the utility and beauty of sheds, community building in a mining village in India, and children&#8217;s design for their own spaces within the shells of inner-city schools in London.</p>
<p align="center"><img src="/images/mitchell/density.jpg" height="200px" alt="" /><img src="/images/mitchell/density2.jpg" height="200px" alt="" /></p>
<p>The images from the talk are available on the SPA conference wiki <a target="_blank" href="http://www.spaconference.org/cgi-bin/wiki.pl/?ComplexityAndTheHumanDimension">here</a>. Maurice&#8217;s extended description of patterns of development and habitation in marginal land by excluded communities was exhilarating and moving, and underlined the importance of scale, boundaries, safety. I&#8217;m just starting to digest some of the implications (a lot of very interesting thoughts about observation, and the way we see, choose and name patterns): for now here are some smaller things that I found particularly suggestive:</p>
<p><strong>Typhoon house</strong></p>
<p align="center"><img src="/images/mitchell/typhoon1.jpg" height="175px"alt="" /><img src="/images/mitchell/typhoon2.jpg" height="175px" alt="" /></p>
<p>This is typical of a building in the coastal regions of Bangladesh. These houses belong to families who have escaped the poorest conditions, but in spite of their apparent solidity they are prey to the typhoon that ravage the area. The cost of adapting these structures so that they can withstand storms is actually pretty small &#8212; some 10% or so on top of the total. By securing the roofing tiles, separating the veranda from the main body of the roof (so that if it blows off it does not take the roof with it), strengthening the pillars, making sure that doors and windows open outwards so that the wind blows them closed and not open, the house becomes something that a family can invest in emotionally and socially, knowing it will last well beyond the next storm, and which can also be used to raise a loan or mortgage. 10% doesn&#8217;t seem so much to pay for such a transformation of family and local economic life.</p>
<p><strong>Independence of structure, redundancy, resilience</strong></p>
<p align="center"><img src="/images/mitchell/roof1.jpg" height="185px" alt="" /><img src="/images/mitchell/roof2.jpg" height="185px" alt="" /></p>
<p>The traditional way of building in this part of sub-Saharan Africa is to construct a frame from timbers cut from a large tree. The frame is roofed, then the mud walls built independently. This is a resilient, redundant structure: when the rains come, they wash the walls away, but the roof remains. As a result of deforestation, the encroachment of the desert and climate change, there are fewer and fewer large trees, so these building are now made without a frame, the roof supported directly by the mud bricks. When the rains are heavy, the walls wash away, and the roof of course falls.</p>
<p><strong>Extending the life of a legacy</strong></p>
<p align="center"><img src="/images/mitchell/caravan.jpg" height="175px" alt="" /></p>
<p>A caravan in the US. In its prime, a family bought land and moved the caravan to live in. Over the years, the neoprene seals fail, and parts become either scarce or too expensive. The solution: rather than leave the caravan to the elements, surround it with a frame and cover it with a roof to protect it from the rain. Once you have one frame and roof, it&#8217;s easy to extend the idea to a roofed porch, whose open sides are later filled in. A legacy dwelling, but one whose value (it&#8217;s still inhabited) is preserved.</p>
<p>I liked the idea of using technology and manufacture for what it&#8217;s good at: off-site fabrication of small, repeatable, low-cost elements that can be combined in various ways and in various settings on-site. For this to work, these elements have to be small and light enough (can be carried and manipulated easily), have to provide multiple opportunities for fit (to deal with varying needs and site conditions), and have to be customisable on-site. Brick is the classic example, but we also heard about Velux windows, of which Maurice is a fan. Certainly for the work he is involved in, transportation and assembly of large, expensive pre-formed components is not an option: financially or logistically. A small cheer went up when he said he preferred working with craftsmen to engineers :-).</p>
<p>Much of the work at CAT involves building independent parts of a structure &#8212; stairs, frame, floor, roof, maybe alcoves and partitions &#8212; each restricted to a single local material: stone, wood (local birch saplings or recycled pallets) or others. The components have to have integrity and independent stability, but they gain in utility and meaning when they&#8217;re brought into relation with each other to form a structure.</p>
<p>I remember the excitement fifteen years ago of the ferment of ideas around software patterns, and going back to the source to read Christopher Alexander&#8217;s pioneering work. I still turn to his books, and Stewart Brand&#8217;s How Buildings Learn, for inspiration. Maurice&#8217;s talk has rekindled that excitement for me: I&#8217;m very glad to have helped it happen. </p>
<p>I hope we&#8217;re grown up enough not to grasp any more at any slight similarity between domains of creation and claim that because of these, software is architecture, or software is engineering, or software is craft, or whatever else. Software is software, a rich playground of materials, logical, functional and structural possibilities, with its own unique characteristics. That&#8217;s not to say that we can&#8217;t be inspired by explorations in other domains. Thinking about problems and solutions in a different domain is a well-established technique for fostering creativity, and it saddens me that much of the way we talk about software and software practice at the moment is either self-absorbed or fixated on a narrow concept of value. And I remain intrigued by the possibility that there are some deep principles of sustainable construction that apply across domains.</p>
<p align="center"><img src="/images/mitchell/safe.jpg" height="250px" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/05/21/spa2010-reflections-1-maurice-mitchell-on-complexity-fit-the-human-dimension/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Refactoring in the wild</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/04/17/refactoring-in-the-wild/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/04/17/refactoring-in-the-wild/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 09:12:51 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Software</category>
	<category>Practice</category>
		<guid isPermaLink="false">/?p=98</guid>
		<description><![CDATA[I&#8217;m please to see James Shore&#8217;s chapter on No Bugs online. It&#8217;s a great explanation of how the XP practices reinforce each other to support the development of excellent code. 

One phrase in particular sticks in my mind: Technical debt breeds bugs. This reminds me strongly of the description of the Quality Plateau in the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m please to see James Shore&#8217;s chapter on <a href="http://jamesshore.com/Agile-Book/no_bugs.html">No Bugs</a> online. It&#8217;s a great explanation of how the XP practices reinforce each other to support the development of excellent code. </p>
<p><a id="more-98"></a></p>
<p>One phrase in particular sticks in my mind: <b>Technical debt breeds bugs.</b> This reminds me strongly of the description of the Quality Plateau in the <a href="http://the-programmers-stone.com/the-original-talks/day-2-thinking-about-programming/">second of the original Programmers Stone talks</a> (it&#8217;s about 2/3 of the way down the page. If you haven&#8217;t read this already, you really should). The authors &#8212; Alan Carter and Colston Sanger &#8212; move in several steps from this:</p>
<pre class="brush: cpp">
DWORD WINAPI SecondThread (LPVOID lpwThreadParm) {
  BOOL fDone = FALSE;
  DWORD dw;

  while  (!fDone) {
    // Wait forever for the mutex to become signaled.
    dw = WaitForSingleObject(g_hMutex, INFINITE);

    if (dw == WAIT_OBJECT_0) {
      // Mutex became signalled.
      if (g_nIndex &gt;= MAX_TIMES) {
        fDone = TRUE;
      } else {
        g_nIndex++;
        g_dwTimes[g_nIndex - 1] = GetTickCount():
      }

      // Release the mutex.
      ReleaseMutex(g_hMutex);
    } else {
      // The mutex was abandoned.
      break;// Exit the while loop.
    }
  }
  return(0);
}
</pre>
<p>to this:</p>
<pre class="brush: cpp">
DWORD SecondThread(void *ThreadParm)
{
    while(Index &lt; MAX_TIMES &#038;&#038;
          WaitForSingleObject(Mutex, INFINITE) == WAIT_OBJECT_0)
    {
        if (Index &lt; MAX_TIMES)
            Times[Index++] = GetTickCount():
        ReleaseMutex(Mutex);
    }
    return(0);
}</pre>
<p>They comment:</p>
<blockquote><p>
Eleven lines vs 26. One less level of indentation, but the structure completely transparent. Two local variables eliminated. No else clauses. Absolutely no nested elses. <b>Less places for bugs to hide</b>. (my emphasis)
</p>
</blockquote>
<p>Less places for bugs to hide, less opportunity for bugs to breed. These are small-scale refactorings, and today we might make an effort to make the code even more expressive of intent, but nevertheless it&#8217;s an elegant and well-argued example of the benefits of clarity. The Stone saw the light of day in 1997 &#8212; is this the first published example of refactoring in the wild?
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/04/17/refactoring-in-the-wild/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Michael Jackson: a Lost Masterpiece</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/04/04/michael-jackson-a-lost-masterpiece/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/04/04/michael-jackson-a-lost-masterpiece/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 09:21:01 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Books</category>
	<category>Software</category>
	<category>Practice</category>
		<guid isPermaLink="false">/?p=97</guid>
		<description><![CDATA[But thankfully found again. Through a series of circumstances too complicated to relate, I&#8217;ve recovered (after its perambulations of six years or so) my copy of Michael (A) Jackson&#8217;s Software Requirements and Specifications: a lexicon of practice, principles and prejudices. (SRP in what follows)

I&#8217;d first encountered Jackson through training courses in the 80s on software [...]]]></description>
			<content:encoded><![CDATA[<p>But thankfully found again. Through a series of circumstances too complicated to relate, I&#8217;ve recovered (after its perambulations of six years or so) my copy of Michael (A) Jackson&#8217;s <a href="http://www.amazon.co.uk/Requirements-Specifications-Software-Principles-Prejudices/dp/0201877120/">Software Requirements and Specifications: a lexicon of practice, principles and prejudices</a>. (<strong>SRP</strong> in what follows)<br />
<a id="more-97"></a></p>
<p>I&#8217;d first encountered Jackson through training courses in the 80s on software design &#8212; and have to admit that at that point I regarded the rather specific techniques of Jackson Structured Programming and Jackson Structured Design as somewhat old-fashioned: they seemed to be catering for a class of systems that formed a diminishing part of the software ecology, even then. (And I have to add, I was then and am now no fan of people naming methods after themselves or their companies).</p>
<p>But SRP is one of my all-time classics. The title of the book is something of a misnomer: while the ethos of the book is very much around understanding the relationships of the software we build to the circumstances in the world which it is designed to address, it&#8217;s structure (a series of over seventy short essays on subjects ranging from &#8216;Ambiguity&#8217; to the &#8216;Workpieces Frame&#8217;) lets Jackson roam freely over the domain of software development, sometimes specific, sometimes general, sometimes philosophical. The principle of dispassionate methodology (in the section on Method) is particularly apt in the current world of Lean and Agile:</p>
<blockquote><p>
Don&#8217;t get your method advice from a method enthusiast. The best advice comes from people who care more about your problem than their solution.</p></blockquote>
<p>There are clear descriptions of some specific problems (a sweet two pages on the <em>Bridges of Konigsberg</em>, for example, and a description of a &#8212; physical &#8212; package routing system that kept us busy for a while at Object Designers in the Syntropy days), and more reflective pieces on the nature of description and classification.</p>
<p>SRP introduced the concept of Problem Frames, which Jackson later expanded in a book of the same name. A Problem Frame is a high-level description of the kind of system that&#8217;s under consideration, and the way its constituent parts are related to a set of intentions in the world. It has a lot in common with the XP notion of system metaphor: a set of concepts and terms that help us make sense of the system we&#8217;re building, and relate the things we&#8217;re building to each other and to the system as a whole. Problems arise when we misunderstand the world, and attempt to build a system using a frame which doesn&#8217;t fit the solution.</p>
<p>The way in which we tackle development now is, of course, very different from the way it was done in the 80s and 90s. We know now that planning &#8212; for example &#8212; is a continuous activity, not just a process that produces an artefact. I think we benefit from regarding requirements and specification in the same way: not as documents, but as ongoing processes. If we do this, it&#8217;s clear that the need to think clearly about meaning, description, classification, scope and span hasn&#8217;t disappeared, but it seems to me that in the agile world we don&#8217;t do this as much as we should. Looking at this book again, I&#8217;m reminded of the wisdom we&#8217;re in danger of losing: who now would take a second look at a book with the words &#8217;specification&#8217; and &#8216;requirement&#8217; in its title?</p>
<p>I&#8217;ll leave you with a favourite extract of mine, a story about software development from the section on <em>Brilliance</em>. Following an in-house course, the DP manager asks Jackson into his office:</p>
<blockquote><p>&#8220;What do you think of Fred?&#8221; he asked. &#8220;We all think Fred&#8217;s brilliant.&#8221; &#8220;He&#8217;s certainly very clever,&#8221; I said. &#8220;He&#8217;s not very enthusiastic about methods, but he knows a lot about programming.&#8221; &#8220;Yes,&#8217; said the DP Manager. He swivelled round in his chair to face a huge flowchart stuck to the wall: about five large sheets of line printer paper, maybe two hundred symbols, hundreds of connecting lines. &#8220;Fred did that. It&#8217;s the build-up of gross pay for our weekly payroll. No-one else except Fred understands it.&#8221; His voice dropped to a reverent hush. &#8220;Fred tells me he&#8217;s not sure he understands it himself.&#8221;</p>
<p>&#8220;Terrific,&#8221; I mumbled respectfully. I got the picture clearly. Fred as Frankenstein, Fred the brilliant creator of the uncontrollable monster flow chart. That matched my impression of Fred very well. &#8220;But what about Jane?&#8221; I said. &#8220;I thought Jane was very good. She picked up the program design ideas very fast.&#8221;</p>
<p>&#8220;Yes,&#8221; said the DP Manager. &#8220;Jane came to us with a great reputation. We thought she was going to be as brilliant as Fred. But she hasn&#8217;t really proved herself yet. We&#8217;ve given her a few problems that we thought were going to be really tough, but when she finished it turned out they weren&#8217;t really difficult at all. Most of them turned out to be pretty simple. She hasn&#8217;t really proved herself yet &#8212; if you see what I mean?&#8221;</p>
<p>I saw what he meant.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/04/04/michael-jackson-a-lost-masterpiece/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Teaching and learning design using TDD (#GOOSgaggle)</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/03/30/teaching-and-learning-design-using-tdd-goosgaggle/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/03/30/teaching-and-learning-design-using-tdd-goosgaggle/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 16:58:36 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Software</category>
	<category>Practice</category>
		<guid isPermaLink="false">/?p=96</guid>
		<description><![CDATA[On Sunday Gojko Adzik and I joined forces to run an Open Space session at GOOSgaggle on how we might work using TDD to improve our abilities in software design. Three things (after the break) have suggested to me that this might be important &#8211;


Looking at Bob Martin&#8217;s Bowling Game slides, pretty much the first [...]]]></description>
			<content:encoded><![CDATA[<p>On Sunday <a href="http://gojko.net/">Gojko Adzik</a> and I joined forces to run an Open Space session at <a href="http://groups.google.com/group/growing-object-oriented-software">GOOSgaggle</a> on how we might work using TDD to improve our abilities in software design. Three things (after the break) have suggested to me that this might be important &#8211;</p>
<p><a id="more-96"></a></p>
<ul>
<li>Looking at Bob Martin&#8217;s Bowling Game slides, pretty much the first slide says &#8220;here is the design&#8221;, along with a UML diagram. For me, that raises more questions than it solves (why is that the design? who decided that&#8217;s the design? is that the best design? are there others?) &#8212; admittedly, answering these questions are not the prime goal of this particular exercise, but I think they&#8217;re important questions in software development that we&#8217;re in danger of losing sight of.</li>
<li>Correspondingly, trying Keith Braithwaite&#8217;s &#8220;TDD as if it really mattered&#8221; exercise (in which all code to pass a failing test must be written in the body of the test method itself) forced me to abandon design preconceptions, and started a process of becoming intensely aware of what sort of decisions I was making at every point leading to a &#8220;well-designed&#8221; solution.</li>
<li>Thirdly (and to tie in with GOOSgaggle) reading Steve and Nat&#8217;s book gives a great insight into the mechanics of TDD, but it&#8217;s important not to forget that they (and Kent Beck, and Brian Marick, and Mike Feathers, to name but three&#8230;) are all highly experienced developers: their design instincts are honed from years of experience in thinking about and working with object oriented languages and patterns. There&#8217;s a strong sense of a &#8220;design compass&#8221; which pulls their coding and refactoring efforts in the direction of elegance and economy. How do we learn this design sense? And how could we teach others, and teach ourselves, in developing it?
</li>
</ul>
<p>A couple of other inputs are Kent Beck&#8217;s recent thinking on Responsive Design (watch this space for something I&#8217;m brewing with Peter Marks on this), and Michael Feathers&#8217; ruminations on Design Sense (I don&#8217;t share his optimism that we&#8217;ll see a revival in the level of design intelligence in the development community at large any time soon).</p>
<p>Gojko has produced a mind-map of the wide-ranging discussion that some twenty of us held (I&#8217;ll link to it here when he&#8217;s posted it). The conversation was a good start, but perhaps we didn&#8217;t go far enough in separating teaching design using TDD as a vehicle from simply teaching TDD. </p>
<p>The key things I took from the session:</p>
<p><strong>Teaching practical refactoring is hard</strong> (underlined by Jason Gorman&#8217;s experience at the BBC, and my reflections on some of the books and computer-based training tools I&#8217;ve seen). Part of the problem is a lack of good examples at the pattern level of design: part of the problem is that a focus on the mechanics of individual refactorings can distance you from seeing or sensing design abstractions at a larger scale.</p>
<p>People will only <strong>learn what they want to learn</strong> (teaching != learning): in our experience if you want to learn something, nothing will stop you.</p>
<p><strong>Pairing</strong> with a view to teaching and learning <strong>is important</strong>. With a more experienced/less experienced pair, stopping after refactoring and talking about what you just did should be part of the rhythm of reflective practice. More experienced designers should do this with their less experienced colleagues as a matter of course: those less experienced should have the courage and the curiosity to ask why (for example) the refactored design is better. (As it happens I was in just this position recently after guiding a complex refactoring: we both learned from the experience of me explaining).</p>
<p>When you&#8217;ve refactored a piece of design or code with a &#8220;smell&#8221; into a beautiful and minimal version, you&#8217;ve also lost something: the smell. <a href="http://www.amazon.co.uk/How-Talk-Change-Work-Transformation/dp/078796378X/">Kegan and Lahey</a> have talked about this with reference to change and learning: here, I suggested the phrase &#8220;<strong>bottling the smell</strong>&#8221; for collecting examples of things before refactoring so we could replay or reuse the code for our own and others&#8217; learning.</p>
<p>In a peer pairing situation, or indeed working individually, <strong>checklists and agreed procedures</strong> can play an important part in framing reflection after refactoring. Maybe even just run down the SOLID principles and decide which of these you&#8217;ve changed in the code, and by how much?</p>
<p>Pairing is important, but it can&#8217;t just be about pairing: we have to <strong>work individually</strong> on improving our design sense.</p>
<p><strong>Recording a coding session</strong> with Camtasia or similar software and replaying it to oneself was an intriguing suggestion which I&#8217;ll be trying out (like a musician practicing in front of a mirror).</p>
<p>The requirement to <strong>talk about and teach</strong> design principles <strong>improves our abilities</strong> as designers (this is a common experience of those who teach anything).</p>
<p>There&#8217;s no shortage of sources for good thinking in design. Most of these are books, some rather old now. <strong>Use them</strong>.</p>
<p>Review design principles and try <strong>coding strictly</strong> with reference to some of these (e.g. strict &#8220;Tell, don&#8217;t ask&#8221;, no getters/setters, no state (everything functional)). Restrictions release creativity, and working in this way can reveal the benefits of (for example) the Law of Demeter more powerfully than reading about it.</p>
<p>Anyone out there with practical experience of teaching design sense via TDD? What do you do to teach and learn design?
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/03/30/teaching-and-learning-design-using-tdd-goosgaggle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kent Beck and Software G Forces</title>
		<link>http://www.teamsandtechnology.com/dh/blog/2010/03/24/kent-beck-and-software-g-forces/</link>
		<comments>http://www.teamsandtechnology.com/dh/blog/2010/03/24/kent-beck-and-software-g-forces/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 22:35:39 +0000</pubDate>
		<dc:creator>David</dc:creator>
		
	<category>Software</category>
	<category>Practice</category>
	<category>Teams</category>
	<category>Organisations</category>
		<guid isPermaLink="false">/?p=95</guid>
		<description><![CDATA[At ScanDev 2010 last week, Kent Beck spoke about Software G Forces (slides from an earlier version of this talk are here. Observing that the move in our world is towards more and more frequent releases to users, Kent asked the question &#8212; what does this mean for our organisations? (agile in organisations this was [...]]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://www.scandevconf.se/">ScanDev</a> 2010 last week, Kent Beck spoke about Software G Forces (slides from an earlier version of this talk are <a href="http://www.slideshare.net/KentBeck/software-g-forces">here</a>. Observing that the move in our world is towards more and more frequent releases to users, Kent asked the question &#8212; what does this mean for our organisations? (agile in organisations this was the focus of the track - he said he&#8217;d tackled the implications for teams and team practices in earlier versions of the talk).</p>
<p><a id="more-95"></a></p>
<p>I came away (as always when listening to Kent) with a whole bunch of insights that have been settling in the days since. One thing that particularly struck most of us was the notion that as you move from monthly to weekly releases, you might lose the daily stand-up meeting, that touchstone of agile practice. To some this sounded like heresy, but Kent&#8217;s point was that if you&#8217;re going to do weekly releases you&#8217;d better all be aware all the time of what&#8217;s going on, not just once a day.</p>
<p>Some things falling out of this for me: regardless of structure, the nature and sizes of organisations that are truly capable of <em>real</em> weekly, daily, hourly delivery* has to be very different from what many of us are used to. The more frequently you release, the closer the decision-making about the product has to be to the team making the it, and the closer that team has to be to its users. This suggests to me that the organisations in which these teams work will be small (I&#8217;d add &#8212; or very decentralised &#8212; but I don&#8217;t see any of the large organisations I know being able to do this wholsesale decentralisation anytime soon). The more people in a group who need to know (or feel they need to know) about what&#8217;s going on, the more time and energy is spent on communication: I wonder whether this puts a limit on the size of organisations with respect to their frequency of delivery. Correspondingly, I think this is a common reason for the sort of friction agile teams in non-agile companies experience at their boundaries.</p>
<p>*&#8221;release to an internal production-like environment&#8221; is just pretending
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.teamsandtechnology.com/dh/blog/2010/03/24/kent-beck-and-software-g-forces/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
