<?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>niksilver.com &#187; Working practices</title>
	<atom:link href="http://niksilver.com/category/working-practices/feed/" rel="self" type="application/rss+xml" />
	<link>http://niksilver.com</link>
	<description>Mostly about the management of software development</description>
	<lastBuildDate>Sun, 20 Jun 2010 15:32:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Agile treadmill: Command and control in disguise?</title>
		<link>http://niksilver.com/2010/05/24/the-agile-treadmill-command-and-control-in-disguise/</link>
		<comments>http://niksilver.com/2010/05/24/the-agile-treadmill-command-and-control-in-disguise/#comments</comments>
		<pubDate>Mon, 24 May 2010 14:50:49 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/?p=724</guid>
		<description><![CDATA[Agile comes with tons of literature on how to organise work at a very detailed level. How much of this treadmill is activity for activity&#8217;s sake, rituals, and religious manifestations of an &#8216;Agile Sub-Culture&#8217; aimed at integrating a growing workforce? Can this relentless &#8216;heart beat&#8217; and this esoteric jargon stifle innovation and alienate the very [...]]]></description>
			<content:encoded><![CDATA[<p><em>Agile comes with tons of literature on how to organise work at a very detailed level. How much of this treadmill is activity for activity&#8217;s sake, rituals, and religious manifestations of an &#8216;Agile Sub-Culture&#8217; aimed at integrating a growing workforce? Can this relentless &#8216;heart beat&#8217; and this esoteric jargon stifle innovation and alienate the very people Agile purports to help? Could more slack benefit a discipline which ultimately relies on people&#8217;s intelligence and creativity?</em></p>
<p>That&#8217;s how we set the scene a few days ago when I led a discussion among some peers from different companies entitled &#8220;The Agile treadmill: Command and control in disguise?&#8221; It was organised by <a href="http://indigoblue.co.uk/">IndigoBlue</a> as part of their Second Wednesday series, under the Chatham House Rule. This is summary of what we discussed, with fictionalised  initials for each participant.</p>
<p>In this article</p>
<ul>
<li><a href="#origins">Origins.</a> How the question arose.</li>
<li><a href="#useful">How useful is Agile process?</a> It&#8217;s not all bad.</li>
<li><a href="#religious">Religious Agile, variable results.</a> Examples to demonstrate that religious Agile is somewhat independent of project success.</li>
<li><a href="#what-is">So what is Agile, anyway?</a> To be best understood, agile working should be seen not from the development point of view.</li>
<li><a href="#vision">Seeing the vision, from top to bottom.</a> The importance of all stakeholders seeing the whole picture.</li>
<li><a href="#lessons">What did we learn?</a> That religious Agile is independent of project success, that agile is a business methodology, and that the vision must be shared.</li>
</ul>
<p><strong><a href="http://www.flickr.com/photos/punkey/93740169/"><img class="alignright" title="The people's system. Photo by antanask" src="http://farm2.static.flickr.com/1145/784241115_71b33a4b3d_d.jpg" alt="" width="335" height="500" /></a><a name="origins"></a>Origins<br />
</strong></p>
<p>When people talk about how Agile they are I find this usually coincides with how rigorous their processes are. Some of the largest, most successful Agile projects I know have an exhausting hothouse atmosphere, where everyone&#8217;s role is tightly defined and cannot be deviated from.</p>
<p>Have we created a kind of Animal Farm, where a system designed to set us free has actually enslaved us? Does it make a difference if Agile has been introduced by developers or management? Is effective Agile synonymous with a hothouse environment?</p>
<p>Between us we had an awful lot of experience to help answer these questions.</p>
<p><strong><a name="useful"></a>How useful is Agile process?</strong></p>
<p>There was a general agreement with TC that there is some real value in having standard processes and practices:</p>
<ul>
<li>Rewriting the rulebook every time you start a project or programme is wasteful if you can capture the processes and practices that are known to work;</li>
<li>It&#8217;s easier to bring in external resources if well-known language and practices are being used in the team.</li>
</ul>
<p>But practices can be unnecessary, and there was recognition that many practitioners have a near-religious attachment to them, and to particular ways of working. As people managing programmes of work we often don&#8217;t have the discipline to recognise what the right level of discipline is&#8230; and isn&#8217;t.</p>
<p>There was also concern that Agile created an alienating language. NA indicated his particular discomfort over the word &#8220;customer&#8221; because that was often not how people saw themselves or their relationship with the tech teams.</p>
<p><strong><a href="http://www.flickr.com/photos/punkey/93740169/"><img class="alignleft" title="Tech worship. Photo by Frank Meeuwsen" src="http://farm1.static.flickr.com/21/93740169_d2b0635c3a_m_d.jpg" alt="" width="240" height="180" /></a><a name="religious"></a>Religious Agile, variable results</strong></p>
<p>So no-one was anti-process (nor anti-Agile process), and we know it has produced good results. Our own major rebuild and redesign at the Guardian is one example of that, with a very highly regimented process and an outcome that at least met the aims and expectations. There are plenty of others.</p>
<p>On the other hand we collectively had experience of strong-process projects which weren&#8217;t delivering.</p>
<p>FC talked about Agile projects in his organisation. Most of the smaller ones were fine; these were projects with just a handful of developers. But the company&#8217;s  most significant piece of work was having serious problems. It was now in its third year &#8212; nothing necessarily wrong with that, we said, after all some projects are just very large. And what had been delivered so far? Not much. Ah, we see the problem. And yet, he said, to the people on the ground this was a successful Agile project, because they were doing all the right things: daily stand-ups, rigorous unit testing, prioritised iterations&#8230; all the paraphernalia of an Agile project. They couldn&#8217;t see there was a problem.</p>
<p>AS reported a similar experience. &#8220;When I walked into the organisation they proudly walked me through their very rigorous process. &#8216;But nine out of your ten projects are on Red&#8217;, I said, &#8216;What is that process doing for you?&#8217;&#8221;</p>
<p><strong><a name="what-is"></a>So what is Agile, anyway?</strong></p>
<p>&#8220;Is Agile a process?&#8221; asked AS, rhetorically, &#8220;No. Is there process in it? Yes.&#8221; Process helps a project fit into the overall programme, added FC.</p>
<p>BJ went a bit further: successful Agile is about business change, not about what happens in the software team. The Agile approach to a large project is to get just enough clarity to embark on it, which probably isn&#8217;t every last detail. The stakeholders need to have the confidence to deal with uncertainty, and that sufficient uncertainty will continuously be resolved as the project progresses.</p>
<p>[And with that I'm going to drop the capital A from Agile unless I'm referring to by-the-book developer-level Agile.]</p>
<p>RN then came in with his take on this. He works in a highly bureaucratic company where technology is driven by heavyweight specs, a focus by high level people on low level details, and delivered entirely by specialist (external) suppliers. Yet his board are continually wanting things delivered faster, to greater quality, and he sees agile as the solution to this.  It means persuading his board to think about what they want at the right level &#8212; business value, not the contents of drop-down menus &#8212; and providing reassurance through clear, regular deliverables. It also means getting his suppliers to deliver in that manner. But all of that is entirely independent of unit tests, story cards, and so on.</p>
<p>I wondered if this meant a top-down mandate of agile was more successful than a bottom up one. AS clarified: it&#8217;s successful if it&#8217;s <em>business</em>-led, not <em>management</em>-led. LB linked this to <a href="http://www.change-management-blog.com/2009/07/change-model-3-john-kotters-8-steps-of.html">Kotter&#8217;s 8 steps to successful change</a>, and in particular the first step: there has to be a sense of urgency.</p>
<p>I confessed that our processes in the Guardian team today are substantially less religious (or rigorous) than they were during the time of our major rebuild programme. I used to be able to confidently say we are Agile and point to intensive pair programme, lots of story cards, and so on. Today pairing is inconsistent, automated unit tests aren&#8217;t used in non-critical satellite code, and teams don&#8217;t always work to iterations. I explained this changed because our business had changed. The emphasis is no longer on transforming our platform but now much more on innovation and on smaller projects with a much wider variety of stakeholders. This makes the control freak within me distinctly uncomfortable (AS had previously commented that in many organisations command-and-control provides confidence) but we generally deliver projects as intended and have happy stakeholders, so I wasn&#8217;t going to wade in to change it. BK commented that this seemed perfectly appropriate, and still looked like an agile business.</p>
<p><strong><a href="http://farm1.static.flickr.com/21/93740169_d2b0635c3a_m_d.jpg"><img class="alignright" title="The message has to run through from top to bottom. Photo by James Cridland" src="http://farm1.static.flickr.com/107/316390541_304af53e46_d.jpg" alt="" width="500" height="333" /></a><a name="vision"></a>Seeing the vision, from top to bottom</strong></p>
<p>Successful agile is something that needs to permeate the organisation, from top to bottom. It&#8217;s about delivering value, and the vision for what needs to be delivered must be seen and understood at all levels. Many of our experiences of projects going awry were also experiences of where the project vision wasn&#8217;t seen by the people doing the day-to-day work.</p>
<p>TC told how his IT department decided it was going to achieve <a href="http://www.cmmibootcamp.com/CMMI_FAQ.html">CMMI Level 2</a>. After two years they had accumulated 10 rooms&#8217; worth of documentation, and their productivity had dropped like a stone. And yes, he could measure that drop in productivity, because the team essentially did nothing else for those two years than produce documentation. The board inevitably said: <em>Never </em>do that again. CMMI accreditation may be useful, but it&#8217;s got to be for a purpose.</p>
<p>FC talked about his troubled project in its third year. &#8220;I revisited the original outcomes document a short while ago, and I couldn&#8217;t see how the activities around me are ever going to achieve those outcomes. When I ask one of the team leads what they&#8217;ve delivered, and how much there is to go, I&#8217;m just waved in the direction of a vast wall of index cards.&#8221;</p>
<p>AS talked about a daily scrum he attended: a two-minute meeting in which the team lead got a task update from each team member while he stood with his back to the story card board. &#8220;I had to take him to one side and tell him that he needed to be constantly referring people to the project outcomes, not just getting task updates.&#8221;</p>
<p>He also told the story of a business manager who wanted a change rolled out midweek &#8212; unprecedented for the organisation, as it would involve taking the website down for two hours. This was flatly refused by the Head of Systems. When they discussed the matter the issues were this: the business manager could show that if the change rolled out in the desired slot the company was projected to make an extra £1m, and if the slot was missed there wouldn&#8217;t be another opportunity for six months; the Head of Systems, meanwhile, had a target of 99.9% uptime and two hours downtime would mean he&#8217;d forfeit his bonus. &#8220;Our business must organise itself so that we are all focused on the same goals.&#8221;</p>
<p><strong><a name="lessons"></a>What did we learn?</strong></p>
<p>You may ask what <a href="http://www.learnings.org/">our learnings</a> were. I can confidently say there were no learnings whatsoever because <a href="http://www.imdb.com/title/tt0443453/">&#8220;learnings&#8221; isn&#8217;t a real word</a>. But there were probably lots of lessons. Here are three key things I came away with.</p>
<ol>
<li>Religious Agile, with an optional hothouse atmosphere, is entirely independent of a successful agile project. There are successful projects with and without religious Agile, and there are unsuccessful projects with and without religious Agile. This is underscored by&#8230;</li>
<li>Agile is about business change. It really only works when all the stakeholders focus on the same business-level goals, understand what their part in it is (and isn&#8217;t), can deal with uncertainty, and continually work to reduce that uncertainty exactly when necessary.</li>
<li>The business-level vision must be clear and permeate all levels. This is a corollary to the last point, but to me is significant enough to pull out. The people on the ground have to be able to relate all their activities to the business&#8217;s end goal, otherwise they will define success by other criteria &#8212; perhaps how well they adhere to a process &#8212; which are different from the actual success criteria.</li>
</ol>
<p>Thanks to all the participants for making it such a stimulating morning.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2010/05/24/the-agile-treadmill-command-and-control-in-disguise/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A few things I know about lean</title>
		<link>http://niksilver.com/2009/09/10/a-few-things-i-know-about-lean/</link>
		<comments>http://niksilver.com/2009/09/10/a-few-things-i-know-about-lean/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 21:30:28 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/?p=549</guid>
		<description><![CDATA[I&#8217;ve been reading a bit about lean working recently, and this is a bit about what I&#8217;ve learned.
Lean software development is a fascinating step on from Agile, but its history is in manufacturing cars and to date I&#8217;ve only been reading up on lean manufacturing, not lean development. There are two reasons for this. First, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/yj_kia/2412481067/"><img class="alignright" title="Photo by Cookie productions" src="http://farm3.static.flickr.com/2020/2412481067_4ea4f67dd6_d.jpg" alt="" width="500" height="375" /></a>I&#8217;ve been reading a bit about lean working recently, and this is a bit about what I&#8217;ve learned.</p>
<p>Lean software development is a fascinating step on from Agile, but its history is in manufacturing cars and to date I&#8217;ve only been reading up on lean manufacturing, not lean development. There are two reasons for this. First, I&#8217;d feel much more confident about lean if I know the background and reasons for things &#8212; in other words, I want to derive lean software development from first principles. Second, I was rather cautious, if not downright sceptical, that something can be translated from manufacturing to software. So if there&#8217;s any translating to be done then I want to do it myself &#8212; or at least understand someone else&#8217;s translation of some of the processes sufficiently to trust the rest of their translations.</p>
<p>This, then, is some of what I&#8217;ve learnt about lean working so far, based on manufacturing and with my own projections onto software development. It comes with the caveats that it&#8217;s partial and not informed by 99.9% of the work <a href="http://www.poppendieck.com/">Mary and Tom Poppendieck</a>, the acknowledged leaders in the field of lean software development. But it is informed by my reading of two fabulous books: <a href="http://www.thetoyotaway.org/">The Toyota Way by Jeffrey K. Liker</a> (TTW), and <a href="http://www.amazon.co.uk/Lean-Thinking-Banish-Create-Corporation/dp/0743231643">Lean Thinking by James P. Womack and Daniel T. Jones</a> (LT). My interest in cars registers on no scale visible to the human eye, but learning about car production from these authors has been quite eye-opening.</p>
<p>In this post:</p>
<ul>
<li><a href="#common-sense">Lean challenges common sense</a>;</li>
<li><a href="#value">Lean is about producing value</a>;</li>
<li><a href="#value-stream">Lean is about the value stream</a>;</li>
<li><a href="#waste">Lean is all about eliminating waste</a>;</li>
<li><a href="#flow">Flow</a>;</li>
<li><a href="#pull">Pull</a>;</li>
<li><a href="#impossible">Lean promises the seemingly-impossible</a>.</li>
</ul>
<p><strong><a name="common-sense"></a>Lean challenges common sense</strong></p>
<p>The &#8220;common sense&#8221; way of putting a complicated thing together is to divide the manufacturing process into pieces (the engine, the chassis, the interior, the shell), create a specialist team for each area with their specialist tools, then have them work in a long production line. The result is a very long production line with each product moving from one specialist team to another as it&#8217;s built up from beginning to end. If you&#8217;re going to be <em>really</em> efficient then you might batch up all the products of one type and send them through in one go, then switch to another product of another type and send those through.</p>
<p>Lean says this is wrong. It&#8217;s not trying to be deliberately challenging or quirky or iconclastic just for the sake of making a name for its founders. Rather, it says this is wrong because it generates hidden problems. If we look at the very long production line then every one of the products on that line is in an incomplete state and hiding a multitude of problems. And if you were to implement that single-product-batching it would be even worse.</p>
<p>Lean says the most efficient way of doing something is to create it from beginning to end in a single pass. The single long production line transforms into many, much smaller, teams that are each responsible for the entirety of the production of each product.</p>
<p>This is counter-intuitive. Did we learn nothing from Henry Ford? Well, the evidence &#8212; and there is plenty of it &#8212; says otherwise.</p>
<p>But I&#8217;m getting ahead of myself. Let&#8217;s start at the beginning&#8230;</p>
<p><strong><a name="value"></a>Lean is about producing value</strong></p>
<p>This is pretty unstartling and almost uninspiring. But it turns out that what constitutes value is often hard to define. First you have to ask &#8220;value to whom?&#8221; Often in large organisations people are set targets of something which is not the main goal of the organisation, and this means you end up optimising your processes for the wrong thing. For example, the paint team might be targeted on how quickly they can paint a car body before moving onto the next one. But that would be misleading, and might explain why there&#8217;s a retouch team further up the line to cover up the paint problems discovered later. A car company is not about producing painted bodies, it&#8217;s about producing cars, and focusing a team on painting ensures they miss the big picture.</p>
<p>The Guardian software team produces software, so it&#8217;s easy to see that&#8217;s where our value lies and we should optimise our processes around software. But on second thoughts I&#8217;m not entirely sure&#8230; Perhaps value should be measured from the point of view of the end user. The better we provide news and information the greater the value of what we do, and merely producing software is no good if it doesn&#8217;t benefit the end user. And when we do produce software it&#8217;s of absolutely no value until it&#8217;s released and public.</p>
<p><a href="http://www.flickr.com/photos/carbonnyc/2311145896/"><img class="alignleft" title="Photo by CarbonNYC" src="http://farm3.static.flickr.com/2074/2311145896_2c2495caef_m_d.jpg" alt="" width="240" height="160" /></a><strong><a name="value-stream"></a>Lean is about the value stream</strong></p>
<p>Once you&#8217;ve identified the value you need to map the value stream.</p>
<p>Let&#8217;s suppose our value is in producing software that the end user finds useful. The value stream runs from the point of idea inception to the point the user can use it. Mapping the value stream is the painful process of tracking exactly what happens to what and who, and how long it takes. This is painful because you need to be very, very honest with yourself, and map with your eyes wide open. In particular you need to make sure you track all the times something goes back for rework, and all the times the thing just sits there waiting for something to happen to it. It&#8217;s also painful because it means managers have to understand first hand what their team have to deal with &#8212; anyone who thinks they are above that due to demands of time or priorities is going to find this first step very difficult.</p>
<p>A typical Agile process has a backlog of work cued up before the iteration or sprint, and then hopefully delivered at the end. But there will be large gaps between a story being defined and actual development. If an iteration is three weeks then on average there will be a gap of 1.5 weeks between definition and development starting, and if we insist on any story being up to five days&#8217; effort then a typical optimum scenario is that a single story is at least 60% non-work. This is relevant because&#8230;</p>
<p><a href="http://www.flickr.com/photos/macwagen/21333320/"><img class="alignright" title="Photo by macwagen" src="http://farm1.static.flickr.com/17/21333320_7943bb4925_m_d.jpg" alt="" width="240" height="240" /></a><strong><a name="waste"></a>Lean is all about eliminating waste</strong></p>
<p>The primary purpose of lean is to eliminate waste, and I&#8217;ve not put it first in the list of things I know because we first need to define value and then map the value stream. Once we&#8217;ve done that we can tackle the waste.</p>
<p>Waste comes in many forms &#8212; well, seven forms according to lean lore. In manufacturing the most significant of the seven is unused inventory, which means parts that are sitting around in racks and warehouses waiting to be used. Unused inventory not only takes up unnecessary space, it actually masks problems. Here are some examples:</p>
<ul>
<li>the acres of spare parts mask the fact that part production is not in sync with the demand;</li>
<li>the fact that different parts are overstocked by different levels means that it&#8217;s impossible to tell which ones are most and least over-produced;</li>
<li>if a part is only used long after it is produced then  quality problems cannot be captured and addressed in time &#8212; by the time the quality flaw is discovered there will be many similarly-flawed parts in circulation.</li>
</ul>
<p>Inventory in manufacturing seems similar to Agile stories that aren&#8217;t being worked on: they&#8217;ve been specified but are sitting around waiting to be picked off the warehouse rack. And when they&#8217;ve been developed they might be sitting around waiting to be released &#8212; after all, until it&#8217;s released it&#8217;s of no value to the customer.</p>
<p>This is where we return to the example above of a story that&#8217;s 60% non-work &#8212; 60% of its time is just sitting around waiting. The goal is to compress this down to an ideal 0%, but not just because we want to do things quicker. It&#8217;s because having sight of something from beginning to end, and not lose sight of it for a second. It&#8217;s because being able to focus on something means information isn&#8217;t lost, and everyone&#8217;s expertise can be brought to bear on it in one pass. If that were to happen then less would be needed to be written down on the story card because the team wouldn&#8217;t have to suffer context switching. They could also apply much greater creativity to their work, because they would see exactly why certain things were and were not being specified and contribute alternative or additional ideas without causing confusion or risking repetition.</p>
<p>This idea of taking something from beginning to end in a single pass is called&#8230;</p>
<p><a href="http://www.flickr.com/photos/spodzone/429728900/"><img class="alignleft" title="Photo by spodzone" src="http://farm1.static.flickr.com/145/429728900_33221dd690_m_d.jpg" alt="" width="240" height="197" /></a><strong><a name="flow"></a>Flow</strong></p>
<p>In manufacturing this is a big deal. It means rather than having your factory floor as a single production line you create small teams (&#8221;cells&#8221;) which are responsible for the entire production of each unit (car, lawnmower, etc). If you have huge lathes and paint machines and so on it&#8217;s a major change to rearrange the factory floor.</p>
<p>Not so difficult in software development, fortunately &#8212; we tend to just have desks and computers, though in any large organisation with centralised functions you always need to win the buy-in of other people.</p>
<p>However, flow comes with a new and serious responsibility for those involved: the cell as a whole is responsible for producing the goods, so they must work together to ensure regular and maximal output. Let me make that concrete&#8230;</p>
<p>At no time when I&#8217;ve been working with cross-functional teams (software developer, client-side developer, QA, etc) has there been the perfect balance of all roles; we could always have done with one more software developer, or an extra 0.2 of a QA, etc. Much of the time the imbalance is negligible (or quietly welcome), but sometimes it&#8217;s very noticeable.  And when a cell is working together on a single deliverable (the car, the lawnmower, the software feature) then it&#8217;s up to everyone to help each other. It&#8217;s no good the client-side developer producing more widgets to test if the QA can&#8217;t keep up. They need to ignore the traditional perceived boundaries created by job titles, reach across to others, and work together to regulate the output.</p>
<p>I said lean is about eliminating waste, and flow helps with that in a way hinted at earlier. Flow increases quality by allowing all participants to see the thing put together from being to end without interruption. This reduces hand-off time, reduces information loss, reduces relearning, and increases knowledge and ownership. The number of times an item needs to go back for rework is reduced, and if it does need to go back then the rework that&#8217;s needed is clear and therefore quicker.</p>
<p><a href="http://www.flickr.com/photos/infomatique/179150028/"><img class="alignright" title="Photo by infomatique" src="http://farm1.static.flickr.com/74/179150028_2c3d697ad3_d.jpg" alt="" width="500" height="333" /></a><strong><a name="pull"></a>Pull</strong></p>
<p>Meanwhile, all this work needs to come from somewhere and that&#8217;s what &#8220;pull&#8221; is all about. The principle of lean is to only do what&#8217;s needed, and that means only produce something that is a direct response of a specific request, and only when needed.</p>
<p>The distinction is clear in car manufacturing. A car company&#8217;s marketing department will devise a special offer on a particular configuration (these seats, those mirrors, any one of the following colour combinations) and the plant will have to manufacture a whole lot of those particular cars ahead of time, but only with a guess (rather than a certainty) about what the demand will be. In the lean world a car is only produced in response to a specific customer&#8217;s specific purchase: customer goes into showroom, customer orders car, order triggers build.</p>
<p>That&#8217;s how pull works in relation to delivering the product to the customer. But pull also works in relation to building the product inside the factory. The old method is to keep hundreds of each part in store; the lean method is that a part is only provided to the worker when they need it: when they&#8217;re running low they signal the need for more, and it&#8217;s provided for them. This triggers a chain right back potentially to the supplier of the part, ensuring they are always delivering just enough, no more and no less.</p>
<p>The parallel flawed system in the software world is the product backlog. (We&#8217;ll ignore the even worse scenario of waterfall&#8217;s detailed planning up front.) Work is prioritised ahead of the sprint and waits to be developed. Requirements can change, even in that gap between prioritisation and development. The consequences aren&#8217;t as terrible in the Agile world as in the waterfall world, but it still causes problems: it disrupts the team&#8217;s schedule and of course all the effort that went into the planning of the now-deprioritised story is wasted. Even if the requirements remain constant the gap between planning and developing mean knowledge is lost, or conversations need to be repeated, or the requirements turn into mini-waterfall-style requirements specifications.</p>
<p>The lean software alternative is to prioritise the next story only when the team is ready to work on the next story. That means while the team is developing the current feature they don&#8217;t have much certainty about what&#8217;s coming next. Like the worker in the car plant they have to signal slightly ahead of time that a new story needs to be worked out. Then the Scrum Master/business owner/internal customer needs to get something ready so that when they become available the team can all get together, thrash out the details, and set to work again.</p>
<p>As a manager I&#8217;m uncomfortable with this: I can no longer know what&#8217;s going into an iteration when the iteration starts. But the definition of value is not &#8220;what a manager&#8217;s comfortable with&#8221;. I will need to find other ways to ensure we can be accountable to the rest of the business, and they will need to be ways which are closely aligned with end user value &#8212; and that can only be a good thing.</p>
<p>The combination of flow and pull doesn&#8217;t mean the team is only working on one thing at a time. But it does mean that everyone has an equal balance of work at all times. So if Alf&#8217;s development work gets passed over to Betty&#8217;s testing then Alf and Betty need to make sure that she is expecting to finish her current piece of testing at pretty much the same time as Alf finishes his current piece of development and passes it over to her. Keeping that flow even is really important.</p>
<p><strong><a name="impossible"></a>Lean promises the seemingly-impossible</strong></p>
<p>Lean holds out the seemingly-impossible promise of increased productivity and increased quality. But here are some numbers from the literature:</p>
<ul>
<li>The Puget Sound Naval Shipyard, time to prepare a repair document. Originally: 97 days. After a lean workshop and taking action: 26 days. (TTW, p.103)</li>
<li>Lantech wrapping machinery, before and after lean. Production throughput time was 16 weeks, became 14 hours to 5 days. Delivered defects per machine was 8, became 0.8. Employee time per machine was 160 hours, became 80 hours. (LT, p.121)</li>
<li>Porsche, production of the 911, before and after lean. Initial stamping to final shipping was 6 weeks, became 5 days. Inventory held was 17 days&#8217; worth, became 4.2 days&#8217; worth. Errors from work on the assembly line dropped 55%. (LT p.213)</li>
</ul>
<p>I do have some concerns about lean software development, but they&#8217;re less about lean itself and more about bandwagon-jumping and doing things without really understanding the reasons. Regardless of that, it&#8217;s refreshing to find a new way of looking at what seem to be known problems, and making insights which you might not otherwise have found. It&#8217;s certainly something I&#8217;ll be spending quite a bit more time on.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2009/09/10/a-few-things-i-know-about-lean/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>An ABC of R2: W is for Wiimbledon</title>
		<link>http://niksilver.com/2008/12/18/an-abc-of-r2-w-is-for-wiimbledon/</link>
		<comments>http://niksilver.com/2008/12/18/an-abc-of-r2-w-is-for-wiimbledon/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 09:30:29 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Guardian.co.uk]]></category>
		<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/?p=270</guid>
		<description><![CDATA[&#8230;which was a semi-regular event of Wii tennis in the office, but a very useful part of our R2 work, too.
Each launch required a small army of technologists to be on-hand: to run the various scripts, check the results, and deal with any problems that might arise. We needed to arrange these teams carefully because [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-274" title="r2-alphabet-w" src="http://niksilver.com/wp-content/r2-alphabet-w.jpg" alt="" width="400" height="400" />&#8230;which was a semi-regular event of Wii tennis in the office, but a very useful part of our R2 work, too.</p>
<p>Each launch required a small army of technologists to be on-hand: to run the various scripts, check the results, and deal with any problems that might arise. We needed to arrange these teams carefully because launches happened overnight, so we&#8217;d need an overnight team and another team in early the next day to pick up any remaining issues.</p>
<p>All this was fine, but after a while someone realised we&#8217;d missed a trick. I think he actually wanted to be part of the overnight team (it&#8217;s always exciting to see these thngs go live) but wasn&#8217;t actually on it. So he arranged with others to bring in some games consoles, and wired one up to a big screen, the others to projectors. It was a big draw, and a great way to have an extra group of techies staying late in case the need arose.</p>
<p>Still, we couldn&#8217;t be cavalier with this. For example, we made sure the gamers were located far from the launch team &#8212; the launch team had a serious job to do and didn&#8217;t need distraction. But that didn&#8217;t prevent the benefits: every so often a gamer would slip out of Guitar Hero and wander over to the launch team to check up on progress, offering some advice and support if necessary. One time a critical SQL script was running worryingly slowly and a call came through to see if someone could contribute to the investigation; a couple sat down at a machine a few feet from the Mario Kart players, traced the problem, and suggested a change to the script which was agreed and did the job. That night it made the difference between &#8220;go&#8221; and &#8220;abort&#8221;.</p>
<p>If there&#8217;s a general lesson to be drawn from this I don&#8217;t think it&#8217;s to keep a Wii console in the stationery cupboard along with the paperclips and envelopes. But exploiting opportunities that are specific your particular situation is probably a good thing to do, even if they aren&#8217;t enshrined in official company policy.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2008/12/18/an-abc-of-r2-w-is-for-wiimbledon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An ABC of R2: S is for sitebuilding</title>
		<link>http://niksilver.com/2008/12/12/an-abc-of-r2-s-is-for-sitebuilding/</link>
		<comments>http://niksilver.com/2008/12/12/an-abc-of-r2-s-is-for-sitebuilding/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 09:30:25 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Guardian.co.uk]]></category>
		<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/?p=247</guid>
		<description><![CDATA[&#8230;which was the penultimate step before a launch, after the software had been built and released, and before the technical work to finally lift the curtain.
One of the big changes that was part of R2 was how we structured our content &#8212; our information architecture. Previously each piece of content lived in a section, up [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-251" title="r2-alphabet-s" src="http://niksilver.com/wp-content/r2-alphabet-s.jpg" alt="" width="400" height="400" />&#8230;which was the penultimate step before a launch, after the software had been built and released, and before the technical work to finally lift the curtain.</p>
<p>One of the big changes that was part of R2 was how we structured our content &#8212; our information architecture. Previously each piece of content lived in a section, up to two levels deep, and a lot of content was duplicated so that it could appear in more than one section at a time. An extreme example we often used was the affair around <a href="http://www.guardian.co.uk/politics/davidkelly">David Kelly and the consequential Hutton inquiry</a>. Almost every story there crossed the boundaries of politics, media and daily news.</p>
<p>With R2 we were introducing much more nuanced keywording and more options around navigation. So the content in the old system didn&#8217;t map directly into the new system: it all had to be examined and reclassified by hand. Additionally, production staff needed to build subject pages in ways they couldn&#8217;t before &#8212; for example, the pages on <a href="http://www.guardian.co.uk/world/afghanistan">Afghanistan</a>, the <a href="http://www.guardian.co.uk/uk/monarchy">British monarchy</a> and the <a href="http://www.guardian.co.uk/world/bae">BAE corruption investigations</a>. All this was called sitebuilding.</p>
<p>Of course, the tech team built tools and wrote scripts to make the production staff&#8217;s job easier, but some things just need human expertise and take a very long time. Typically we allowed six weeks between the time the software was released and the relevant site was launched and that was the period in which sitebuilding took place.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2008/12/12/an-abc-of-r2-s-is-for-sitebuilding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An ABC of R2: Q is for quality assurance</title>
		<link>http://niksilver.com/2008/12/10/an-abc-of-r2-q-is-for-quality-assurance/</link>
		<comments>http://niksilver.com/2008/12/10/an-abc-of-r2-q-is-for-quality-assurance/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 09:30:10 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Guardian.co.uk]]></category>
		<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/?p=236</guid>
		<description><![CDATA[&#8230;which is a much misunderstood subject.
The R2 team consisted of a number of QAs, and the most obvious artifact that the QAs produced and worked with was the test script: a series of detailed instruction that explained what to test and how to test it. For this reason it&#8217;s too easy to dismiss QAs as [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-239" title="r2-alphabet-q" src="http://niksilver.com/wp-content/r2-alphabet-q.jpg" alt="" width="400" height="400" />&#8230;which is a much misunderstood subject.</p>
<p>The R2 team consisted of a number of QAs, and the most obvious artifact that the QAs produced and worked with was the test script: a series of detailed instruction that explained what to test and how to test it. For this reason it&#8217;s too easy to dismiss QAs as testers, and that would be a mistake.</p>
<p>Our QA Manager, Amy, says &#8220;I don&#8217;t want us to be finding problems, I want there to be no problems to find&#8221;. That hints at how QAs should be used: they should be involved from the very start of a piece of work to identify an appropriate structure and approach that ensures greater reliability and more opportunities for testing. In the best cases a QA has guided a task in a direction that BAs, developers and architects might not have previously considered, so avoiding problems they hadn&#8217;t thought of. In the worst cases a QA has been omitted from planning a piece of work and something considered straightforward by the QA-less group has turned out expensive to test and a constant source of problems.</p>
<p>Testing comes at the end of the development process, and considering a QA as a tester therefore allows one to fall into the trap of including them only at the end. The quality assurance process should add value, and that can only happen if the QAs are involved from the start.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2008/12/10/an-abc-of-r2-q-is-for-quality-assurance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An ABC of R2: P is for pair programming</title>
		<link>http://niksilver.com/2008/12/09/an-abc-of-r2-p-is-for-pair-programming/</link>
		<comments>http://niksilver.com/2008/12/09/an-abc-of-r2-p-is-for-pair-programming/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 09:30:13 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Guardian.co.uk]]></category>
		<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/?p=231</guid>
		<description><![CDATA[&#8230;which was, and is, a hugely important part of our software development, and something that took a long time to learn to do well.
Pair programming is when two developers sit at one machine and one keyboard to write the software. It&#8217;s very difficult to do: the driver has the pressure of someone watching their every [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-234" title="r2-alphabet-p" src="http://niksilver.com/wp-content/r2-alphabet-p.jpg" alt="" width="400" height="400" />&#8230;which was, and is, a hugely important part of our software development, and something that took a long time to learn to do well.</p>
<p>Pair programming is when two developers sit at one machine and one keyboard to write the software. It&#8217;s very difficult to do: the driver has the pressure of someone watching their every move, and the navigator has to be aware of what&#8217;s going on because they&#8217;ll be asked to take over at any moment and they have a responsibility to keep an eye on the bigger picture. It also makes it a very collaborative process &#8212; the pair need to work out together exactly how they&#8217;re going to tackle every problem. Mat, leading our architecture team, calls this &#8220;keeping each other honest&#8221;.</p>
<p>Pairing looks expensive &#8212; two people apparently doing something that one could do &#8212; but that makes the mistake of thinking that all software is the same and all developers are interchangeable. Here are some of the benefits we&#8217;ve found:</p>
<ul>
<li>Developers are more productive. With someone sitting beside you you can&#8217;t afford to cruise. You&#8217;ve got to be demonstrably on the ball all the time.</li>
<li>The quality of the software is much higher. I&#8217;ve listened to developers discussing how they should write a particular piece of code, suggesting alternatives and weighing up pros and cons that one individual would never have come up with by themselves.</li>
<li>Developers become much more skilled much more quickly. Everyone learns off everyone else.</li>
<li>The company&#8217;s technology investment is de-risked. Highly specialised knowledge is shared among many people, and doesn&#8217;t live just in the head of one person. This also means&#8230;</li>
<li>&#8230;Resourcing projects is easier. Because more people are able to move onto other teams more often, since (a) they are more likely to have the knowledge needed for the new team, and (b) they are less tied to their existing team since they will have shared that knowledge. This last point also means&#8230;</li>
<li>&#8230;Developers have more opportunities to learn new things. They can move onto other teams and new projects, safe that they won&#8217;t be constantly called back to their previous team, because they&#8217;ll have shared their skills and knowledge.</li>
</ul>
<p>When a software project is complete the software itself is only just beginning its life, in operation day after day &#8212; and in the case of our software, by hundreds of people for many years to come. So that development investment has to ensure the product is of very high quality, and pair programming is part of how we ensure that.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2008/12/09/an-abc-of-r2-p-is-for-pair-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An ABC of R2: O is for opportunity</title>
		<link>http://niksilver.com/2008/12/08/an-abc-of-r2-o-is-for-opportunity/</link>
		<comments>http://niksilver.com/2008/12/08/an-abc-of-r2-o-is-for-opportunity/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 09:30:55 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Guardian.co.uk]]></category>
		<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/?p=226</guid>
		<description><![CDATA[&#8230;which is a word that we came to understand only slowly, particularly as a counterpart to the word &#8220;challenge&#8221;.
As we worked we inevitably came across problems; Nigel, our indefatigable programme manager, would insist on calling them &#8220;challenges&#8221;, and casting possible actions as &#8220;opportunities&#8221;, to the point that it became a running joke. But problems &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-229" title="r2-alphabet-o" src="http://niksilver.com/wp-content/r2-alphabet-o.jpg" alt="" width="393" height="400" />&#8230;which is a word that we came to understand only slowly, particularly as a counterpart to the word &#8220;challenge&#8221;.</p>
<p>As we worked we inevitably came across problems; Nigel, our indefatigable programme manager, would insist on calling them &#8220;challenges&#8221;, and casting possible actions as &#8220;opportunities&#8221;, to the point that it became a running joke. But problems &#8212; sorry, challenges &#8212; are chances to raise your game, and opportunities are chances to resolve two issues with one action.</p>
<p>One very early challenge was to deliver our video platform without disrupting the R2 project. Delivering video was itself a major project, requiring CMS integration and embedded advertising. Our opportunity was to do that and at the same time prove that our &#8220;business as usual&#8221; team (which ran alongside the R2 team and tended to deal with small, one-off tasks) could produce work at least as complex and high-profile as anything the R2 team could.</p>
<p>Our video technology has been a great success. The team produced something which enshrined good principles of web publishing, and integrated perfectly with the content management system (allowing keywording, <a href="http://browse.guardian.co.uk/search?search_target=%2Fsearch&amp;fr=cb-guardian&amp;search=teacher+tv&amp;N=0&amp;sort=relevance">search findability</a>, etc) built from the R2 project. Taking the opportunity to prove the capability of the business as usual team provided everyone &#8212; both inside and outside the team &#8212; with even more confidence in what we could do.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2008/12/08/an-abc-of-r2-o-is-for-opportunity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An ABC of R2: J is for JFDI</title>
		<link>http://niksilver.com/2008/12/01/an-abc-of-r2-j-is-for-jfdi/</link>
		<comments>http://niksilver.com/2008/12/01/an-abc-of-r2-j-is-for-jfdi/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 09:30:53 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Guardian.co.uk]]></category>
		<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/?p=198</guid>
		<description><![CDATA[&#8230;which stands for &#8220;just do it&#8221;, and was the unofficial name of one of the development teams which sat alongside the R2 teams.
One key principle we had from the start of the project was that other development work couldn&#8217;t stop for the sake of the site rebuild. There might be less of it, but it [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-201" title="r2-alphabet-j" src="http://niksilver.com/wp-content/r2-alphabet-j.jpg" alt="" width="400" height="400" />&#8230;which stands for &#8220;just do it&#8221;, and was the unofficial name of one of the development teams which sat alongside the R2 teams.</p>
<p>One key principle we had from the start of the project was that other development work couldn&#8217;t stop for the sake of the site rebuild. There might be less of it, but it shouldn&#8217;t dwindle to zero. And while R2 was a major long term undertaking, the rest of the work that came up inevitably had a very different shape. Consequently we had different kinds of teams.</p>
<p>The JFDI team handled very short turnaround work. Mostly this consisted of bugfixes, but it also included minor enhancements. It worked in a traditional Agile manner, but due to the size of the individual tasks work was reprioritised every day rather than every fortnight.</p>
<p>Working on the JFDI team suits some people better than others. On the one hand it&#8217;s difficult to get your teeth stuck into anything because it doesn&#8217;t last very long (or at least it shouldn&#8217;t); on the other hand you get a sense of completion every day. A lot of the time people don&#8217;t relish cycling into that team, but once they&#8217;re in they find they learn a huge amount about how the software they&#8217;ve written actually gets used. I&#8217;ve written <a href="http://niksilver.com/2007/04/19/rotation-through-the-support-team-considered-healthy/">more on this subject previously</a>.</p>
<p>Overall the JFDI team has been very successful, dealing with a large and constantly-shifting workload, but also demonstrating daily progress to our internal users. Since R2 finished we&#8217;ve kept the team running in the same mode, and it continues to bring immediate benefit to people inside and outside the development teams.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2008/12/01/an-abc-of-r2-j-is-for-jfdi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Big lessons from a little project</title>
		<link>http://niksilver.com/2008/04/06/big-lessons-from-a-little-project/</link>
		<comments>http://niksilver.com/2008/04/06/big-lessons-from-a-little-project/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 18:43:13 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/2008/04/06/big-lessons-from-a-little-project/</guid>
		<description><![CDATA[I&#8217;ve just finished a fortnight&#8217;s holiday which I (foolishly) spent mostly in front of a PC developing a never-ending little application. But unexpectedly, despite the trivial nature of my project, I rediscovered a number of important lessons more usually associated with serious application development.
The software I&#8217;m writing is a just a little Firefox plugin. I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just finished a fortnight&#8217;s holiday which I (foolishly) spent mostly in front of a PC developing a never-ending little application. But unexpectedly, despite the trivial nature of my project, I rediscovered a number of important lessons more usually associated with serious application development.</p>
<p>The software I&#8217;m writing is a just a little Firefox plugin. I&#8217;ve been fiddling with it for so long we&#8217;re <a href="http://www.theregister.co.uk/2008/04/02/firefox3_beta5_release/">almost onto</a> the second major release of Firefox since I started, and yet it&#8217;s probably not much more than a couple of hundred lines long. You can see it really is a minor enterprise. Despite this it&#8217;s been quite a surprise &#8212; quite a shock, even &#8212; to be reminded of some industrial-strength truths in a small and personal environment.</p>
<p>And they are&#8230;</p>
<p><strong>1. Damn, writing software is difficult</strong></p>
<p>What we non-developers know about software we know either by observing or by talking to those who do it. But anyone who wants to be trusted won&#8217;t complain about their job or bore you with details they know you don&#8217;t want to hear, and so you&#8217;ll never hear about everything there is to know about software development, even when you ask.</p>
<p>So one thing I discovered &#8212; again &#8212; is that writing software is really difficult. Sometimes I was flying, but more often I was crawling: piecing together information from different sources, trying to understand what was possible, learning all kinds of technologies (Javascript, <a href="http://developer.mozilla.org/en/docs/XUL">XUL</a>, <a href="http://www.mozilla.org/projects/xpcom/">XPCOM</a>), trying use them well, but more often trying to get them to work at all.</p>
<p>It&#8217;s made me respect all the more the people I work with every day who make it look so easy. Every line you write is pure logic and needs to work 100%. This is not like writing a letter or a sales proposal, where a sentence that&#8217;s only 95% perfect is more than adequate. This is like writing a legal contract from scratch for a particularly unpredictable world. Every line needs to be watertight.</p>
<p><strong><img align="right" alt="Aspects of commercial software development" id="image94" title="Aspects of commercial software development" src="http://niksilver.com/wp-content/aspects-of-development.jpg" /></strong><strong>2. Simple design really is difficult</strong></p>
<p>Simple design is another way of saying that the software should be easy to work with and modify. You&#8217;d think this would be hard to get wrong, particularly with something which is being built as new: surely you just add small, simple pieces one at a time, with each one adding the next feature on the list. What could go wrong?</p>
<p>I found out first hand that simple design is difficult to achieve, even in very simple scenarios. For example, my application has a class which handles the user&#8217;s preferences. It needs to be initialised for when the application starts, and it needs to take and save the preferences when requested. All this takes place within a single object. So I wrote an initialisation function which set up the initial preferences according to how it&#8217;s been configured, I tested it, and all was well. Then I added some functions to take updated values and save them, tested those, and all continued to be well. Total: about 20 lines of code over four functions.</p>
<p>Then I ran the whole in an integrated environment and weird errors started occurring. It took me about two hours to figure out what was going on: it was a strange combination of unexpected start-up values, Firefox calling the initialisation function at unexpected times, and some confusing logic of my own which was supposed to protect double-initialisation. In the end I decided the best solution was to throw out the whole idea of initialisation. Now the object just takes and save preferences, and you can do that when the application starts if you want. Total: 5 lines.</p>
<p>The point of this is that an apparently simple and obvious design was actually too complicated to sustain. I&#8217;m very pleased that the solution was to delete lines and simplify. But I could only do this so easily because I had complete control of the code. In other circumstances there might have been other systems which were relying on that initialisation code (however flawed it may have been), and I might have had to add to the existing complications to solve my problem; or I might not have had the time to take a fresh look at the code and simply built around the flaws out of a sense of fear of touching the wrong thing.</p>
<p>This is a tiny example from a tiny piece of work, but it showed me how easy it is to go wrong with a design, and how easy it is to produce software that is complicated, hard to understand, and time-consuming to fix and evolve.</p>
<p><strong>3. Learning a language is more about culture than syntax</strong></p>
<p>I sometimes get CVs from people who claim to know about 10 programming languages, and I&#8217;m always doubtful. Just because you&#8217;ve written an application in a language it does not follow you&#8217;ve done it well. Knowing the syntax is only the first step. You also need to have good knowledge of any libraries, and finally you need to know how to work with the grain of a language. This means you&#8217;ll use different idioms, and <a href="http://weblog.raganwald.com/2008/01/problem-with-problem-with-design.html">structure your solutions in different ways</a>.</p>
<p>In my own case I&#8217;ve been writing Javascript, but it stinks because I&#8217;ve tried to use it like Java. I&#8217;ve been stuck in my old Java ways, like creating classes and carving out a deeply-nested namespace. It&#8217;s Javascript, Jim, but not as we know it. It works, it makes sense, but it looks clunky and&#8230; well, it just feels wrong, dammit.</p>
<p>Javascript is a prototyping language. I can even tell you what that means, but only with my head, not with my heart. I use the prototyping as a hoop to jump through to get it to do the Java-y things that I know I shouldn&#8217;t be doing in the first place. Being a prototyping language doesn&#8217;t mean Javascript is a second-class language, or a dumbed-down Java. It means it&#8217;s a different kind of language to Java and should be treated as <a href="http://www.infoq.com/presentations/vanderburg-power-of-javascript">a first class language</a> with <a href="http://www.techpresentations.org/JavaScript:_The_Good_Parts">its own ways</a> of getting things done.</p>
<p>It&#8217;s a cultural thing, and you can&#8217;t claim to really know the language if you don&#8217;t operate comfortably in its culture. I don&#8217;t really know Javascript.</p>
<p><strong>4. How did I ever live without automated tests?</strong></p>
<p>Possibly by not spending my holidays sat in front of a PC. But aside from that, I continue to wonder at the marvel that is automated testing, and <a href="http://www.jsunit.net/">unit testing</a> in particular. To be able to implement a change and not have to trouble your brain about the consequences is very liberating, allowing you to move ahead with confidence. It does take some work to set up the environment, but the results are worth it.</p>
<p>That said&#8230;</p>
<p><strong>5. Your automated tests won&#8217;t cover everything</strong></p>
<p>In one of my functions I unexpectedly found a truck-sized hole which had gone undiscovered despite seemingly comprehensive automated test coverage. (A loop which had a &#8220;break&#8221; when it should have had a &#8220;continue&#8221;, meaning great swathes of actions got skipped in most circumstances.) I only discovered this through integration testing (which is the fancy name I&#8217;m using for what was really <a href="http://www.guardian.co.uk/business/2008/mar/28/theairlineindustry.britishairwaysbusiness2">&#8220;trying it out&#8221;</a>), and found that a quirk in my unit testing setup had caused the mistake to be missed. Once I had found the cause I adjusted the main code to be more predictable and put in an automated test to trap the error, but it was only discovered through real hands-on testing.</p>
<p><strong>6. A strong IDE sustains motivation as much as anything</strong></p>
<p>Although I was using Eclipse for development, when working with Javascript it really doesn&#8217;t offer the comprehensive support you get with Java. Because Javascript is a dynamic language, and no doubt also because of the state of <a href="http://labs.adobe.com/technologies/jseclipse/">JSEclipse</a>, there&#8217;s very weak support for code completion, refactoring and so on.</p>
<p>The consequence of this was a loss of code-writing speed, but much more than that I was suddenly able to see how easily a weak IDE allows bad software to be produced. There were many occasions when I knew that I should tidy up or refactor something, but was then suddenly hit with a premonition of the tedious steps I&#8217;d have to go through: working out which files to pick on, the manual search-and-replace, checking the context before I made a change. I had to force myself to get on with the tidying up despite knowing how painful it would be, focusing on the long-term results, and safe in the knowledge that for this little personal project I didn&#8217;t have a deadline.</p>
<p>It became clear to me that so many people must come under a constant barrage of pressure, with only their current strength of character to defend against the pressures of deadlines and short-term wins. It&#8217;s inevitable that too often they will give in to those pressures, leaving cumbersome code building up, and ultimately gumming up the works of the system. A strong IDE removes the barriers to those virtuous tasks of improving design and allows you not only to do your job, but to do it well.</p>
<p><strong>7. Estimation is difficult</strong></p>
<p>Which is just an excuse for the shameful truth: all my estimations were out by a factor of four. This is embarrassing because it&#8217;s not as if I&#8217;ve never written software before.</p>
<p>In retrospect the mistake I was making was to look at the component parts of a task, guess how long they&#8217;d each take, and add them up. What I should have done was try to take the forthcoming work, identify similar previous tasks, and from past experience see how long they actually took.</p>
<p>At the end of the day experience is good, but it&#8217;s how you use it that really counts.</p>
<p><strong>8. You can&#8217;t know all your requirements up front</strong></p>
<p>This is familiar to anyone who&#8217;s bought into Agile, but it hits home hard when it&#8217;s you who&#8217;s the user setting the requirements.</p>
<p>I&#8217;ve written countless requirements specifications in the past (in 60-page documents, on task cards, wherever) &#8212; I thought I really ought to be clear-thinking enough to know my own requirements up front. Wrong again. As the UI came together, as one idea sparked off another, and as I had chances to step away from the code to think about things from a distance, I started to see that my feature set was really rather disjoint &#8212; almost random. These were moments of clarity that on the one hand caused me to add requirements, but in doing so I was recasting the software with a new perspective. I was starting to see what the software should be doing, which was not quite the same as what I&#8217;d started out on.</p>
<p><strong>Release date</strong></p>
<p>Fortunately I&#8217;ve not sent out a press release announcing a release date, held a press conference, or hired the London Eye for a glitzy media event. I&#8217;m just writing software for fun, and at this rate it&#8217;s probably not going to ever see the light of day. But even then, it&#8217;s been startling to find that the germs of some of the Big Ideas of software development are still present in the smallest of projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2008/04/06/big-lessons-from-a-little-project/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>QCon London 2008: A Michelin-starred deli</title>
		<link>http://niksilver.com/2008/03/17/qcon-london-2008-a-michelin-starred-deli/</link>
		<comments>http://niksilver.com/2008/03/17/qcon-london-2008-a-michelin-starred-deli/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 11:54:37 +0000</pubDate>
		<dc:creator>Nik</dc:creator>
				<category><![CDATA[Working practices]]></category>

		<guid isPermaLink="false">http://niksilver.com/2008/03/17/qcon-london-2008-a-michelin-starred-deli/</guid>
		<description><![CDATA[There were very few moments for me during QCon London 2008 of earth-shaking enlightenment &#8212; if any. But every hour of the three days of the conference there were insights and guidance that could be tucked away, and reused later to save hours, days or weeks of time elsewhere. Snake-oil salesmen where thin on the [...]]]></description>
			<content:encoded><![CDATA[<p>There were very few moments for me during <a href="http://jaoo.dk/london-2008/conference/">QCon London 2008</a> of earth-shaking enlightenment &#8212; if any. But every hour of the three days of the conference there were insights and guidance that could be tucked away, and reused later to save hours, days or weeks of time elsewhere. Snake-oil salesmen where thin on the ground, and instead there were dozens of people saying one or both of:</p>
<ul>
<li>This is what we did; and</li>
<li>This is what you can do.</li>
</ul>
<p>No magic, no silver bullets, but plenty of solid advice and experience.</p>
<p>A good example of both of these was <a href="http://jaoo.dk/london-2008/speaker/Randy+Shoup">Randy Shoup</a> of eBay. He had nothing to sell (other than the good name of eBay, perhaps) and his presentation was very clearly constructed to show their principles of scalability, and some concrete examples of how these work in practice. You probably wouldn&#8217;t use their periodic batch processing method to generate recommendations &#8212; if only because it&#8217;s odds on you don&#8217;t have a recommendation system &#8212; but you could take the overarching principle of &#8220;async everywhere&#8221; and apply that to the next scalable application that you need to work on.</p>
<p>Even the very specific presentations contained valuable points that could be generalised and reused. For example, <a href="http://jaoo.dk/london-2008/speaker/Matt+Youill">Matt Youill</a> and Asher Glynn of Betfair talked through how they scaled the transaction processing on their servers by a hundred-fold. Guardian.co.uk doesn&#8217;t need that kind of throughput, so the details were primarily of intellectual benefit. But a key practical lesson was how they approached the problem: by presenting it to industry players as a challenge carrying great kudos to the winning company.</p>
<p>All of this was summed up very nicely by the team from BBC News: <a href="http://www.bbc.co.uk/blogs/bbcinternet/john_odonovan/">John O&#8217;Donovan</a>, <a href="http://www.bbc.co.uk/blogs/bbcinternet/kevin_hinde/">Kevin Hinde</a> and <a href="http://www.linkedin.com/in/rossheritage">Ross Heritage</a>. They were asked how they managed performance testing for the iPlayer. John spent a few moments describing some of the techniques they employed, but got to the point when he realised the audience really wanted some eye-opening enlightenment which he didn&#8217;t have. At this moment Kevin stepped forward and said straight out &#8220;There&#8217;s no secret sauce&#8221;. Indeed not: they just work hard and stick to strong principles.</p>
<p>QCon offered little in the way of secret sauces, but it did contain dozens and dozens of great ingredients you could take away and use to concoct your own wonderful dishes.</p>
<p>And with that analogy pushed to breaking point, I think we should leave it there.</p>
]]></content:encoded>
			<wfw:commentRss>http://niksilver.com/2008/03/17/qcon-london-2008-a-michelin-starred-deli/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
