<?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>Mon, 30 Jan 2012 19:27:01 +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>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;. 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>8</slash:comments>
		</item>
		<item>
		<title>You&#8217;re doing it wrong</title>
		<link>http://lizkeogh.com/2011/12/23/youre-doing-it-wrong/</link>
		<comments>http://lizkeogh.com/2011/12/23/youre-doing-it-wrong/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 10:47:34 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[breaking models]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=755</guid>
		<description><![CDATA[The first time I did it wrong, it was because I didn&#8217;t know any better.
The second time I did it wrong, it was because I forgot about the first time.
The third time I did it wrong, it was because I was really tired.
The fourth time I did it wrong, it was because someone else told [...]]]></description>
			<content:encoded><![CDATA[<p>The first time I did it wrong, it was because I didn&#8217;t know any better.</p>
<p>The second time I did it wrong, it was because I forgot about the first time.</p>
<p>The third time I did it wrong, it was because I was really tired.</p>
<p>The fourth time I did it wrong, it was because someone else told me to.</p>
<p>The fifth time I did it wrong, it was because <em>nobody lets anyone do things right around here</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/12/23/youre-doing-it-wrong/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scrum and Kanban: both the same, only different</title>
		<link>http://lizkeogh.com/2011/11/20/scrum-and-kanban-both-the-same-only-different/</link>
		<comments>http://lizkeogh.com/2011/11/20/scrum-and-kanban-both-the-same-only-different/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 22:30:15 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[coaching]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[metathinking]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=748</guid>
		<description><![CDATA[When I started coaching Agile methodologies, I didn&#8217;t know how much I didn&#8217;t know.
I had come from Thoughtworks, a company whose tools and processes are mostly driven by Extreme Programming, aka XP. In that respect, most of what I learnt and coached was very similar to Scrum, albeit with different words. We called them iterations [...]]]></description>
			<content:encoded><![CDATA[<p>When I started coaching Agile methodologies, I didn&#8217;t know how much I didn&#8217;t know.</p>
<p>I had come from Thoughtworks, a company whose tools and processes are mostly driven by <a href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658/">Extreme Programming, aka XP</a>. In that respect, most of what I learnt and coached was very similar to Scrum, albeit with different words. We called them <em>iterations</em> instead of <em>sprints</em>, and had <em>stand-ups</em> instead of daily <em>scrums</em>. We had planning meetings, but we didn&#8217;t make commitments &#8211; just estimates. We had collaborative code ownership and a focus on delivery instead of a cross-functional team, which meant that we ended up with flexible and blurred roles anyway. We had the same problems &#8211; getting people co-located, helping business stakeholders become more comfortable with the risk and uncertainty of software delivery, and changing the culture and the infrastructure of the organisations in which we worked. We also had a number of technical practices like unit testing and continuous delivery that aren&#8217;t really prescribed by either Scrum or Kanban, but which both put forward as a Really Good Idea.</p>
<p>In the last few years, I&#8217;ve been privileged to be part of the Kanban community. I don&#8217;t consider myself part of the Scrum community as such, but I&#8217;m part of the larger Agile movement and strongly aligned through my background in XP.</p>
<p>In this post, I&#8217;d like to cover some of the differences I&#8217;ve seen between Scrum and Kanban, and add in some insights from the Cognitive Edge training I&#8217;ve done using Cynefin and complexity thinking. This isn&#8217;t going to be a full description or comparison, but it should hopefully provide some food for thought, and allow people to see some of the different tools available from both approaches.</p>
<p><strong>Disclaimer:</strong> I haven&#8217;t explained every term I&#8217;ve used, or every practice I&#8217;m referencing. I&#8217;m assuming familiarity. If you don&#8217;t have it, you can to run a search on anything I haven&#8217;t linked. I&#8217;m also using the terms &#8220;Scrum&#8221; and &#8220;Kanban&#8221; as aliases for the community and / or leadership, and I haven&#8217;t made much distinction between Scrum.org and the Scrum Alliance. This is deliberate, and I welcome feedback.</p>
<h3>Scrum and Kanban have more similarities than differences.</h3>
<p>Both methodologies put people and their interactions at the heart. Both have a clear focus on value, fast delivery and the continuing growth of the team and its ability to achieve those valuable deliveries. Both contain mechanisms for feedback and improvement, allowing processes to change according to context. Scrum used to have a very prescriptive format &#8211; not dissimilar to XP &#8211; but this has been flexed in recent editions of the <a href="http://www.scrum.org/scrumguides">Scrum Guide</a>, as alternatives to some of the practices have emerged. It&#8217;s not even beyond the realms of possibility that some of the alternatives have emerged from the Kanban movement!</p>
<p>Also recently, Scrum has started to evolve from being a set of processes to being a very loose framework in which processes can themselves evolve. Used this way, it joins Kanban as a meta-process, from which the real process emerges and continues to emerge.</p>
<p>IMO, both are infinitely better than that broken model called Waterfall, and both are better than having no process at all.</p>
<h3>Scrum isn&#8217;t about the Scrum Meetings, and Kanban isn&#8217;t about the Kanban Signal.</h3>
<p>Both methodologies are named after just one small aspect of their whole. In Scrum, the scrum meetings allow the team to share learning and information about how they&#8217;re doing and to make decisions about what to work on next. In Kanban, the kanban signal &#8211; showing that someone is free to help move a piece of work closer to delivery &#8211; provides a similar focus point. Scrum teams frequently use a card wall that&#8217;s similar to that of a Kanban team. Kanban teams frequently have daily meetings like Scrum. To an outside observer, the differences could seem so small as to be irrelevant.</p>
<h3>Kanban measures lead and cycle time, Scrum measures velocity.</h3>
<p>Both Kanban and Scrum have their origins in &#8220;Lean&#8221; thinking. We like to think of &#8220;Lean&#8221; as the set of principles behind the Toyota Production System &#8211; the process by which Toyota builds and churns out its cars &#8211; but both methodologies have an implicit recognition that software development holds <a href="http://lizkeogh.com/2009/10/02/lean-and-kanban-conference-roundup/">more similarities with product development</a> than a production line. In Toyota, kanban cards are used to help eliminate large amounts of spare parts and other inventory building up; providing a buffer which lets work flow through the system. Both Scrum and Kanban value this flow. Kanban suggests limits on the amount of work in progress, allowing constraints to be addressed. Scrum encourages collaboration, causing less work in progress. Scrum uses the proxy of velocity and estimation, which can help to prevent metrics around productivity becoming targets. Kanban uses lead and cycle time, tying its measurements to valuable targets that are hard to game.</p>
<h3>Scrum starts with the right context; Kanban improves the existing context.</h3>
<p>I once asked a Scrum practitioner, &#8220;What do you do if you don&#8217;t have a cross-functional team and you&#8217;re not co-located?&#8221; He told me that that&#8217;s the hardest bit of Scrum &#8211; starting from the right context. I realised that these difficulties, once overcome, also provide significant value. Just starting from the right context might be a good idea!</p>
<p>On the other hand, Kanban is neutral regarding context. Of course we think that being co-located is a good idea. Of course we&#8217;d love to have multi-skilled, flexible, collaborative professionals. If only this was as common in the industry as we&#8217;d like. Kanban&#8217;s focus on metrics and its measurements of lead and cycle time might make the impact of not having these apparent, so it&#8217;s a good place to start. (I used to think it was only suitable for highly skilled, disciplined, advanced teams, but experience and experimentation has taught me otherwise).</p>
<h3>Kanban visualises what&#8217;s happening; Scrum visualises an ideal.</h3>
<p>This is one of the biggest differences for me. The extent to which Kanban visualises reality is extreme enough that the board might not even have linear flow. Whatever the process policies are &#8211; whether helpful or otherwise &#8211; Kanban focuses on making them explicit, so that they can be addressed and improved. If the team happen to work with five different phases, this is reflected. If the team write technical stories, they go on the board.</p>
<p>In contrast, Scrum teams tend to set up a visualisation of an ideal process, helping teams to adopt that process. Done prescriptively, Scrum provides a &#8220;big bang&#8221; starting point. Because it consists of step-by-step practices, it&#8217;s easier for beginners to adopt. That could be Scrum&#8217;s blessing &#8211; but it&#8217;s also its curse.</p>
<h3>Certification and early adoption.</h3>
<p>Scrum has certification. Kanban doesn&#8217;t.</p>
<p>Yet.</p>
<p>In the early days of Scrum, there were few enough trainers and experienced Agilists that no matter who taught Scrum, it was done pragmatically. Early adopters tend to experiment, and those experiments led to a better understanding; to a focus on people and interaction, rather than process. Unfortunately the &#8220;Scrum Master&#8221; certificates are easy to get, compared to any other discipline that asserts a quality of mastery or independence. The training provides simple practices that are relatively easy for teams to adopt. Scrum is taught by a wider group of people, and the quality control over that teaching has become harder to maintain.</p>
<p>As a result, Scrum has been widely adopted and is considered pretty mainstream &#8211; the default Agile methodology &#8211; but the certificates associated with it provide a level of confidence that the training generally doesn&#8217;t support. I&#8217;ve met a couple of excellent Scrum trainers, but I&#8217;ve also seen &#8220;masters&#8221;, armed with their certificates, instituting mini-waterfall and silo&#8217;d teams as they replace those parts of Scrum that aren&#8217;t prescriptive, or that they don&#8217;t understand, or that they can&#8217;t achieve within a context that they can&#8217;t change.</p>
<p>Any examination or certification body suffers from a paradox: while the people who rely on those qualifications need them to be rigorous, the people teaching and taking those qualifications would much rather they were easy. The Scrum Alliance and Scrum.org between them have both helped to set up and reinforce the desirability of their certifications, and I can only imagine the difficulty that their leaders face in balancing the financial incentives involved against the good of the IT community and industry.</p>
<p>In contrast, Kanban is still in an early adopter phase. We&#8217;re still working out, as a community, what&#8217;s possible. Most Kanban practitioners and coaches are bright, experienced, willing to experiment, desiring of feedback and able to share and learn from each other in a relatively small community. Scrum no longer has that luxury. We don&#8217;t know what will happen if and when the Kanban community treads the same path, but we do have the advantage of being able to learn from what&#8217;s happened with Scrum.</p>
<p>You can also bet that the leaders are being watched carefully by the rest of the community to see how they meet this challenge. So far I think they&#8217;re doing an excellent job. So far there are no certificates available. So far.</p>
<h3>Some thoughts spurred by Cynefin.</h3>
<p>The <a href="http://en.wikipedia.org/wiki/Cynefin">Cynefin model of complexity thinking</a> teaches us that in a complex environment &#8211; one in which cause and effect can only be understood in retrospect, and which includes most systems with people in, as far as I can tell &#8211; we should increase the opportunities and incentives for interaction, so that the practices best suited to the context can emerge.</p>
<p>Waterfall treated software development as <em>complicated</em>, using Cynefin&#8217;s domain definition; as though each project was a thing that could be taken apart into many pieces, analyzed, then put back together as a whole. Unfortunately the ability of human beings to make mistakes, combined with our inability to either effectively communicate our intent or see into the future, has meant that this was always doomed to fail. (Most successful Waterfall teams, who complain to me that I label it unfairly, have not practiced it in a pure form, and have included elements of iteration, feedback and common sense. When these are lacking, any methodology is doomed to failure, but Waterfall above all others doesn&#8217;t mandate or even leave much room for them.)</p>
<p>When we look at applying Scrum prescriptively to a Waterfall team, we&#8217;re looking at pushing forward increasing levels of interaction in a context in which interaction is easy &#8211; where teams are co-located, have all relevant skills, are willing to collaborate and can share learning. Scrum&#8217;s acts of estimation and breaking stories into tasks force team members to talk to each other. The act of commitment which Scrum recommends in planning meetings causes a team to discuss their concerns frankly. The cycle of feedback and retrospection allows the team to discuss whether they&#8217;re delivering value and how to do it more effectively.</p>
<p>But Waterfall is no longer the context from which we always come. Many Agile adoptions aren&#8217;t taken up by teams doing Waterfall; they&#8217;re taken by teams who have abandoned their process altogether, and are talking and sharing their learning in order to work out what to do next, while having no metrics against which they can improve or track their progress and risk.</p>
<p>The context in which Scrum starts is not often possible. We&#8217;re not always co-located &#8211; many start-ups and companies now allow developers to work from home, and the industry still seems to suffer from a delusion that offshore work is cheap to obtain. We may not have multi-skilled people &#8211; it takes some time to learn skills. In both the environments which are already more collaborative than Scrum, and the ones which are a long way from being able to do it successfully, Kanban can be useful.</p>
<p>I fear that this may include the majority of environments and the IT industry, and <em>that&#8217;s</em> why I choose to hold myself closer to the Kanban community than the Scrum one. IMO, Kanban works in a larger set of contexts than Scrum does, even though for a subset Scrum might achieve results faster.</p>
<p>They&#8217;re still more similar than they are different&#8230; <a href="http://lizkeogh.com/2009/09/16/scrum-vs-kanban-fight/">and I still like XP too.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/11/20/scrum-and-kanban-both-the-same-only-different/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Conversational patterns in BDD</title>
		<link>http://lizkeogh.com/2011/09/22/conversational-patterns-in-bdd/</link>
		<comments>http://lizkeogh.com/2011/09/22/conversational-patterns-in-bdd/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 14:32:56 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[bdd]]></category>
		<category><![CDATA[breaking models]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=735</guid>
		<description><![CDATA[BDD isn&#8217;t about the tools. It&#8217;s about the conversations you have, exploring examples (or scenarios) of an application&#8217;s behaviour, to see if everyone has the right understanding.
Of course, we don&#8217;t know what we don&#8217;t know, so feedback is still important. We&#8217;ve got a good chance of discovering what someone else knows, and has perhaps forgotten [...]]]></description>
			<content:encoded><![CDATA[<p>BDD isn&#8217;t about the tools. It&#8217;s about the conversations you have, exploring examples (or scenarios) of an application&#8217;s behaviour, to see if everyone has the right understanding.</p>
<p>Of course, <a href="http://dannorth.net/2010/08/30/introducing-deliberate-discovery/">we don&#8217;t know what we don&#8217;t know</a>, so feedback is still important. We&#8217;ve got a good chance of discovering what <em>someone else</em> knows, and has perhaps forgotten to tell us, if we start questioning the ways in which our understanding might be wrong.</p>
<p>These are two patterns which I commonly use. You&#8217;ll notice that they follow from the typical BDD scenario template:</p>
<blockquote><p>
<strong>Given</strong> a context<br />
<strong>When</strong> an event happens<br />
<strong>Then</strong> an outcome should occur.</p></blockquote>
<h3>Context Questioning</h3>
<p>We can ask, &#8220;Is there any other context which, when this event happens, will produce a different outcome?&#8221;</p>
<p>It might be an additional context, or a context which occurs instead of the one(s) we&#8217;re considering. We can ask this question, or we can think of contexts ourselves and ask about those. For instance:</p>
<blockquote><p>
Given a client manager, Fred, has two clients, George and Henry<br />
When Fred uses the application<br />
Then Fred should only be able to see George and Henry&#8217;s accounts.
</p></blockquote>
<p>I ask, &#8220;Given I have no client managers, what happens then?&#8221; (I&#8217;m thinking of handling empty lists, because I&#8217;m a developer.)</p>
<p>The head of Client Management says, &#8220;What? Who cares? Why are you even using the application? Get on the phone and get some clients already!&#8221; (He&#8217;s thinking of his failing business.)</p>
<p>You can sometimes learn a lot about a business domain this way, even if the behaviour of the application isn&#8217;t going to change immediately!</p>
<h3>Outcome Questioning</h3>
<p>This is similar to Context Questioning, but instead, we ask,</p>
<blockquote><p>&#8220;Given this context, when this event happens, is there another outcome that&#8217;s important? Something we missed, perhaps?&#8221;</p></blockquote>
<p>Another way I like to ask this is, &#8220;If pixies were doing this instead of software, would it be enough? Or do they need to do something else, too?&#8221;</p>
<p>For instance:</p>
<blockquote><p>
Given the legacy system has a problem<br />
When a trader stores a trade<br />
Then the trader should be told about the problem.</p></blockquote>
<p>I ask, &#8220;Is that all that should happen? I&#8217;d be pretty upset if I were a trader and this happened a lot.&#8221;</p>
<p>My business analyst (by which I mean, someone who can analyse the business) says, &#8220;Well, we&#8217;ll still have the details in the system, so you&#8217;ll be able to do it again later. Oh, yes! We need to store the trade in our system still, too, but make sure it doesn&#8217;t have a legacy system ID so that we can tell it didn&#8217;t go through.&#8221;</p>
<h3>And that&#8217;s it.</h3>
<p>There are lots of other ways to have conversations around behaviour. They&#8217;ll usually be trying to find missing contexts and outcomes &#8211; places where a new piece of behaviour happens. These also tend to be the things which business users, familiar with their domains to the point where they don&#8217;t think about it, forget to talk about. Developers are pretty good at spotting this, because they&#8217;re usually thinking through how they&#8217;re going to implement the problem, and wondering what goes on the other side of the &#8220;if&#8230; else&#8230;&#8221; statement (even if we&#8217;re not meant to be implementing yet, we already are in our heads). Testers are also very good, because they&#8217;re used to the kind of things people get wrong when they produce software.</p>
<p>This is why getting all three people &#8211; a tester, a developer and a business analyst &#8211; is so useful when we&#8217;re discussing scenarios. It&#8217;s also why it&#8217;s so important to have the conversations &#8211; because<em> if you&#8217;re not having conversations, you&#8217;re not doing BDD</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/09/22/conversational-patterns-in-bdd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Splitting stories into tasks &#8211; when, why and how (or not)</title>
		<link>http://lizkeogh.com/2011/08/23/splitting-stories-into-tasks-when-why-and-how-or-not/</link>
		<comments>http://lizkeogh.com/2011/08/23/splitting-stories-into-tasks-when-why-and-how-or-not/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 20:57:40 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[feedback]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[stories]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=733</guid>
		<description><![CDATA[Before I write anything about this, I&#8217;d like to clarify what I mean by a task and a story.
A feature is something tangible that works and which we could potentially deliver, if it was enough to provide business benefit. Usually a bit of a screen or page, together with all the logic and validation associated [...]]]></description>
			<content:encoded><![CDATA[<p>Before I write anything about this, I&#8217;d like to clarify what I mean by a <em>task</em> and a <em>story</em>.</p>
<p>A <em>feature</em> is something tangible that works and which we could potentially deliver, if it was enough to provide business benefit. Usually a bit of a screen or page, together with all the logic and validation associated with it, is a feature. A feature is the highest-level thing which a developer could work on without doing significant bits of analysis. It&#8217;s a part of an idea made at least concrete enough to imagine.</p>
<p>A <em>story</em> is a part of a feature on which we can get feedback from relevant stakeholders. For instance, we might code the UI, then the validation and messages, then an aspect or two of the behaviour behind the UI. Each of these would be a possible story. The only real reason for splitting features into stories is to get faster feedback and a better idea of progress.</p>
<p>A <em>task</em> is a part of a story which doesn&#8217;t allow us to get feedback from relevant stakeholders. If you can get feedback, it&#8217;s probably a story rather than a task, because it affects the UI in some way, or at least gives something that can be visibly verified and critiqued and which stakeholders care about. There are lots of UIs and lots of stakeholders and users, so &#8220;put logging in to help maintenance debug the situation where the elephant appears on the screen&#8221; might be a perfectly good story. Anything that&#8217;s just a part of a story is a task.</p>
<p>A task can&#8217;t really be tested either, even by a developer. You have no idea if a database has the right tables or data until you connect it to something. You have no idea if an interface to another system will work until it&#8217;s actually talking to that system. You might unit-test it, or run some queries, but it&#8217;s a level below the feedback and user testing available for features and stories. (There are higher levels of testing too, in which we can look for user capabilities and business outcomes, stakeholder goals, profit / loss, etc. &#8211; so you can&#8217;t really tell if *anything* works until you put it into production &#8211; but that&#8217;s a blog post for another day).</p>
<h3>Why do some teams split stories into tasks?</h3>
<p>A lot of Scrum teams particularly do this, because it&#8217;s traditionally taught as part of the Certified Scrum Master course. Hopefully good CSTs, and their CSMs, are teaching the benefits along with the practices.</p>
<p><strong>It can lead to more accurate estimates.</strong> Splitting stories into tasks can help developers to think about the amount of work involved in a story, and find any pieces they missed.</p>
<p><strong>It can help with collaboration. </strong>By splitting a story into tasks, developers can each take that task &#8211; usually a different horizontal slice &#8211; and work with minimal merge conflicts and just a bit of adjustment to get their piece working with other people&#8217;s. Splitting a story into tasks is useful for swarming, and a lot of swarming teams do this instinctively, even if they haven&#8217;t written the tasks down.</p>
<p><strong>It can help senior developers mentor junior developers</strong> and verify that they&#8217;re taking a good approach towards a story. Some mistakes are worth avoiding.</p>
<p><strong>They can be used as a measure of progress</strong> to someone tracking the team, like a PM or Scrum Master.</p>
<h3>Why don&#8217;t other teams do this?</h3>
<p>Some teams prefer to focus on delivering something on which they can get feedback, and find the tasks distracting.</p>
<p>There are also other ways of getting accurate estimates. Talking through scenarios can help with this. A lot of teams don&#8217;t use estimates anyway, preferring to stick to SLAs or their own instinctive understanding of how much work they can get done and whether they&#8217;re going to release on time. Anther purpose of estimation is usually so that the business stakeholders can have trust and confidence in the team, and there are different ways of getting the trust of stakeholders, too.</p>
<h3>What bad things might happen if we split our stories into tasks?</h3>
<p>Splitting stories into tasks might indeed distract from delivering something on which the team can get feedback. When a developer sees a list of tasks in front of him, he tends to work through those tasks methodically. He might not notice that, for instance, the team isn&#8217;t going to deliver *any* stories this week.</p>
<p>Using tasks to estimate team progress can also be misleading. If all the developers end up working on their own stories, the PM might see lots of tasks being done. If none of those stories are ready for the showcase, though, the team won&#8217;t be able to get feedback from their stakeholders &#8211; and might end up building the wrong things altogether! Also, the Pareto Principle suggests that 20% of the causes are responsible for 80% of the effects &#8211; or that the last 20% of the story might take 80% of the time. Often developers will start with the easy bits and leave the hard things until last.</p>
<p>People seeing the tasks can use them to micro-manage the team, asking who&#8217;s working on which task, or even assigning particular tasks ahead of time! But anyone with a manager or Scrum Master who does this has bigger problems than the task-splitting, I think.</p>
<h3>Why do you absolutely hate people splitting tasks then putting hourly estimates on them?</h3>
<p>First and foremost, this harks back to the old myth that <em>time</em> = <em>work done</em>. Even if developers are only held to be productive 50 or 60% of their &#8220;ideal&#8221; working day, the focus is still on the number of hours spent, rather than useful software being produced. It&#8217;s perfectly possible to spend hours on something that doesn&#8217;t work. A team which signs off all its tasks is subtly encouraged to say that they&#8217;re &#8220;done&#8221; without checking that the software they&#8217;re producing is useful.</p>
<p>What about the developer who plays with something else while turning over a problem in the back of his mind, then delivers an ingenious solution in 2 hours? Or the developer who wants to try out another way of solving the problem which might involve a steep learning curve, but which would benefit the project in the long run? By pinning these developers down to their hourly estimates, insisting on a certain timescale of productivity, we encourage them to tread the path they had in mind when they made the estimate, even if a different idea occurs to them at the time. Since human beings get a kick out of being right &#8211; suffering horribly from confirmation bias and the preference for validation &#8211; just the act of estimating the hours will pin them down subconsciously. They may not even think about the problem or have the new idea! Hourly estimates can stifle innovation, and the less wriggle room there is, the more innovation will be stifled.</p>
<p>Finally, it encourages micro-management. A project manager who sees a developer working on some tasks that should have taken 8 hours, but have taken all week, might wonder why that developer is taking so long. However, uncomfortable enquiries will only cause the developer to pad their estimates next time &#8211; and work expands to fill the time available, so the team will eventually slow down.</p>
<h3>Should we do it or not?</h3>
<p>If you think splitting stories into tasks might be helpful, try it. If it doesn&#8217;t help, stop. However, please resist the urge to put hourly estimates on them &#8211; or to ask that your team does so.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/08/23/splitting-stories-into-tasks-when-why-and-how-or-not/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Done with Chickens and Pigs</title>
		<link>http://lizkeogh.com/2011/08/11/done-with-chickens-and-pigs/</link>
		<comments>http://lizkeogh.com/2011/08/11/done-with-chickens-and-pigs/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 17:00:09 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[coaching]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=715</guid>
		<description><![CDATA[If you&#8217;re not familiar with the concept of Chickens and Pigs, it&#8217;s based on an old joke in which a chicken and a pig set up a restaurant. The chicken wants to call it &#8220;Ham&#8217;n'Eggs&#8221;. The pig says, &#8220;No thanks. I&#8217;d be committed, but you&#8217;d only be involved.&#8221;
The story is used in Scrum and other [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re not familiar with the concept of Chickens and Pigs, it&#8217;s based on an old joke in which a chicken and a pig set up a restaurant. The chicken wants to call it &#8220;Ham&#8217;n'Eggs&#8221;. The pig says, &#8220;No thanks. I&#8217;d be committed, but you&#8217;d only be involved.&#8221;</p>
<p>The story is used in Scrum and other methodologies to suggest that only &#8220;pigs&#8221; &#8211; the people whose bacon is on the line &#8211; should have the right to speak in stand-ups. This deliberately excludes management.</p>
<p>Yesterday, Dean Leffingwell spoke on the subject at Agile 2011. He pointed out that the practice calls out the chickens as the &#8220;bad guys&#8221;. &#8220;Wrong!&#8221; he says. &#8220;These are the people who run the company.&#8221; Quite aside from some cultural implications of calling people &#8220;pigs&#8221; &#8211; it doesn&#8217;t go down well in countries which consider pigs to be unclean, for instance &#8211; excluding management from stand-ups can be disrespectful at best, and damaging at worst.</p>
<p>I finally decided to be done with the Chicken and Pigs analogy and practice after a roleplay organised by Derek Wade, in which the manager had something very important to share &#8211; something that would have reduced the stress the team was experiencing, as well as the workload, the weekend&#8217;s overtime, and the risk to delivery that was approaching our fictitious team.</p>
<p>The manager started to speak. &#8220;I&#8230;&#8221;</p>
<p>&#8220;You&#8217;re a chicken,&#8221; the Scrum Master announced. &#8220;Next!&#8221;</p>
<p>Let&#8217;s not.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/08/11/done-with-chickens-and-pigs/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>The Gordon Pask Award</title>
		<link>http://lizkeogh.com/2011/08/01/the-gordon-pask-award-2/</link>
		<comments>http://lizkeogh.com/2011/08/01/the-gordon-pask-award-2/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 17:52:05 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[conference]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=705</guid>
		<description><![CDATA[Update:
I&#8217;m told that it&#8217;s too late to get the Pask sorted out for this year &#8211; we&#8217;re Agile, but not that Agile! Please keep nominees in mind, though. Many members of the committee are talking and are keen to keep the award in some form, so chances are it will be back next year. Watch [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update</strong>:</p>
<p>I&#8217;m told that it&#8217;s too late to get the Pask sorted out for this year &#8211; we&#8217;re Agile, but not that Agile! Please keep nominees in mind, though. Many members of the committee are talking and are keen to keep the award in some form, so chances are it will be back next year. Watch this space.</p>
<hr />
<p>It&#8217;s that time of year again that the Pask committee meets at the Agile 20XX conference to vote on the nominations which have been made.</p>
<p>The committee is mostly made up of people who&#8217;ve already won the award in previous years. We won because of our ideas, because we&#8217;re good at spreading them, because we made a difference, because we were under the radar&#8230; but not because of our organizational ability! So please forgive this very late post.</p>
<p>We are <em>still</em> collecting nominations (email pask-nominations AT agilealliance DOT org) and will be voting at some point during the week.</p>
<p>A number of people have suggested that the Pask Award doesn&#8217;t matter. I thought I&#8217;d share some of the things which have happened to me since winning the award last year, so that you can understand exactly what it is that&#8217;s being given away.</p>
<h3>The Pask Award</h3>
<p>It&#8217;s always wonderful to be recognised for your work. The award also comes with quite a hefty bit of money &#8211; enough to pay for a couple of international conferences, and then some. There&#8217;s no trophy, but you get to tell people that you won the award. Your parents will be dead chuffed. You can stand on stage and recognise all the people and communities who&#8217;ve helped you. And that&#8217;s just the award itself.</p>
<h3>The Side Effects</h3>
<p>The number of people following me on Twitter doubled overnight, from 500 to 1000. Then it kept climbing. I am now followed by over 1,600 people. That&#8217;s enabled me to spread a lot of other people&#8217;s messages, too.</p>
<p>Because people have started to know my name, I&#8217;ve started getting more offers of work. I&#8217;ve had requests for help from the USA, from all over Europe, from India. (Some of them have even offered to pay me!) I&#8217;ve been able to raise my rates a bit, and I&#8217;m getting all kinds of interesting opportunities which I didn&#8217;t have before.</p>
<p>Then, there&#8217;s the conference invites. Lots, and lots, and lots of invites to speak around the world. I&#8217;m sorry to those people that I&#8217;ve had to turn down &#8211; I am simply getting so many invites this year that I can&#8217;t do all of them, especially if they&#8217;re at the same time as others.</p>
<p>Because of the conference invites, I&#8217;m getting to speak more, and spread the ideas from my communities, which leads to more Twitter followers and more exposure and more conference invites&#8230; I suspect the escalation from this has started to reach a natural limit, but again, I apologise if I haven&#8217;t quite been able to keep up. It really has been a little bit insane.</p>
<h3>The Further Side-Effects</h3>
<p>Because of the invites, I&#8217;ve become a better speaker. This means I can now spread the ideas more effectively. They weren&#8217;t all my ideas in the first place &#8211; many of them came from communities in London and around the world &#8211; so now people recognise that I can share ideas effectively. This means more people are now giving me lots of ideas to share! So I&#8217;m learning an enormous amount, too. I feel insanely privileged to have such excellent friends and colleagues.</p>
<h3>In short&#8230;</h3>
<p>My life currently rocks beyond my ability to tell it. I&#8217;ve been able to help other people&#8217;s lives to rock too. A lot of this is due to the award. Many thanks to those who nominated and voted for me, and to the Agile Alliance for continuing to make a difference.</p>
<h3>The Gift</h3>
<p>If you would like someone to receive a similar gift to the one that I&#8217;ve been given in this last year, enabling them to spread their knowledge and ideas to other communities that they wouldn&#8217;t normally reach, please nominate at pask-nominations AT agilealliance DOT org. <a href="http://www.paskaward.org/">You can see the kind of things we&#8217;ve been nominated for in the past</a>. Mostly we&#8217;re looking for people who aren&#8217;t particularly famous or well known; who haven&#8217;t written books or run keynotes, who sit &#8220;below the radar&#8221;, and could benefit from more exposure &#8211; and who will benefit their communities in turn, passing on the opportunities and making the best use of the fame that comes with it.</p>
<p>Do you know of anyone who&#8217;s helped their communities? Who&#8217;s driven Agile forward in difficult or unusual circumstances? Who&#8217;s created an idea, or a community, or a tool, that&#8217;s truly revolutionary?</p>
<p>If so, don&#8217;t wait &#8211; post that email now.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/08/01/the-gordon-pask-award-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Deliberate Discovery &#8211; a &#8220;Sonnet&#8221;</title>
		<link>http://lizkeogh.com/2011/06/30/deliberate-discovery-a-sonnet/</link>
		<comments>http://lizkeogh.com/2011/06/30/deliberate-discovery-a-sonnet/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 20:17:19 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[bdd]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[metathinking]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=700</guid>
		<description><![CDATA[Uncertainty&#8217;s the muse of all that&#8217;s new,
And ignorance the space in which she plays;
A year&#8217;s enough to prove a vision true,
But we could prove it false in only days.
We dream, and chase our dream, and never fear
To fail, and fail. Up, up! And on again,
But ask us to pursue another&#8217;s goals
And failure makes us mice [...]]]></description>
			<content:encoded><![CDATA[<p>Uncertainty&#8217;s the muse of all that&#8217;s new,<br />
And ignorance the space in which she plays;<br />
A year&#8217;s enough to prove a vision true,<br />
But we could prove it false in only days.<br />
We dream, and chase our dream, and never fear<br />
To fail, and fail. Up, up! And on again,<br />
But ask us to pursue another&#8217;s goals<br />
And failure makes us mice where we were men.<br />
Ah, best laid plans! Where were you at the end<br />
Who chained us and constrained us from the start?<br />
We knew you made a fickle, fragile friend;<br />
You tricked us when you claimed you had a heart!<br />
We thought less travelled roads would see us winning<br />
In places other fools had feared to stray -<br />
If only we had known from the beginning<br />
The ignorance we found along the way.<br />
And yet, a list of dangers and disasters<br />
Filled out, and scanned, and added to some more<br />
Would still have left out some of what we mastered -<br />
We didn&#8217;t know we didn&#8217;t know before.</p>
<p>We planned our way with maps we&#8217;d made already<br />
Assuming the terrain would be the same,<br />
Expecting well-paved roads to keep us steady<br />
And any local creatures to be tame.<br />
We loaded up our caravans and wagons<br />
With good advice, best practices and tools<br />
But didn&#8217;t spot the legend &#8211; &#8220;Here be dragons!&#8221;<br />
So we got burnt, again. They say that fools<br />
Rush in, and yet we count ourselves as wise,<br />
We praise each other&#8217;s skill and raise a glass<br />
To intellect &#8211; ignoring the demise<br />
Of expeditions just as skilled as ours.<br />
When they return, worn out, their pride in shreds,<br />
We laugh and say, &#8220;A death march! You expect<br />
Such things to fail.&#8221; And in our clever heads<br />
It&#8217;s obvious &#8211; at least in retrospect.<br />
The dragons of our ignorance will slay us<br />
If we don&#8217;t slay them first. We could be brave<br />
And work for kings who don&#8217;t refuse to pay us<br />
When we&#8217;re delayed because we found their cave.</p>
<p>They say that matter cannot be created,<br />
A fundamental principle and law,<br />
While dragons keep emerging, unabated;<br />
As many as you slay, there&#8217;s still one more.<br />
Our ignorance is limitless &#8211; be grateful,<br />
Or else we&#8217;d find we&#8217;ve nothing left to learn;<br />
To be surprised by dragons may be fateful,<br />
But truth be told, it&#8217;s best laid plans that burn.<br />
We could seek out the dragons in their dungeons<br />
And tread there softly, ready to retreat;<br />
We could seek other roads, postponing large ones,<br />
And only fight the ones we might defeat.<br />
The world could be a world of dragon slayers<br />
And stand as men and women, not as mice;<br />
The joy that comes from learning more should sway us;<br />
The fiercest dragons won&#8217;t surprise us twice.<br />
Discover tiny dragons, be they few,<br />
And all the mightiest, with equal praise -<br />
Uncertainty&#8217;s our muse of all that&#8217;s new,<br />
And ignorance the space in which she plays.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/06/30/deliberate-discovery-a-sonnet/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>ATDD vs. BDD, and a potted history of some related stuff</title>
		<link>http://lizkeogh.com/2011/06/27/atdd-vs-bdd-and-a-potted-history-of-some-related-stuff/</link>
		<comments>http://lizkeogh.com/2011/06/27/atdd-vs-bdd-and-a-potted-history-of-some-related-stuff/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 20:03:27 +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=679</guid>
		<description><![CDATA[Another question that people often ask around or to me is, &#8220;What&#8217;s the difference between Acceptance Test Driven Development and Behavior Driven Development?&#8221;
To explain, I&#8217;ll go back to the time when I first learnt BDD.
BDD started at a unit or class level
Dan North started doing BDD at a unit or class level, as a replacement [...]]]></description>
			<content:encoded><![CDATA[<p>Another question that people often ask around or to me is, &#8220;What&#8217;s the difference between Acceptance Test Driven Development and Behavior Driven Development?&#8221;</p>
<p>To explain, I&#8217;ll go back to the time when I first learnt BDD.</p>
<h3>BDD started at a unit or class level</h3>
<p>Dan North <a href="http://dannorth.net/introducing-bdd/">started doing BDD at a unit or class level</a>, as a replacement for TDD &#8211; a mechanism for describing the behaviour of code and providing examples, without using the word &#8220;test&#8221;, because it turned out that this clarified a lot of the confusion (and I still find it much easier to teach TDD if I avoid the word &#8220;test&#8221;, whatever I subsequently call it).</p>
<p>It was only when Chris Matts said, &#8220;That looks quite a lot like analysis,&#8221; that Dan began taking it out to describe the behaviour of whole systems of code.</p>
<h3>ATDD practices at the time weren&#8217;t all that solid</h3>
<p>When I came across BDD (late 2004), I was working on a project which had been driven quite heavily with ATDD &#8211; at least to start with.</p>
<p>This project had 160 acceptance tests. They all consisted of lists of text boxes, button clicks, locating more text boxes and repeating until a particular outcome was reached. They were lengthy. They were rigorous. Unfortunately, at some point someone had introduced a dialog box into the flow, disrupting about 30% of these tests. There were another 10% also failing, possibly for similar reasons.</p>
<p>It took a couple of days for two of us to work through them, fixing the tests. We got most of them working, but not enough for anyone to actually care about them. The acceptance tests were making things hard to change.</p>
<h3>BDD changed the landscape</h3>
<p>Dan has since said that JBehave was &#8220;just a thought experiment&#8221;, and he didn&#8217;t really expect anyone to use it. (That&#8217;s good, because it JBehave 1.0 was pretty unusable, at least at a scenario level). It worked as a thought experiment, though, and lots of people started doing ATDD in a very different way &#8211; creating examples of how their system worked, and using those examples to explore the scope of their systems as well as the responsibility of their classes. Lots of people started working <em>outside-in</em>, from the UIs through which users experienced the system&#8217;s behaviour, to the controllers, the domain models, the utility classes, services, repositories, etc., until they finally had working software that tended to matter more to the stakeholders of the project than software had before.</p>
<p><a href="http://blog.davidchelimsky.net/2007/10/21/story-runner-in-plain-english/">Dave Chelimsky&#8217;s movement over to plain text</a> really helped this movement to take off. When people think of &#8220;BDD&#8221; they often think of the frameworks which have copied this (<a href="http://cukes.info/">Cucumber</a> and <a href="http://jbehave.org">JBehave 2.0</a> amongst them), even though <a href="http://lizkeogh.com/2011/03/04/step-away-from-the-tools/">this isn&#8217;t the complete story</a>. They have certainly encouraged developers &#8211; famous for their introverted natures &#8211; to boldly go into the analysis space.</p>
<h3>BDD enabled conversation</h3>
<p>Whether through frameworks, DSLs or just conversation, the biggest difference between BDD and ATDD was the way in which BDD enabled a common language between users and business stakeholders, because it <a href="http://domaindrivendesign.org/library/north_keogh_gitlevich_2007">supports Domain Driven Design&#8217;s &#8220;ubiquitous language&#8221;</a> (forgive the rabbit-in-the-headlights look, it was my first ever video!), and provides its own ubiquitous language for software development &#8211; the language of examples and behaviour, rather than tests and acceptance criteria.</p>
<p>The second difference was the reusability of steps. This is something which a lot of BDDers are still struggling with, so we&#8217;ve still got a way to go here. (More on steps and business / system capabilities some other time).</p>
<h3>BDD doesn&#8217;t just stop at scenarios, it goes all the way to the project vision</h3>
<p>Finally, Chris Matts introduced <a href="http://www.infoq.com/articles/pulling-power">Feature Injection</a>, which takes BDD&#8217;s patterns all the way into the analysis space.</p>
<p>(I consider Feature Injection and BDD to be children of <a href="http://dannorth.net/">Deliberate Discovery</a> (even though they preceded it), which is itself a child of <a href="http://www.infoq.com/articles/real-options-enhance-agility">Real Options</a>. I summarise Deliberate Discovery as the act of wilfully addressing ignorance. Both Deliberate Discovery and Real Options have implications and uses beyond software development, and I heartily recommend coaches and managers to go read up on them. In fact, everyone who lives a life of any kind of uncertainty should go and read up on them. And if your life is staid and comfortable, maybe it will help you to step into those challenging spaces. Go do it anyway.)</p>
<h3>Or at least, this used to be the difference&#8230;</h3>
<p>So that&#8217;s the past. What about now?</p>
<p>Well, most people who do ATDD nowadays use the Given-When-Then template which Chris introduced (shout-out to <a href="http://gojko.net/">Gojko Adzic</a> for his work in this space). They use domain language in conversation with the business. They&#8217;re interested in discussing what software would actually make a difference, then capturing that and sometimes automating it, with a focus on working out the software which would matter.</p>
<p>I&#8217;m guided by <a href="http://groups.google.com/group/behaviordrivendevelopment/msg/ee750a218b514946">Dan&#8217;s words to the BDD Google Group</a>, which apply both to TDD and ATDD:</p>
<blockquote><p>I think you can over-think these things.<br />
I&#8217;d like to avoid &#8220;BDD is better than TDD because&#8230;&#8221; or even &#8220;BDD is<br />
different from TDD (as originally envisioned) because&#8230;&#8221; </p>
<p>TDD is amazing. Its initial conception was to solve exactly what I&#8217;ve been<br />
trying to do with BDD. Originally it was described as variable scope (i.e.<br />
covering both the space of modern day TDD-in-the-small and what the ATDD/SBE<br />
folks are doing in the functional testing space). It&#8217;s not the *only* way to<br />
come up with good design, and neither is BDD. They&#8217;re just both useful to<br />
have in your back pocket as you go around trying to write decent software to<br />
solve useful problems. </p></blockquote>
<h3>They&#8217;re called different things</h3>
<p>The difference is that one is called Behaviour Driven Development &#8211; and some people find that wording useful &#8211; and one (or two) is called (Acceptance) Test Driven Development &#8211; and some people find that wording useful in a different way.</p>
<h3>And that&#8217;s it.</h3>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/06/27/atdd-vs-bdd-and-a-potted-history-of-some-related-stuff/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Acceptance Criteria vs. Scenarios</title>
		<link>http://lizkeogh.com/2011/06/20/acceptance-criteria-vs-scenarios/</link>
		<comments>http://lizkeogh.com/2011/06/20/acceptance-criteria-vs-scenarios/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 08:49:57 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[bdd]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=675</guid>
		<description><![CDATA[Some common confusion I&#8217;ve come across recently involves the difference between a Scenario and Acceptance Criteria.
I&#8217;ll start by defining these two things as I understand them.

A scenario is an example of the system&#8217;s behavior from one or more users&#8217; perspectives.
Acceptance criteria are a set of rules which cover aspects of a system&#8217;s behavior, and from [...]]]></description>
			<content:encoded><![CDATA[<p>Some common confusion I&#8217;ve come across recently involves the difference between a Scenario and Acceptance Criteria.</p>
<p>I&#8217;ll start by defining these two things as I understand them.</p>
<ul>
<li>A scenario is an example of the system&#8217;s behavior from one or more users&#8217; perspectives.</li>
<li>Acceptance criteria are a set of rules which cover aspects of a system&#8217;s behavior, and from which scenarios can be derived.</li>
</ul>
<p>Here&#8217;s a scenario from the pet shop I use in my BDD tutorials.</p>
<p><code><br />
Given a rabbit called Fluffy who is 1 1/2 months old<br />
When we try to sell Fluffy<br />
Then we should be told Fluffy is too young.<br />
</code></p>
<p>This is an <em>example</em> of the kind of thing a pet shop employee might encounter in the till software. It&#8217;s quite specific, containing actual data, and illustrates our domain nicely. We can tell quite a lot from this: that pets have names, that there are rules around the sale of pets, the units in which we measure the age of young pets, etc.</p>
<p>We can&#8217;t tell, though, what age we <em>would</em> be allowed to sell the pets. Is it fixed? For all pets? Let&#8217;s look at something else:</p>
<p><code><br />
Given a baby animal is younger than its recommended selling age<br />
When we try to sell it<br />
Then we should be told it's too young.<br />
</code></p>
<p>Despite the Given, When and Then, this is <em>not</em> a scenario. It&#8217;s acceptance criteria &#8211; a full specification of this aspect of behavior &#8211; phrased in scenario form. A lot of the time, I see people write criteria like this, then become confused when they can&#8217;t treat it like a real scenario &#8211; discussing it in detail, deriving further edge cases, automating it, etc.</p>
<p>Talking through scenarios is, for me, the most important aspect of BDD. That&#8217;s how we discover whether we have a shared understanding or not; by using specific examples to illustrate our understanding or discover our ignorance.</p>
<p>When we&#8217;re discussing the scenarios, it isn&#8217;t always necessary to write scenarios for all the acceptance criteria. As long as the acceptance criteria are clear enough to derive the relevant scenarios easily, I recommend leaving it as acceptance criteria until the point where it needs to be automated. You can tell if the scenarios can be derived in just a few seconds of conversation. You don&#8217;t need to write down <em>everything</em>.</p>
<p>It&#8217;s also possible to phrase acceptance criteria in other ways:</p>
<p><code><br />
We should be prevented from selling animals younger than the recommended age.<br />
</code></p>
<p>Now you can talk through the scenarios, and see potential other criteria which you missed:</p>
<p><code><br />
Customers should be encouraged to return when the animal is old enough to sell.<br />
</code></p>
<p>As you&#8217;re talking through the scenarios, the information we need for automation will emerge, and a better understanding of the domain spreads amongst the people involved in those discussions (usually a dev, BD and tester):</p>
<p><code><br />
Given rabbits can't be sold before they're 2 months old<br />
Given Fluffy the rabbit is 1 1/2 months old<br />
When we try to sell Fluffy<br />
Then we should be prompted to tell the customer, "This pet is too young. Please come back in 15 days to collect your pet."<br />
</code></p>
<p>By talking about both acceptance criteria and scenarios, asking why, and using scenarios to illustrate the criteria, we find out more about our domain. We can also automate them later on, where they&#8217;ll help to provide living documentation and act as regression tests.</p>
<p>There&#8217;s one other difference between a Scenario and Acceptance Criteria or even an Acceptance Test. You can ask your business stakeholders, &#8220;Can you give me a scenario where that happens?&#8221; or &#8220;Can you give me an example?&#8221; I&#8217;ve found this often draws out more useful discussions than, &#8220;Can you give me acceptance criteria for this?&#8221; or &#8220;Can you help me work out how to test this?&#8221;</p>
<p>The language of BDD, and particularly its vocabulary, provide a <a href="http://dannorth.net/introducing-bdd/">ubiquitous language</a> for analysis and development.</p>
<p><em>Now</em> we&#8217;re talking.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2011/06/20/acceptance-criteria-vs-scenarios/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

