<?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>Liz Keogh&#039;s blog</title>
	<atom:link href="http://lizkeogh.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lizkeogh.com</link>
	<description>Software, Training, Coaching, Writing</description>
	<lastBuildDate>Thu, 17 May 2012 18:05:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>LSSC 2012</title>
		<link>http://lizkeogh.com/2012/05/17/lssc-2012/</link>
		<comments>http://lizkeogh.com/2012/05/17/lssc-2012/#comments</comments>
		<pubDate>Thu, 17 May 2012 17:50:29 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[uncategorized]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=847</guid>
		<description><![CDATA[A lot of times when I go to conferences, I&#8217;ve already got a slew of half-formed ideas and thoughts from the amazing communities with whom I hang out. The conferences have been fantastic for helping me refine and validate those ideas, but it&#8217;s been a while since I&#8217;ve come across anything genuinely new.
LSSC 2012 was [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of times when I go to conferences, I&#8217;ve already got a slew of half-formed ideas and thoughts from the amazing communities with whom I hang out. The conferences have been fantastic for helping me refine and validate those ideas, but it&#8217;s been a while since I&#8217;ve come across anything genuinely new.</p>
<p>LSSC 2012 was very, very different &#8211; challenging a ton of sacred cows, trashing some long-held ideas and giving me a bunch of new thoughts and understanding. The format was perfect: seemingly flawless organisation; amazing speakers, including some that we wouldn&#8217;t have heard if we weren&#8217;t in Boston; a Lean Camp unconference where I actually felt panic at not being able to attend all the sessions; long breaks giving us plenty of time to talk, network, reflect and synthesize ideas; innovative sponsors whose presence added value; lightning and ignite talks with hours of brilliance compacted into small spaces of time (thanks for letting me rant instead!); great venue, food and service and of course the fantastic mix of attendees.</p>
<p>Here are some of the joyous nuggets that I learnt and the people from whom I learnt them, paraphrased for your quick enjoyment.</p>
<p><strong>Hillel Glazer:</strong> Demand pulls most of us to start projects, but it only really works when it pulls us to finish them and produce something. For that, we need to work on capacity. <strong>David Joyce</strong> echoed Hillel&#8217;s sentiments in his talk when he told us to stop disbanding teams right when they&#8217;re at their most productive. That&#8217;s part of the problem.</p>
<p><strong>Steven Spear:</strong> If you can&#8217;t make predictions, you lose your ability to be surprised, which means you can&#8217;t learn. This spawned a Twitter conversation with <strong>Karl Scotland</strong> and others about complexity and whether expectations apply in the complex space, which helped me with my ignite talk. I really love <a href="http://availagility.co.uk/2012/04/05/impact-outcome-and-output/">Karl&#8217;s take</a> &#8211; that we should at least predict <em>impact</em> if not <em>outcome</em>. Steven was talking about nuclear reactors, which I hope are a little more predictable than the software we produce.</p>
<p><strong>David Anderson:</strong> It turns out that the community is doing more than just software these days, so the Lean Software Systems Consortium has rebranded as the <a href="http://leansystemssociety.org/">Lean Systems Society</a>. It&#8217;s modelled on the Royal Society, and I&#8217;m honoured to be named as a fellow. Particularly interesting was David&#8217;s comment that they&#8217;d observed the behaviours and values of the community, and drawn up their Credo or value statement accordingly &#8211; not the other way round! Talk about making process policies explicit&#8230;</p>
<p><strong>Michael Kennedy:</strong> From TPS &#8211; &#8220;Product development is not about developing cars, it is about developing knowledge about cars.&#8221; Michael showed how sharing knowledge across projects can help us to build quality in. He showed how Toyota explore new ideas, resolving complexity <em>while developing expertise</em> before using them in production, which falls right into place alongside some of the Cynefin conversations that have been happening in the UK, as well as <a href="http://dannorth.net/2010/08/30/introducing-deliberate-discovery/">Dan North&#8217;s call</a> for Deliberate (as opposed to accidental) Discovery. One excellent quote: &#8220;They&#8217;re only standards because they&#8217;re the best we can do right now. Engineers are expected to break the standards. Managers decide which standards they want to be broken.&#8221;</p>
<p><strong>Gregory Howell:</strong> It turns out that the construction metaphor we&#8217;ve been using in IT <em>doesn&#8217;t even work out in construction</em>! One study found that 85% of construction managers had underestimated the complexity of the project. Pushing people to go faster isn&#8217;t as useful as working on the interfaces between people. The stories he told mostly centred on slowing things down and increasing quality and fluidity of hand-offs in order to go faster.</p>
<p><strong>Robert Charette:</strong> All exchanges of goods and services are exchanges of risks and opportunity. Robert used the example of a plumber who&#8217;s taken on risk by investing in his own skills. He has an interesting model for risk and particularly market share, and challenged us to think about the kind of things which might end up bringing a company as successful as Apple down.</p>
<p><strong>Jim Benson:</strong> If you have a repetitive task, record the metrics for how it went each time on your kanban board. Jim was talking in terms of Personal Kanban, but I can see how that could be useful for eg: retrospectives. Already added the &#8220;exercise&#8221; column to mine! Jim also taught one table at the Brickell Key awards that if you play buzzword drinking games with the Lean &#038; Kanban crowd, you&#8217;re going to get what you measure&#8230; dangerous stuff. Congratulations to both Brickell Key winners, Jim and Arne Roock.</p>
<p><strong>Mike Burrows:</strong> Limit WIP in portfolio too. Mike also suggests limiting <em>the amount of money</em> carried in the portfolio, allowing you to have a few big projects or several small ones. <strong>Richard Hensley</strong> apparently thinks a similar way. <strong>Karl Scotland</strong> shared another of Mike&#8217;s suggestions: limit dots in progress. Put dots on the cards every day they&#8217;re in progress and you&#8217;ll be able to see the flow very clearly.</p>
<p><strong>Karl Scotland and Larry Maccherone:</strong> Our data is really dirty. If you start using 2-sigma thresholds to make SLAs, you&#8217;ll probably get stung. It doesn&#8217;t follow a normal distribution, in part because developers simply don&#8217;t update the statuses on time &#8211; they&#8217;re too busy doing the work! Outliers are also interesting. Rally has some neat tools to show you where your percentiles really are, but they&#8217;re in competition with Lean Kit&#8217;s lounge with its hot dogs and ice-cream. Lean Kit definitely win the prize for brand awareness this trip.</p>
<p><strong>Yochai Benkler:</strong> This was the most mind-blowing talk for me. It turns out that our desire to collaborate is <em>partly genetic</em>, and only prevalent in 60-70% of the population. The industrialised world is slowly moving towards models in which we *do* collaborate &#8211; it does actually form part of our evolution, and making collaboration the norm can help &#8211; but our innate desire to collaborate can easily be disrupted by extrinsic rewards and punishment for failure to collaborate, amongst other things. Motivating people to collaborate is way more complex than we thought.</p>
<p>This is only part of the learning I take away from LSSC 2012. Already signed up for LSSC 2013 &#8211; hope to see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/05/17/lssc-2012/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Upcoming engagements</title>
		<link>http://lizkeogh.com/2012/05/09/upcoming-engagements/</link>
		<comments>http://lizkeogh.com/2012/05/09/upcoming-engagements/#comments</comments>
		<pubDate>Wed, 09 May 2012 11:23:32 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[coaching]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=845</guid>
		<description><![CDATA[There are a few exciting speaking and training engagements coming up, many of them UK based!
First off, two tutorials:
I&#8217;m running my first Deliberate Discovery, Cynefin and Real Options tutorial at Skills Matter on 29th May. These three ways of thinking and modelling software development and the world in general have really helped me, and I&#8217;d [...]]]></description>
			<content:encoded><![CDATA[<p>There are a few exciting speaking and training engagements coming up, many of them UK based!</p>
<p><strong>First off, two tutorials:</strong></p>
<p>I&#8217;m running my first <a href="http://skillsmatter.com/podcast/open-source-dot-net/tutorial-to-be-confirmed">Deliberate Discovery, Cynefin and Real Options tutorial</a> at Skills Matter on 29th May. These three ways of thinking and modelling software development and the world in general have really helped me, and I&#8217;d like to pass the techniques on. Highly workshop-driven and not at all technical.</p>
<p>At the end of September I&#8217;ll be running my 1-day BDD tutorial as part of <a href="http://www.agilecambridge.net/ac2012/index.php">Agile Cambridge</a>. This is the <em>only BDD tutorial</em> I&#8217;ll be running this year, so if you&#8217;re interested, get in there now! <a href="http://dannorth.net">Dan North</a> (my mentor in all things BDD and Agile) and <a href="http://cognitive-edge.com/blog/author/19/">David Snowden</a> (Complexity Thinking and Cynefin guru) are keynote speakers, so it promises to be an excellent conference!</p>
<p><strong>I&#8217;ll also be speaking and running workshops through the year:</strong></p>
<p>The <a href="http://www.next-generation-testing.com/">Next Generation Testing Conference</a> organised by Unicom is on the 23rd. I&#8217;ll be on the panel talking about Agile, and particularly ranting about our obsession with granularity and our need for certainty even where it doesn&#8217;t really exist.</p>
<p>I&#8217;m going to be talking about Real Options at <a href="http://www.meetup.com/DevTank/">Dev Tank in London on the 29th</a>, after the Progressive .NET Tutorials. It shouldn&#8217;t be a long talk, so lots of opportunity to catch up with your fellow devs over a beer. More details to follow &#8211; watch the space!</p>
<p>On June 7th, I&#8217;ll be giving an overview of BDD, how to do it well and why it works at <a href="http://agile-east-anglia-bdd.eventbrite.com/">Agile East Anglia</a>. If you&#8217;ve been out of the loop on BDD, this is a great chance to get into it, and I&#8217;ll be answering any questions you have too. I think there may be just one ticket left&#8230;</p>
<p>In August I&#8217;ll be at <a href="http://agile2012.agilealliance.org/">Agile 2012</a> in Dallas, running &#8220;Turning and turning in the Widening Gyre&#8221;, a workshop on complexity and deliberate discovery, and &#8220;BDD: Look, no Frameworks!&#8221; on how to do BDD using custom DSLs instead of BDD tools, while keeping steps maintainable and readable.</p>
<p>On 21st &#8211; 22nd September I&#8217;m honoured to be one of the keynote speakers at <a href="http://www.leanagilescotland.com/">Lean Agile Scotland</a>. Topic still to be decided, but it&#8217;s going to be related to people and the inside of our heads; one of my favourite minefields.</p>
<p>I&#8217;m also speaking at <a href="http://gotocon.com/aarhus-2012/">GOTO</a> this year (October 1st to 3rd, Aarhus, Denmark). In my talk, &#8220;To be honest&#8230;&#8221; I&#8217;ll be looking at why honesty is so important and yet so hard to do.</p>
<p>In the meantime, I have some days free for in-house training or coaching. Please get in touch now, before the rest of the year gets this busy too!</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/05/09/upcoming-engagements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Commitment &#8211; a novel about managing project risk</title>
		<link>http://lizkeogh.com/2012/03/31/commitment-a-novel-about-managing-project-risk/</link>
		<comments>http://lizkeogh.com/2012/03/31/commitment-a-novel-about-managing-project-risk/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 13:31:31 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[business value]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[stories]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=837</guid>
		<description><![CDATA[If you&#8217;ve heard me speak at any conferences or read my blog over the last few years, you&#8217;ll know that I&#8217;m really, really into Real Options.
I&#8217;m half-tempted to get &#8220;Options have value. Options expire,&#8221; added to my tattoo. The principles which Chris Matts and Olav Maassen champion have become such guiding forces in my life [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve heard me speak at any conferences or read my blog over the last few years, you&#8217;ll know that I&#8217;m really, <em>really</em> into Real Options.</p>
<p>I&#8217;m half-tempted to get &#8220;Options have value. Options expire,&#8221; added to my tattoo. The principles which Chris Matts and Olav Maassen champion have become such guiding forces in my life that many of the decisions I make are only done in order to increase the number of options available to me. Once the whole innate phobia of uncertainty is out of the way, it&#8217;s a fantastic way to live life in freedom and with fun.</p>
<p>Real Options are also a phenomenal model for managing risk on software project &#8211; and not the only brilliant idea that Chris and Olav have!</p>
<p>So imagine my absolute joy when I saw <a href="http://www.sponsume.com/project/commitment-novel-managing-project-risk ">this in the works</a> &#8211; a graphical novel, fun and easy to read and understand, dealing with all kinds of ideas around risk management. The skiing story at the end of the first chapter (downloadable from the link) is the same one that Chris shared with me to help me understand his ideas.</p>
<p>Chris and Olav describe it as &#8220;a business graphic novel on managing risk. The book is a culmination of their collaboration on the real options model over the last six years. It provides examples of how to manage a project using the real options model and outlines a simple technique for making better (informed) decisions. It also covers more advanced topics such as information arrival process, game theory, feature injection, paradox of choice and how to deal with uncertainty. While geared towards project managers, the book benefits anyone making decisions in their job or daily life. Chris and Olav focus on making risk management easily understandable as everybody does this every day without being aware of it. &#8221;</p>
<p>I am very confident that this book is going to be ground-breaking. I am so confident that I&#8217;ve already laid out £500 of hard-earned cash for a chance to star in the book (sorry, that option has expired). I don&#8217;t regard this as charity. This is me doing something small to pay Chris and Olav back for their guidance and help over the last few years, and it&#8217;s money they&#8217;ve helped me earn anyway. Estimated publishing date is Winter 2012&#8230; assuming they manage to raise the funds to kick it off.</p>
<p>If you would like to help these two fantastic people get this novel out of the door and benefit from the same help they&#8217;ve given me, please <a href="http://www.sponsume.com/project/commitment-novel-managing-project-risk">go to the Sponsume site</a> before April 14th and pick an option. You never know &#8211; you could be the proud owner of a limited edition of a book that turns out to be as ground-breaking as <a href="http://www.amazon.com/The-Goal-Process-Ongoing-Improvement/dp/0884271781/">&#8220;The Goal&#8221;</a>*.</p>
<div style="font-size:x-small">*What do you mean, you haven&#8217;t read it? Go. Buy it. Now! It&#8217;s already out and will give you something to read in the meantime while you&#8217;re waiting for &#8220;Commitment&#8221;.</div>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/03/31/commitment-a-novel-about-managing-project-risk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cynefin for Devs</title>
		<link>http://lizkeogh.com/2012/03/11/cynefin-for-devs/</link>
		<comments>http://lizkeogh.com/2012/03/11/cynefin-for-devs/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 11:25:11 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[complexity]]></category>
		<category><![CDATA[metathinking]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=815</guid>
		<description><![CDATA[Every now and then, someone comes up with a new way of looking at the world that becomes the next fashionable thing to do. Every time I&#8217;ve seen this, there&#8217;s usually a space of time in which a lot of people say, &#8220;Meh, it&#8217;s irrelevant&#8221;, or &#8220;Meh, consultants&#8221;, or &#8220;Meh, they&#8217;re only in it for [...]]]></description>
			<content:encoded><![CDATA[<p>Every now and then, someone comes up with a new way of looking at the world that becomes the next fashionable thing to do. Every time I&#8217;ve seen this, there&#8217;s usually a space of time in which a lot of people say, &#8220;Meh, it&#8217;s irrelevant&#8221;, or &#8220;Meh, consultants&#8221;, or &#8220;Meh, they&#8217;re only in it for the money.&#8221; After a while, things settle down and everyone is used to that new model or concept, and it&#8217;s no longer seen as edgy or strange. I&#8217;ve seen it with Agile, and Lean Software Development, and BDD, and now it&#8217;s the turn of <a href="http://en.wikipedia.org/wiki/Cynefin">Cynefin </a>and Complexity Thinking.</p>
<p>I&#8217;d like to shortcut some of that with Cynefin, because I think it&#8217;s kind of cool, I&#8217;ve found it useful, and it&#8217;s not actually that hard to get your head around once you make the small mindshift. I&#8217;m going to share a bit about what I know of it, then talk about how it might actually be a useful concept for a dev to have in their head.</p>
<p>Some of us went to the Calm Alpha meet up, created a list afterwards, and have been using it to discuss which kinds of software can be categorised by which domains. I think our need to categorise everything is part of the problem, but I haven&#8217;t worked out how to solve it yet. In this post, I&#8217;ll be categorising things according the Cynefin definition of the terms, so resist the urge to say, &#8220;No! What I&#8217;m doing is simple!&#8221; or &#8220;But it&#8217;s complicated!&#8221; because Dave Snowden, who created the Cynefin model, uses those terms in a slightly different way to our common usage.</p>
<p>So here&#8217;s Dave&#8217;s Cynefin model.</p>
<p><img src="http://upload.wikimedia.org/wikipedia/commons/4/45/Cynefin_framework_Feb_2011.jpeg" width="40%" height="40%" alt="The Cynefin model - Simple (sense, categorize, respond), Complicated (sense, analyze, respond), Complex (probe, sense, respond), Chaotic (act, sense, respond) with Disorder in the middle" /></p>
<p style="font-size:x-small">Dave Snowden, released under <a href="http://creativecommons.org/licenses/by/3.0/deed.en">CC BY 3.0</a> &#8211; thank you!</p>
<p>The Cynefin model consists of four domains &#8211; simple, complicated, complex and chaotic &#8211; with disorder in the middle. The edges of the domains aren&#8217;t strict &#8211; they&#8217;re domains, not quadrants. There&#8217;s also a little fold beneath the &#8220;simple&#8221; to &#8220;chaotic&#8221; boundary, to show how easily simplicity can tip into chaos. If you&#8217;re going to use this for a lot of items, it might be worth using the domains as attractors, rather than categories. Put the items down on a table, then work out where the lines go afterwards. If you can get your head round that, you&#8217;re already on your way to understanding complexity thinking.</p>
<p>Here&#8217;s how I tell what kind of programming I&#8217;m doing.</p>
<h4>Simple</h4>
<p>Everyone can work out how to do this. Like, <em>everyone</em>. The example the <a href="http://www.cognitive-edge.com/">CE guys</a> used was a bicycle chain falling off. It&#8217;s easy to work out how to get it back on again. If you&#8217;re programming, I imagine stuff like the turtle at the science museum, or Lego Mindstorms with its graphical drag-and-drop interface, might fall into this space. Children and non-programmers can do it.</p>
<p>In a simple environment, you sense, categorize and respond. You say, &#8220;Oh, it&#8217;s one of <em>those</em> problems.&#8221; No analysis is required.</p>
<h4>Complicated</h4>
<p>Complicated stuff is predictable, but requires expertise to understand. A watch is complicated. If you&#8217;re programming, complicated stuff will be well-understood, done before, not going to change as you develop it. Writing yet another CRUD form probably falls into this space.</p>
<p>In a complicated environment, you sense, analyze and respond. You say, &#8220;Let me have a look at this problem and I&#8217;ll tell you how to solve it, because I&#8217;m an expert at this.&#8221;</p>
<p>(I have a theory that most devs get really bored by doing the same predictable but complicated thing over and over again. We tend to turn it into open-source or automate it, reducing it to the far smaller but more complex problem of how to do the automation or use the open-source. Devs are drawn to complexity like moths to a bonfire. And we make it when we don&#8217;t have it&#8230;)</p>
<p>I reckon that if everything in software development was merely simple or complicated, Waterfall would work very well. You&#8217;d be able to set out to achieve some goal, work out how to do it, achieve the goal and say, &#8220;Job done.&#8221; Software doesn&#8217;t consist of only simple and complicated stuff, though. So let&#8217;s have a look at the other two domains.</p>
<h4>Complex</h4>
<p>My favourite way to understand complexity is that acting in the space causes the space to change, and cause and effect can only be understood in retrospect.</p>
<p>When you start writing tests, or having discussions, and the requirements begin changing underneath you because of what you discover as a result, that&#8217;s complex. You can look back at what you end up with and understand that it&#8217;s much better, but you can&#8217;t come up with it to start with, nor can you define what &#8220;better&#8221; will look like and try to reach it. It emerges as you work.</p>
<p>In a complex environment, you probe, sense and respond. You do something that can fail, safely, and it tells you things about the environment which you respond to, changing the environment . This is the land of high-feedback, risk and innovation: generally stuff you&#8217;ve never done before, anything that the business are unsure about, new technologies, etc. This is the domain in which Agile techniques really flourish. If you have a look at Cynefin&#8217;s pyramids, this is the one with very loose leadership and the people at the bottom all connected together, collaborating to solve a problem.</p>
<p>This is the most interesting domain for me. It&#8217;s the reason why we do things like BDD &#8211; using examples to discover more about what we&#8217;re doing &#8211; but it&#8217;s also the reason why, if we focus on trying to pin every small requirement down, we fail.</p>
<h4>Chaotic</h4>
<p>Chaos is your house catching fire. Chaos is accident and emergency. Chaos is that bug you released to production that brought your site down on the day of release, and you need to drop <em>everything</em> and fix it <em>now</em>.</p>
<p>In chaos, you act. You get out of the house. You stem the bleeding. You do <em>something</em> to get the situation under better control. When Egor Homakov hacked Github this week, Github responded by suspending his account immediately. They acted on the threat. After that they analyzed his actions, considered what he had done and reinstated his account. Act, sense, respond.</p>
<h4>So why should I care as a dev?</h4>
<p>I&#8217;ve found this model really useful for understanding why certain ways of approaching software work best in certain situations, and fail at other times.</p>
<p>The biggest failures I&#8217;ve seen have come from treating complex problems as if they&#8217;re complicated. For instance, a common Agile practice is to divide a problem into small chunks that we call &#8220;stories&#8221;, then start working on them. That&#8217;s actually a good way to work when most of the problem is complicated, but if you&#8217;re doing something new then you may want to go down the &#8220;probe, sense, respond&#8221; route instead. Hack something out, and get feedback on it. There&#8217;s no point guessing <em>how</em> you&#8217;re going to reach the goal, because as soon as you get feedback, there&#8217;s a good chance the goal itself will change.</p>
<p>Also, sensemaking is itself a complex thing. By trying to get feedback, you might find out how easy or hard it is just to get feedback. That could change the way in which you engage with the business. It might affect how much time you put into preparing for a planning meeting, whether you make a feature work fully or just fire off a screenshot, etc. As you seek to get that feedback the business will change the way in which they respond, too, so it might become easier or harder, and you need to be watching for those signs so you can help to change the process to match. As a dev, you&#8217;ll be the one feeling the frustration or ease from the process. It&#8217;s no good just relying on your coach or Scrum Master to help you, because he or she needs your insight too.</p>
<p>Knowing this model helps me know when to do TDD or automate BDD &#8211; defining a well-understood outcome, and working creatively with the software to reach it &#8211; and when to just use examples as ways of discovering more about what we&#8217;re trying to do. If I can clearly articulate the outcome and everyone agrees on it, then probably it&#8217;s good for TDD and BDD automation. Otherwise, having conversations is more important than automation, whether it&#8217;s with a pair-programmer at a class level or a business spokesperson or tester at a system level. Being able to tell the difference can help ensure that the conversations are the most interesting and effective conversations we can have. If I spot the conversations becoming boring, with people yawning or drifting off, then I know we&#8217;re trying to apply a complex method to a complicated or simple space and I can say, &#8220;Okay, I think we understand this well enough,&#8221; and work on something different instead.</p>
<p>(Also, knowing that the act of sensemaking is complex itself makes me look out for situations in which we&#8217;re misapplying methods.)</p>
<p>When chaos erupts, I know that letting my PM order us about for a bit is OK. Dropping everything we&#8217;re doing is also OK &#8211; forget the whole &#8220;developers need to be left alone to do their work&#8221; idea that the Scrum timebox normally provides. We fix the bug, hack the workaround, take the feature down, do whatever we need to do to get things under control. Chaos almost matches the &#8220;expedite&#8221; class of service in Kanban, except that I think you probably don&#8217;t even bother putting a card on the board until the need to expedite is over. After the emergency is over, we can look at whether it was just a one-off or whether there&#8217;s something we need to do to avoid happening again. For instance, being able to roll back a deployment cleanly and quickly gives us the ability to <em>probe</em> a release instead of crossing our fingers, moving something that might become chaotic into a complex space instead.</p>
<p>These are the kind of decisions that we make intuitively anyway, as developers, but human intuition is often flawed. We&#8217;re often uncomfortable with uncertainty, so we usually try to define outcomes regardless of whether they can be clearly defined or not. We&#8217;re <em>definitely</em> uncomfortable with chaos, and often make the mistake of treating a one-off chaotic incident as systemic, stamping controls over everything when what we really need is a way of probing, or trying things out safely. Having this model in my head has really helped me to become more comfortable with those situations, and to find approaches that fit them much better. Of course, this is <em>massively</em> useful when I&#8217;m coaching and acting as a change agent or helping a PM work out how to lead a team &#8211; but even as a dev, having this model makes a big difference to me and my day-to-day work.</p>
<p>I hope it will help you too.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/03/11/cynefin-for-devs/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>The Myth of &#8220;What&#8221; and &#8220;How&#8221;</title>
		<link>http://lizkeogh.com/2012/03/05/the-myth-of-what-and-how/</link>
		<comments>http://lizkeogh.com/2012/03/05/the-myth-of-what-and-how/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 21:19:30 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[bdd]]></category>
		<category><![CDATA[business value]]></category>
		<category><![CDATA[stories]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=754</guid>
		<description><![CDATA[I often hear things like, &#8220;Tell the team what to build, but don&#8217;t tell them how to build it.&#8221;
Or, &#8220;A feature is what you&#8217;re building. A story is how you&#8217;re going to build it.&#8221;
Or, &#8220;When you&#8217;re doing TDD, don&#8217;t worry about the internals of the class. The API is what it does. The internals are [...]]]></description>
			<content:encoded><![CDATA[<p>I often hear things like, &#8220;Tell the team what to build, but don&#8217;t tell them how to build it.&#8221;</p>
<p>Or, &#8220;A feature is what you&#8217;re building. A story is how you&#8217;re going to build it.&#8221;</p>
<p>Or, &#8220;When you&#8217;re doing TDD, don&#8217;t worry about the internals of the class. The API is what it does. The internals are how it does it.&#8221;</p>
<p>Here&#8217;s the thing. When we write code, that&#8217;s how we&#8217;re creating a story or a feature. It&#8217;s also how we&#8217;re implementing the architecture. It&#8217;s how we&#8217;re managing security and providing an audit trail and doing a bunch of other stuff.</p>
<p>And that&#8217;s how we&#8217;re selling more goods. And how we&#8217;re keeping things maintainable for the future. And how we&#8217;re preventing data theft. And how we&#8217;re correcting our mistakes.</p>
<p>And that&#8217;s how we&#8217;re staying in business. And how we&#8217;ll be able to react in the future. And how we&#8217;re able to sleep at night. And how we learn.</p>
<ul>
<li>The code is how we deliver a story.</li>
<li>The story is how we deliver a feature.</li>
<li>The feature is how we give the users the capability to do something.</li>
<li>The users&#8217; capabilities are how they deliver a business goal.</li>
<li>The business goals are how stakeholders implement a vision.</li>
<li>The vision is an idea of how to make money, save money or protect revenue.</li>
<li>And we could keep going if we wanted to&#8230;</li>
</ul>
<p>Every goal, no matter how big or small, is the <em>how</em> for someone&#8217;s <em>what</em>. (The <em>how</em> and the <em>what</em> may come from the same person, but the interesting stuff happens when they&#8217;re different people. Or behave like they are.)</p>
<p>If only life worked by being able to divide a bigger <em>what</em> up into smaller pieces and manage them appropriately, then it would all be fine! Unfortunately the code has to work <em>with other code</em> to deliver its value. The features have to work <em>with other features</em>. The system has to work with other systems, users have to work with other users and the goals of one stakeholder have to align with the goals of another.</p>
<p>This is why we have root cause analysis and the &#8220;5 Whys&#8221; &#8211; because when we can see the higher-level goals and deeper-rooted problems, we can understand better how our own actions fit into them, and what they deliver &#8211; for better or worse. This is also true for other domains than software.</p>
<p>It doesn&#8217;t really matter much whether we call them features, stories or tasks, as long we appreciate that they&#8217;re <em>how</em> we&#8217;re delivering to those higher-level <em>whats</em>, and we have a pretty good understanding of the <em>whats</em> and how to test that we&#8217;ve achieved them, even (especially!) if the <em>what</em> is a learning or exploratory goal.</p>
<p>Of course, we&#8217;ll get the <em>how</em> wrong occasionally and fail to deliver the <em>what</em>. But that&#8217;s what feedback, in its many forms, is for.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/03/05/the-myth-of-what-and-how/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BDD Tutorial Slides are up</title>
		<link>http://lizkeogh.com/2012/02/26/bdd-tutorial-slides-are-up/</link>
		<comments>http://lizkeogh.com/2012/02/26/bdd-tutorial-slides-are-up/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 13:22:24 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[uncategorized]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=802</guid>
		<description><![CDATA[I&#8217;ve been meaning to do this for a while. I have released my BDD Tutorial slides on SlideShare.
There are notes underneath each slide which are a cut-down version of the kind of things I talk about. I&#8217;ve even left the exercises in, with a description of what I do in each.
I am releasing these under [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been meaning to do this for a while. I have <a href="http://www.slideshare.net/lunivore/behavior-driven-development-11754474">released my BDD Tutorial slides on SlideShare</a>.</p>
<p>There are notes underneath each slide which are a cut-down version of the kind of things I talk about. I&#8217;ve even left the exercises in, with a description of what I do in each.</p>
<p>I am releasing these under my usual favourite licence &#8211; <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons share-alike</a>. That means that as long as you attribute me, and are similarly generous with any derived work you make, you can use the slides commercially and base your own work on them.</p>
<p>Yes, that means that if you want to, and you feel qualified to do so, you can use the slides, run the course and get paid for it. If you don&#8217;t feel qualified, feel free to experiment. Just please give a nod my way when you do!</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/02/26/bdd-tutorial-slides-are-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s about the examples you can&#8217;t find, not the ones you can</title>
		<link>http://lizkeogh.com/2012/02/20/its-about-the-examples-you-cant-find-not-the-ones-you-can/</link>
		<comments>http://lizkeogh.com/2012/02/20/its-about-the-examples-you-cant-find-not-the-ones-you-can/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 17:50:22 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[bdd]]></category>
		<category><![CDATA[breaking models]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=795</guid>
		<description><![CDATA[A long time ago, I was toying with the idea of starting my test methods with &#8220;will&#8221;, instead of &#8220;should&#8221;.
Dan explained to me, &#8220;If you start with the word &#8216;will&#8217;, you&#8217;re already making the assumption that you understand what you&#8217;re doing. Using &#8217;should&#8217; allows you to question whether you understand or not.&#8221;
For me, that was [...]]]></description>
			<content:encoded><![CDATA[<p>A long time ago, I was <a href="http://lizkeogh.com/2005/03/09/six-ugly-words/">toying with the idea</a> of starting my test methods with &#8220;will&#8221;, instead of &#8220;should&#8221;.</p>
<p><a href="http://dannorth.net">Dan</a> explained to me, &#8220;If you start with the word &#8216;will&#8217;, you&#8217;re already making the assumption that you understand what you&#8217;re doing. Using &#8217;should&#8217; allows you to question whether you understand or not.&#8221;</p>
<p>For me, that was the moment that I suddenly <em>got it</em>. BDD and TDD aren&#8217;t actually about making sure that something works well. They&#8217;re about uncovering the parts you don&#8217;t understand; the parts that are hard, and the gaps. <a href="http://dannorth.net/2010/08/30/introducing-deliberate-discovery/">Dan&#8217;s post introducing &#8220;Deliberate Discovery&#8221;</a> takes this idea even further, but it started here: replacing the word &#8220;test&#8221; with the word &#8220;should&#8221;.</p>
<p>This is why I find it more useful to look for the gaps in the examples; scenarios we haven&#8217;t thought of, or don&#8217;t know what to do. Chris Matts calls this, &#8220;Breaking the model&#8221;. Often whatever we do here is wrong, so we need to write down our suggestions and then get feedback on them.</p>
<p>If you do anything which starts suggesting to people that these examples are correct and complete &#8211; like, for instance, automating them or referring to them as &#8220;specifications&#8221; &#8211; then you may find yourself running into trouble. Automation is a commitment, specification can be seen as one, and we know by now that <a href="http://www.infoq.com/articles/real-options-enhance-agility">we never commit early unless we know why</a>.</p>
<p>You might also want to keep a small record of the looser requirements or behaviour that spawned the examples &#8211; for instance, as blurb in a scenario or as a method name &#8211; just so that you can give yourself a chance of spotting those gaps later. You won&#8217;t always get it right first time, and that should be OK.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/02/20/its-about-the-examples-you-cant-find-not-the-ones-you-can/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CALMalpha &#8211; the second request</title>
		<link>http://lizkeogh.com/2012/02/19/calmalpha-the-second-request/</link>
		<comments>http://lizkeogh.com/2012/02/19/calmalpha-the-second-request/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 00:36:20 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[conference]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=784</guid>
		<description><![CDATA[CALMalpha was meant to be a mash-up between the Lean, Agile and Cynefin / Complexity Theory practitioners.
The outcome of the unconference wasn&#8217;t really stated. When you understand that a complex domain is one in which the cause of an outcome can&#8217;t be perceived except in retrospect, this might make more sense. The only thing we [...]]]></description>
			<content:encoded><![CDATA[<p>CALMalpha was meant to be a mash-up between the Lean, Agile and Cynefin / Complexity Theory practitioners.</p>
<p>The outcome of the unconference wasn&#8217;t really stated. When you understand that a complex domain is one in which the cause of an outcome can&#8217;t be perceived except in retrospect, this might make more sense. The only thing we were trying to do was see if there was a way of using complexity theory to help inform our practices, and if there were some practices from Agile and Lean that complexity theorists might find interesting &#8211; a mash-up!</p>
<p>There&#8217;s one problem with this.</p>
<p>Currently, the best-known leadership of Complexity Theory revolves around the company <a href="http://www.cognitive-edge.com/">Cognitive Edge</a>. These guys have <a href="http://www.cognitive-edge.com/method.php">some amazing methods</a> for making sense of domains, spotting complex problems and providing data which calls out &#8220;weak signals&#8221; that might otherwise be lost. I paid good money and took time off work for the course last year, and it was worth every penny. For the non-initiated and tl;dr, imagine five new types of retrospective, a method for reducing planning meetings to five minutes, and six different ways of making the output from them heard, and you&#8217;ll get a vague idea of the impact and scope. Oh, and they&#8217;ve got software for running the retro across <em>countries</em>.</p>
<p>Except&#8230;</p>
<p>I can&#8217;t currently use the methods they taught me, not as a professional coach. The methods are open-sourced, but released under <a href="http://www.cognitive-edge.com/wiki/index.php/Main_Page#IP">a non-commercial, non-derivative Creative Commons license</a>.</p>
<p>Cognitive Edge, your Wiki says (emphasis mine):</p>
<blockquote><p>The Cognitive Edge wiki exists to provide a collaborative space for <em>accredited members</em> of the Cognitive Edge Network. All accredited practitioners should feel welcome to contribute to the ideas and concepts in these pages.</p></blockquote>
<p>The licence prevents me from using your methods as a professional coach:</p>
<blockquote><p><a href="http://creativecommons.org/licenses/by-nc-nd/2.0/">You may not use this work for commercial purposes.</a></p></blockquote>
<p>The licence also prevents non-accredited people, which is most of our communities and a lot of CALMalpha attendees, from creating their own ideas:</p>
<blockquote><p><a href="http://creativecommons.org/licenses/by-nc-nd/2.0/">You may not alter, transform, or build upon this work.</a></p></blockquote>
<p>While <em>I</em> might be able to build on your work, I&#8217;m unwilling to do so as long as my efforts fall under this licence. I also can&#8217;t pass on anything to the people I work with for their contribution.</p>
<p>Can you see how this doesn&#8217;t mesh with the idea of a &#8220;mash-up&#8221;, and goes completely against your ideas around multiplying perspectives?</p>
<p>So here&#8217;s my request.</p>
<h3>Cognitive Edge, please, please open your licence up for commercial and derivative work.</h3>
<p>The stuff you do is amazing. If you were working solely for the money, you wouldn&#8217;t have come up with these ideas. I can only assume that you, like us, are trying to make the world a better place. We will continue to attribute the methods to you and talk about how amazing they are. Those of us who&#8217;ve seen it will continue to point people towards your SenseMaker software (which is ground-breaking, world-changing, worth paying for the 1-day demo, and deserves the more rigorous patent applied to it &#8211; I look forward to the day when it&#8217;s a bit cheaper!)</p>
<p>As it stands, we can&#8217;t do anything useful with your methods. Worse, because you&#8217;re working in a space full of narratives and I&#8217;m working in a space full of very similar examples, I have to be very careful that my work &#8211; released on my blog under CC, non-commercial, non-derivative &#8211; is actually based on other sources (mostly <a href="http://dannorth.net">Dan North</a> and <a href="http://theitriskmanager.wordpress.com/">Chris Matts</a>) and not on yours.</p>
<p>Please. Be generous. Reach out to your contributors, ask them, and release what you can.</p>
<p>Sometimes it&#8217;s worth doing something you can&#8217;t go back from.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/02/19/calmalpha-the-second-request/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>CALMalpha &#8211; the first request</title>
		<link>http://lizkeogh.com/2012/02/18/calmalpha-the-first-request/</link>
		<comments>http://lizkeogh.com/2012/02/18/calmalpha-the-first-request/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 23:54:11 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=778</guid>
		<description><![CDATA[I came away from CALMalpha with a profound sense of depression.
Our industry is in an awful state. A really awful state. It took me a day and a half to recognize one of the problems. There&#8217;s a prevailing sentiment that I keep hearing that, &#8220;If only we provide the right bucket for them to deliver [...]]]></description>
			<content:encoded><![CDATA[<p>I came away from CALMalpha with a profound sense of depression.</p>
<p>Our industry is in an awful state. A really awful state. It took me a day and a half to recognize one of the problems. There&#8217;s a prevailing sentiment that I keep hearing that, &#8220;If only we provide the right bucket for them to deliver in, teams will deliver.&#8221;</p>
<p>You know what? This <em>isn&#8217;t true</em>.</p>
<p>Of the many developers I&#8217;ve worked with over the years, I&#8217;ve been lucky enough to work with the best. These are the developers who can code well, work in teams, learn quickly and respect and learn from differing opinions.</p>
<p>I shouldn&#8217;t have to be <em>lucky</em> to work in teams like this. Engineers don&#8217;t get away with it. Architects, pilots, restaurant staff and <em>dustbin men</em> don&#8217;t get away with it*. We have such a low barrier to entry in this industry, it hurts. <em>I</em> shouldn&#8217;t have gotten away with it for as long as I did!</p>
<p>While I was at the conference, a gentleman linked to one of my blog posts about Scrum and Kanban, <a href="http://iainhunter.wordpress.com/2012/02/16/agile-manifesto-the-first-amendment/">calling it &#8220;pontificating rubbish&#8221;</a>. I wrote it mostly because I was already fed up of the fighting between the two communities: there&#8217;s more similarity than difference. This gentleman said, &#8220;Can we just ship some software already?&#8221; Iain, I need to thank you. Your comments must have stuck with me, because by the second day I found myself thinking, &#8220;He&#8217;s right.&#8221;</p>
<p>One of the things we strive for in Agile and Lean is a high-trust environment; one in which the business give us the space and time that we need to deliver the things that they really want. As an industry, though, we don&#8217;t have that trust, because <em>we haven&#8217;t deserved it</em>. Even Agile and Lean haven&#8217;t solved the problem. Even Agile and Lean don&#8217;t ship on time, and even Scrum projects occasionally wait until the last moment to tell people it&#8217;s going to be late (and yes, I know this isn&#8217;t how you ought to run a Scrum project). So here&#8217;s the first problem:</p>
<p>Many of the developers I&#8217;ve interviewed over the last decade can&#8217;t communicate. They can&#8217;t code, even when they&#8217;ve been told that it&#8217;s part of the interview. I had one dev provide a code sample that they were completely unable to work with &#8211; I&#8217;m guessing a friend wrote it. I&#8217;ve had samples submitted which were ripped off of the internet. I&#8217;ve worked &#8220;with&#8221; devs who were sidelined onto useless projects, deleted afterwards, because they were no good at coding and too nervous to help. No wonder, as an industry, we can&#8217;t ship. No wonder those of us who spend our time at conferences and self-improvement workshops are befuddled as to why. The faculty at CALMalpha talked about how crews work, and the training they undergo. We don&#8217;t do that.</p>
<p>One of the things that David Snowden taught us is to aim for fail-safe probes &#8211; a thing that we try, in order to make a change, which might fail and which is safe to do so. He also taught us not to attack the problem directly. I&#8217;m not sure that this is even a complex problem, but the fact that it hasn&#8217;t been solved yet suggests it might be. So rather than saying, &#8220;Just ship it already!&#8221;, here&#8217;s what I suggest (and please, if you have an understanding of complexity theory and can see some stuff that might <em>not</em> be safe to fail, let us know quickly &#8211; I&#8217;m new at this).</p>
<h3>Get devs to code in the interviews.</h3>
<p>Do it, and spread your success stories. I&#8217;ve not yet found a company who&#8217;s done this and stopped. Code with them &#8211; pair on some silly, simple problem &#8211; and you&#8217;ll also find out what they&#8217;re like to work with, and whether they&#8217;re able to learn and talk to you.</p>
<p>The idea is not necessarily to filter the developers. If this happens industry-wide, we&#8217;ll quickly run out of devs who can code, and something else will happen. Perhaps a lot of them will be able to learn quickly, and you may find after some time that you&#8217;re frustrated looking for the ones who can code and you&#8217;ll settle for the ones who can learn. Or maybe the universities will up their game. Perhaps it will become accepted practice that developers spend time learning, and companies will give them more space.</p>
<p>If this fails, and we find that we can&#8217;t get people to code in the interview, we&#8217;ll be no worse off than we were and we might find out something more about the problem.</p>
<h3>*Dear Dustbin Men</h3>
<p>Without you life would very quickly grind to a messy and disease-ridden halt. You are my heroes. You do the job that I do least want to be doing, for a lot less pay than I&#8217;d do it for. This is why I&#8217;ve picked on you &#8211; not because I think you&#8217;re low on the list of people who need to work as a team, but because your job is so stressful in my estimation that I believe you have the right to work in any way you want. That I always see you working together, usually smiling, carting away all our rubbish and doing extra work to make up for Christmas etc., is amazing. Thank you.</p>
<p>(I have never yet seen a Dustbin Woman).</p>
<p>Devs, our job is ranked as <a href="http://www.careercast.com/content/10-least-stressful-jobs-2011-3-software-engineer">really not all that stressful</a>. We do not have the excuse.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/02/18/calmalpha-the-first-request/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>The Real Cost of Change</title>
		<link>http://lizkeogh.com/2012/01/30/the-real-cost-of-change/</link>
		<comments>http://lizkeogh.com/2012/01/30/the-real-cost-of-change/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 12:37:42 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[breaking models]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[learning models]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=760</guid>
		<description><![CDATA[We have a strange desire for control.
I was in a planning meeting with my project manager and several of the devs. &#8220;What happened?&#8221; the project manager said. &#8220;Why did this one story take so long?&#8221;
&#8220;There was some functionality we needed and didn&#8217;t know about,&#8221; I replied. &#8220;We managed to get it in before the deadline, [...]]]></description>
			<content:encoded><![CDATA[<h3>We have a strange desire for control.</h3>
<p>I was in a planning meeting with my project manager and several of the devs. &#8220;What happened?&#8221; the project manager said. &#8220;Why did this one story take so long?&#8221;</p>
<p>&#8220;There was some functionality we needed and didn&#8217;t know about,&#8221; I replied. &#8220;We managed to get it in before the deadline, though.&#8221; The business had been quite happy with that, and they were notoriously hard to please.</p>
<p>&#8220;If they&#8217;re going to change their mind like this,&#8221; the PM replied, &#8220;we&#8217;re going to have to introduce some kind of change control.&#8221;</p>
<p>&#8220;Please don&#8217;t,&#8221; I begged. &#8220;If you do that, the business will spend more time investing in getting things right to start with.&#8221;</p>
<p>&#8220;Exactly.&#8221;</p>
<p>&#8220;But they&#8217;ll still get it wrong. No amount of planning would have spotted that missing piece before we showed it to them! When they get it wrong now, though, they&#8217;ll encounter the change control and they&#8217;ll want to spend even <em>more</em> time getting it right first time. And they&#8217;ll <em>still</em> get it wrong, but now we&#8217;ll have made it more expensive for them to be wrong. We&#8217;ll have a formal process which means it takes even longer for us to find out what&#8217;s missing, by which time us devs will have to work to remember the code and the change will take longer. It will slow us down. So they&#8217;ll see that, and spend even <em>more</em> time trying to get it right, and before you know it they&#8217;ll be planning whole projects up front.&#8221;</p>
<p>We have a word for that. It&#8217;s called <em>Waterfall</em>.</p>
<p><a href="http://imgur.com/PbhfM"><img src="http://i.imgur.com/PbhfM.png" alt="Waterfall's reinforcing feedback loop" width="80%" height="80%" /></a></p>
<p>That desire to control change creates a reinforcing feedback loop, in which the cost of change makes us want to invest up-front, which makes the change expensive later on, which makes us want to invest up-front, and so on.</p>
<p>In this case, it would have been pointless, except as a way of shifting blame and risk back to the analysts (and this was an internal project). The cost of change was quite low; we had clean code with a good suite of tests. It was only the cost of <em>discovery</em>, and the implementation that followed, that was really expensive.</p>
<h3>Don&#8217;t confuse the cost of discovery with the cost of change.</h3>
<p>Discovering something later on only costs more than planning for it if you&#8217;ve made a <em>commitment</em> to something else.</p>
<p>In fact, if you don&#8217;t plan for it, it can cost less. The newly-discovered knowledge will be fresh in everyone&#8217;s minds. Because the ideas haven&#8217;t been known for long, nobody&#8217;s mentally committed to them either, which makes them easier to question and clarify.</p>
<p>This is even more important when there&#8217;s a chance that the analysis might be wrong (and there&#8217;s always that chance; we learnt this from Waterfall). If you plan for something that you later have to revert, you&#8217;ve introduced a cost of change right there. Perhaps the cost is just changing some documents. Perhaps the developers have designed for the plan, and built on top of the thing which needs changing.</p>
<p>But we need to do <em>some</em> planning, right? Otherwise the chances of us being wrong and building on top of the wrong thing are even bigger, and there&#8217;s even more chance that we&#8217;ll have made commitments the wrong way. So how should we plan?</p>
<p>I&#8217;ve got few more guidelines I&#8217;d like to share. Here&#8217;s the first:</p>
<h3>Keep the cost of change low.</h3>
<p>This is more important even than planning, because there&#8217;s <em>always</em> a chance that we&#8217;ll get something wrong.</p>
<p>This is what we&#8217;re aiming for: the ideal, low cost of change on an Agile project.</p>
<p><a href="http://imgur.com/XfR4U"><img src="http://i.imgur.com/XfR4U.png" alt="The wonderfully low cost of change on a very nice Agile project." width="80%" height="80%" /></a></p>
<p>The first thing to notice about this is that the cost of change is <em>not zero</em>. That&#8217;s going to become important in the next section, and it&#8217;s what drives the team&#8217;s desire for change control and starts kicking off that Waterfall loop.</p>
<p>The second thing to notice is that this bears little resemblance to actual, real Agile projects.</p>
<p>On a real Agile project, it&#8217;s likely that we have fluctuating levels of stress, concentration, experience and desire for feedback. All of these &#8211; or lack of them &#8211; will lead us to occasionally write code that is, shall we say, less than ideal.</p>
<p>It takes discipline to write code that&#8217;s easy to change. On a real Agile project, we tend not to do it all the time. Oh, we might <em>say</em> we do, but we don&#8217;t. Not always. And if we do, our team-mates don&#8217;t. The real skill isn&#8217;t in writing clean code &#8211; it&#8217;s in cleaning up the horrible mess we made the week before. And it takes <em>even more discipline</em> to do it afterwards, especially if you&#8217;re under pressure to just hack the next working thing in too.</p>
<p><a href="http://imgur.com/A7vgE"><img src="http://i.imgur.com/A7vgE.png" alt="The real cost of change on an Agile project, showing how we clean up after ourselves." width="80%" height="80%" /></a></p>
<p>If we don&#8217;t clean up and keep that cost of change low, we&#8217;re making a commitment to the wrong thing. The longer that commitment stays in place, the higher the cost of change will become. We&#8217;ll find ourselves on that Waterfall cost of change curve, and the longer we&#8217;re on it, the more expensive it is.</p>
<p>I&#8217;ve found the skill to clean up afterwards is even more important in high-learning projects, where a lot of the technology or domain is new, at least to the team. There&#8217;s no point in writing tests up front for a class when you don&#8217;t even know what&#8217;s possible, or what other frameworks and libraries will do for you, or what the business really want. In those environments, rather than TDD or BDD, teams tend to <em>Spike and Stabilize</em>. The spikes aren&#8217;t really prototypes &#8211; they&#8217;re small pieces of features, often with hard-coded data behind them, designed to get some feedback about techology or requirements. <a href="http://dannorth.net/2011/01/15/on-craftsmanship/">Dan North, who gave me the term,</a> might write more about this later if we ask nicely, but for this post, we can simply bear in mind that the skill to stabilize later &#8211; ensuring that the cost of change is <em>lowered</em> &#8211; is often more important than the skill to keep the cost of change low up-front.</p>
<p>Because we get it wrong too.</p>
<h3>Assume you got it wrong.</h3>
<p>Human beings are hard-wired to try and get things right, and to pretend that they did even when they didn&#8217;t. I love <a href="http://en.wikipedia.org/wiki/List_of_cognitive_biases">this list of cognitive biases on Wikipedia</a>. These are just some of the ways in which we get it wrong and don&#8217;t even notice.</p>
<p>If we assume that we got it wrong, then we start to look for <em>feedback</em>, and quickly. This is difficult for most human beings. We much prefer to get validation than feedback; to be told that we did it right, rather than finding out what we did wrong. Our brain gives us these little kicks of nice chemicals when we learn that we did something right, and it feels much better than the other kind.</p>
<p>If we can remember, though, that we probably got it wrong, our focus will change. Instead of trying to invest in good requirements and nice code, we&#8217;ll try to find out what we got wrong in the things we&#8217;ve already done. Of course, we need to invest in stabilizing what we&#8217;ve done, or the cost of change goes up, and that will make it more expensive later if we find out we were wrong, which is the assumption we were trying to make in the first place&#8230; ah, the paradox!</p>
<p>There&#8217;s a fine balance to be struck between getting quick feedback &#8211; often itself an expensive proposition, given the business of most domain experts &#8211; and getting it right up front. So where does the balance lie?</p>
<h3>Don&#8217;t sweat the petty stuff.</h3>
<p>If it&#8217;s easy to change, don&#8217;t worry about it. Analysts, learn what&#8217;s easy to change. Typos, colours, fonts, labels, sizes, placement on the screen, tab order, an extra field&#8230; these are all usually easy to change, and do not normally need to be specified up-front. Even if you have a particular style you want to see on a page or form, this can usually be abstracted out and changed later &#8211; just let the devs know that you want that consistency at some point.</p>
<p>It&#8217;s more important for us to know the rough shape of what you want to see, and the flow and process of that information. We don&#8217;t want to know every field on an order item. We just want to know that it needs to be sent to the warehouse and stored locally because you&#8217;re going to check the money in the till and count the stock. The fine detail of that is pretty easy to change, so we can get feedback on it later. Getting the fine detail right would definitely be an investment, and we might have got the big picture wrong.</p>
<h3>Deliberately discover things you&#8217;ve never done before.</h3>
<p><a href="http://dannorth.net/2010/08/30/introducing-deliberate-discovery/">Dan North wrote an excellent post on Deliberate Discovery</a>, and I&#8217;ve been using it to manage risk on my projects for a while now. It&#8217;s one of the most important tools in my toolbox, along with Real Options to which it&#8217;s strongly related, so I want to cover how I use it here.</p>
<p>I really like using <a href="http://en.wikipedia.org/wiki/Cynefin">Cynefin</a> to help me work out what to target for discovery. We treat a lot of software as if it&#8217;s <em>complex</em>, and we talk about self-organising teams and high learning environments, but in reality there are huge chunks in most applications which follow well-established rules, have been done a thousand times before and probably have libraries or third-party apps to do the job for you. They&#8217;re not complex. They&#8217;re <em>complicated</em>. They require the application of a bit of expertise, and are likely to be done right and never changed again. User registration and logging in are great examples of this. You don&#8217;t need a big, thick document to describe them. The fine details might change, of course, but we already know not to sweat the petty stuff.</p>
<p>It is <em>OK to plan some aspects of a system as if it&#8217;s Waterfall</em> &#8211; for instance, deciding up-front whether you want to use your own login or let Google authenticate. Even better than requirements documents, and quicker, is to say, &#8220;It&#8217;s user registration. Make it work like Twitter&#8217;s, but we also need the user&#8217;s loyalty card number. We should offer to send them a card if they don&#8217;t have one.&#8221; Dan North calls this pattern &#8220;Ginger Cake&#8221; &#8211; it&#8217;s like a chocolate cake, but with ginger. He <em>even cuts and pastes code</em>. And it&#8217;s OK! Honestly, it is! This code is also absolutely prime for TDDing &#8211; if you actually have to write it yourself, that is, since it&#8217;s been done before so someone&#8217;s probably written something to do it for you already. You can also give this code to junior devs, for whom it&#8217;s new, and guide them in TDDing, making it perfect pair-programming territory. Everything you have ever been told about Agile software development applies particularly in this place.</p>
<p>Fortunately, most applications have a minimum set of requirements that they share with other, similar applications. David Anderson calls these <em>commodities</em> &#8211; table stakes that you have to have just to play the game &#8211; so *most* code in an application will end up going this way.</p>
<p>The places in which we&#8217;re most likely to get it wrong, and need fast feedback, are places where we&#8217;re doing something <em>new</em>. They might be technological, particular to a domain, or just things that the team themselves have never looked at. My favourite book for understanding risk is <a href="http://www.amazon.com/Waltzing-Bears-Managing-Software-Projects/dp/0932633609/">&#8220;Waltzing with Bears&#8221;</a>, which starts the first chapter with, &#8220;If a project has no risks, don&#8217;t do it.&#8221; It&#8217;s these new, risky aspects of the project that differentiate it from others and make it valuable in the first place!</p>
<p>For new and risky aspects of a project, the best thing to do is assume you got it wrong, and work out how quickly you can get feedback on how wrong you are.</p>
<h3>Any new or unknown aspect of a project will need to be changed.</h3>
<p>I was chatting to one of our analysts. &#8220;I can see this feature is in analysis at the moment,&#8221; I said. &#8220;Does that mean it&#8217;s the next thing we want the developers to do?&#8221;</p>
<p>&#8220;Oh, no,&#8221; the analyst said. &#8220;It&#8217;s only there because the analysis is quite complex. It&#8217;s all new stuff, so we&#8217;re having to be careful with it and it&#8217;s taking a bit of time. Once we get the analysis done, the development should be very easy, so we&#8217;ll do it later.&#8221;</p>
<p>&#8220;Oh, the development will be easy, I&#8217;m sure&#8230; but wouldn&#8217;t you like to find out what you did wrong now, rather than later, while it&#8217;s still fresh in your mind?&#8221;</p>
<p>The analyst smiled. The company was very much more used to Waterfall, and the idea that it was OK to get it wrong was something very new.</p>
<p>It&#8217;s OK to get it wrong, as long as you get feedback quickly, while the cost of change is still low. By working out which parts of a project are unknown or new, and targeting those <em>first</em>, we make small investments while the cost of change is still low.</p>
<h3>Keep your options open &#8211; do the risky stuff first and keep tech debt low.</h3>
<p>Anyone who&#8217;s run into me at conferences will know how much I love Real Options, and it&#8217;s really at the heart of the cost of change.</p>
<p>The only reason change costs more is because of the <em>commitment</em> that we already made. Chris Matts describes technical debt as an &#8220;unhedged call option&#8221;. <strong>Edit:</strong> while Chris came up with the metaphor, it was <a href="http://www.higherorderlogic.com/2010/07/bad-code-isnt-technical-debt-its-an-unhedged-call-option/">Steve Freeman</a> who described it. He says, &#8220;You give someone the right to buy Chocolate Santas from you at 30 cents each. That&#8217;s fine, as long as the price of chocolate stays low. As soon as it goes up, you still have to pay to make the Santas, and now you&#8217;re in trouble and your company is going bust, because you didn&#8217;t give yourself the option to get the chocolate somewhere else.&#8221;</p>
<p>Similarly, technical debt is absolutely fine until we&#8217;re called on to act, and act fast. At that point, we&#8217;re in trouble. This is the biggest reason for keeping the cost of change low &#8211; because it gives us the option for change, later. It&#8217;s a frequently-cited reason for replacing legacy projects &#8211; and, bizarrely, often forgotten when the pressure mounts and the business want their replacement app.</p>
<p>This isn&#8217;t helped by <a href="http://dannorth.net/2009/07/01/the-perils-of-estimation/">common practices of estimation and the associated promises</a>, which often lead to that pressure building up in the first place. Rather than making these promises up-front, why not try the risky bits first? I often hard-code data so that I can get feedback on a new UI early, or I spike something out using a new library or framework, or connect to that third-party application just to see what the API is really like to use, or have a chat with the team writing that other system we&#8217;re going to need in June, so I can find out how communicative and receptive to feedback they are. Doing this means that we give ourselves the most time to recover from any unexpected discoveries, and we can worry about the more predictable aspects of a system later.</p>
<p>Once we&#8217;ve got spikes out of the way, adding tests to act as documentation and examples for any legacy code we&#8217;ve created, cleaning it up so it&#8217;s self-commenting, ensuring that architectural and modular components are properly decoupled, etc., all help us to <em>stabilize</em> the code. At the same time, the effort involved in creating stable code is itself an investment. If there&#8217;s a good chance that the code might be wrong, it could be worth getting feedback on <em>that</em> &#8211; knocking up integration tests, showing it to the business, testing it, getting it live &#8211; before it&#8217;s made stable.</p>
<p>That way, the commitment made is small, and the cost of change is low.</p>
<p>Just remember to clean up and keep it that way!</p>
<p><strong>Update:</strong> Dan is currently writing about <em>Spike and Stabilize</em> and <em>Ginger Cake</em> as part of his &#8220;Patterns of Effective Delivery&#8221;. If you&#8217;re interested in finding out more, you might like to watch his <a href="http://vimeo.com/24681032">Roots talk</a> on the topics.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2012/01/30/the-real-cost-of-change/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

