<?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>Line by Line</title>
	<atom:link href="http://www.lagerweij.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lagerweij.com</link>
	<description>Wouter Lagerweij</description>
	<lastBuildDate>Tue, 15 May 2012 19:29:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>The Strategic Inflection Point as a Special Case Pivot</title>
		<link>http://www.lagerweij.com/2012/05/14/the-strategic-inflection-point-as-a-special-case-pivot/</link>
		<comments>http://www.lagerweij.com/2012/05/14/the-strategic-inflection-point-as-a-special-case-pivot/#comments</comments>
		<pubDate>Mon, 14 May 2012 22:55:58 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[Lean Startup]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[inflection point]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[leanstartup]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=521</guid>
		<description><![CDATA[I&#8217;ve noticed that I very regularly get people visiting my blog through a Google search for the term &#8216;Strategic Inflection Point&#8217;. Since that term has some very direct connections to other concepts I&#8217;ve been learning about, I thought I&#8217;d give some detail on Strategic Inflection Points, and their relation to the Lean Startup ideas of Pivots and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve noticed that I very regularly get people visiting my blog through a Google search for the term &#8216;Strategic Inflection Point&#8217;. Since that term has some very direct connections to other concepts I&#8217;ve been learning about, I thought I&#8217;d give some detail on Strategic Inflection Points, and their relation to the Lean Startup ideas of Pivots and Pirate Metrics.</p>
<p>I once reported on a <a title="Lean and Kanban Europe 2010 – Part 2 – Mary Poppendieck" href="http://www.lagerweij.com/2010/10/03/lean-and-kanban-europe-2010-part-2-mary-poppendieck/">presentation by Mary Poppendieck at the Lean and Kanban conference in Antwerp of 2010</a>, where she mentions <a href="http://en.wikipedia.org/wiki/Andy_Grove">Andy Grove</a>&#8216;s book &#8216;<a href="http://www.amazon.com/Only-Paranoid-Survive-Exploit-Challenge/dp/0385483821">Only the paranoid survive</a>&#8216;. This 1999 book deals with the way Grove ran Intel, and includes the concept of the Strategic Inflection Point, also described by Grove in his <a href="http://www.intel.com/pressroom/archive/speeches/ag080998.htm">1998 speech at the Academy of Management</a>.</p>
<div id="attachment_74" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.lagerweij.com/wp-content/uploads/2010/10/inflection-point.png"><img class="size-medium wp-image-74 " title="Strategic Inflection Point" src="http://www.lagerweij.com/wp-content/uploads/2010/10/inflection-point-300x210.png" alt="" width="300" height="210" /></a><p class="wp-caption-text">Strategic Inflection Point, copied from Mary&#39;s sheets</p></div>
<p>Grove describes the Inflection Point:</p>
<blockquote><p>A Strategic Inflection Point is that which causes you to make a fundamental change in business strategy.</p></blockquote>
<p>For anyone who&#8217;s been keeping up with the discussion on the Lean Start-up will see the similarity with Eric Ries&#8217; concept of the <a href="http://www.startuplessonslearned.com/2009/06/pivot-dont-jump-to-new-vision.html">Pivot</a>:</p>
<blockquote><p>&#8220;A structured course correction designed to test a new fundamental hypothesis about the product, strategy, and engine of growth.&#8221; &#8211; Eric Ries, <em>The Lean Startup</em></p></blockquote>
<p>The language is a bit different, of course, but there are obvious places of overlap. Grove&#8217;s Inflection Point has a main emphasis on external factors changing, necessitating change from the side of the company.</p>
<blockquote><p>A major change due to introduction of new technologies. A major change due to the introduction of a different regulatory environment. The major change can be simply a change in the customers&#8217; values, a change in what customers prefer.</p></blockquote>
<p>A Pivot can be seen as a reaction to encountering a Strategic Inflection Point. Pivots also happen in search of the correct strategy, product of market fit, which makes them more active and Ries&#8217; structured approach to identifying the need for a pivot seems to be exactly what Grove is looking for.</p>
<blockquote><p>The biggest difficulty with Strategic Inflection Points is telling one from the many changes that impinge on you in the business. How do you know if a change is just a garden variety change or qualified to be this monumental, catastrophic change category that we call an Inflection Point? I could never come up with a particularly satisfactory answer to that question. And I&#8217;m quite sure that if I could, I wouldn&#8217;t be talking about them. A set of principles along those lines would be extremely helpful as a competitive weapon because we deal with changes every day.</p></blockquote>
<p>Ries&#8217; innovation accounting provides the tools necessary to identify that Inflection Point. <a href="http://www.slideshare.net/dmc500hats/startup-metrics-for-pirates-long-version">Pirate Metrics</a>, as coined by <a href="http://500hats.typepad.com/500blogs/2007/09/startup-metrics.html">Dave McClure</a>,  can provide an early warning that the strategy for a product is not, or no longer, working. And there are some <a href="http://market-by-numbers.com/tag/pirate-metrics/">different variants</a> possible for different market situations.</p>
<p>Innovation accounting is the structured approach of doing cohort testing to determine the viability of a product&#8217;s engine of growth. This is not specific to a start-up. You can track Acquisition, Activation, Retention, Referral and Revenue for any product, whether in a small start-up trying to find the right product and sales model or an existing company that needs to track the health of existing products and models.</p>
<p><a href="http://www.lagerweij.com/wp-content/uploads/2012/05/AARRR.png"><img class="aligncenter size-medium wp-image-522" title="AARRR" src="http://www.lagerweij.com/wp-content/uploads/2012/05/AARRR-300x226.png" alt="" width="300" height="226" /></a></p>
<p>So if you&#8217;re worried about running into a Strategic Inflection Point for your business, this is what you do: start keeping (actionable) metrics on how your products are doing, what the growth rates are for their <a href="http://www.startuplessonslearned.com/2008/09/three-drivers-of-growth-for-your.html">engines of growth</a>, make those numbers clear and visible for everyone in your company, from the C-suite to the janitors, and if you do see a need to pivot, do so with clearly defined hypotheses, and check the results.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2012/05/14/the-strategic-inflection-point-as-a-special-case-pivot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Turning it up to 11</title>
		<link>http://www.lagerweij.com/2012/05/14/turning-it-up-to-11/</link>
		<comments>http://www.lagerweij.com/2012/05/14/turning-it-up-to-11/#comments</comments>
		<pubDate>Mon, 14 May 2012 14:28:09 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[leanstartup]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[organisational change]]></category>
		<category><![CDATA[stoos]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=513</guid>
		<description><![CDATA[It&#8217;s odd how I&#8217;ve been unable to be very consistent in my subject-matter for this blog. I tend to hop around, going from very technical subject to very organisational ones. Some might see this as lacking focus. Maybe that&#8217;s true. I&#8217;ve never been able to separate execution from organisation and vision very well. To me [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lagerweij.com/wp-content/uploads/2012/05/Volume-at-11-1024x683.jpg"><img class="alignleft size-thumbnail wp-image-516" title="Turning It Up To 11" src="http://www.lagerweij.com/wp-content/uploads/2012/05/Volume-at-11-1024x683-150x150.jpg" alt="Turning It Up To 11" width="150" height="150" /></a>It&#8217;s odd how I&#8217;ve been unable to be very consistent in my subject-matter for this blog. I tend to hop around, going from very technical subject to very organisational ones. Some might see this as lacking focus. Maybe that&#8217;s true. I&#8217;ve never been able to separate execution from organisation and vision very well. To me they seem intrinsically linked. It&#8217;s comforting to me that even such luminaries as <a href="http://www.threeriversinstitute.org/blog/?p=483">Kent Beck</a> also seem to <a href="http://www.justin.tv/startuplessonslearned/b/262656520">see things in this light</a>.</p>
<p>If I look at my bifurcated (tri-? n-?) interests, I see a striking resemblance in the states of technological, managerial and commercial maturity in the world. In all of these areas, the state of affairs is abysmal. In all three areas, we seem to have recognised that this is the case. In all three, though, most people performing those roles are so used to the current state that only rarely do they see that a different approach could bring improvement. Could turn their work &#8216;up to 11&#8242;. There are some differences, though.</p>
<h3>Technology</h3>
<p>On the technology side, we&#8217;ve pretty much identified what works, and what doesn&#8217;t. Basically, <a href="http://xprogramming.com/">XP</a> got things right. Others before that also hit the right spot, but we know a mature team sticking to XP practices will not mess things up beyond salvation. If we compare that approach to what one finds in the run-of-the-mill waterfall situation, the differences are so great that there is truly no comparison. There are other questions still at least partially open, but most of those are concerned with scale, organisation, and finding out what should be built. And thus belong in the other categories. The main challenge is one of education. And, granted, a bit of proselytising.</p>
<h3>Commercial</h3>
<p>More commercial questions are less clear-cut, at least for me. In my work I&#8217;ve very rarely seen commercial, product development and marketing decisions taken with anything resembling a structured approach of any kind of rigour. A <a title="Estimates and Commitments – The Hard Truth" href="http://www.lagerweij.com/2012/03/28/estimates-and-commitments-the-hard-truth/">business case, if one is available at al</a> is often only superficial, and almost never comes with any defined metrics and decision moments. The <a href="http://www.startuplessonslearned.com/">Lean Start-up</a> movement is the only place I&#8217;ve seen that is trying to improve that. Taking this approach out of the start-up and into all the product development and marketing departments in the world is going to take a while, but it will happen. If only because companies capable of doing that will completely out-perform the ones that don&#8217;t.</p>
<p>I don&#8217;t think the case here is as clear cut as on the technology side, but we have a start. The principles of the Lean Start-up are based on the same ideas as Agile development: know what you want the result to be (validated learning) and iterate using short feedback loops. What to do, exactly, in those feedback loops is known for some types of learning, in some situations, but we&#8217;re still working on expanding our knowledge and skills in this area.</p>
<h3>Management</h3>
<p>As the solutions for the commercial and technical sides of things are rooted in experimentation and short feedback cycles, one might assume that the same would be true for the management side of things. And it&#8217;s true that those techniques have value in management in many situations. Many of the ideas on management are based on feedback cycles, Lean/Deming&#8217;s PDCA is one, for instance, but <a href="http://www.youtube.com/watch?v=N7oz366X0-8">Cynefin</a>&#8216;s way of dealing with systems in the complex area is another. But we do seem to have many different ideas about how management should be done, how organisations should be structured and what gives people the best environment to work in.</p>
<p>One place where some of these ideas have gotten together is the <a href="http://stoosnetwork.org/">Stoos Network</a>. It&#8217;s interesting because of the different backgrounds of the people involved: Agile, Beyond Budgeting, Radical Management, Industry Leaders. Their initial gettogether this year resulted in a shared vision, with again an emphasis on learning.</p>
<blockquote><p>“Organizations can become learning networks of individuals creating value, and the role of leaders should include the stewardship of the living rather than the management of the machine.” &#8212; Stoos Communique</p></blockquote>
<p>This clearly expresses some of the shared values of the Stoos people, but still leaves quite a lot to the imagination. The people and ideas involved are interesting enough that I&#8217;ve volunteered to help organise one of the follow-up meetings,  the <a href="http://www.stoosnetwork.org/stoos-stampede-amsterdam/">&#8216;Stoos Stampede&#8217;</a>, which takes place in Amsterdam, 6 and 7 July.</p>
<p>Next to Stoos, as I said before, there are many ideas on how to change management. Lean has had an impact, but though the Toyota Way certainly does talk about people and how to support them in an organisation, this is not the prime focus of most Lean implementations. <a href="http://cognitive-edge.com/blog/entry/3229/calmalpha-2/">CALM</a> has started talking about combining Complexity, Agile and Lean ideas, but so far has also not posted any results.  We&#8217;re still a bit lost at sea, here.</p>
<p>So what would we need from a new management philosophy?</p>
<ul>
<li>We&#8217;d need to know how to structure an organisation. Stoos clearly think the current semi-hierarchical default is not workable for the future, or at the very least severely suboptimal. But what do &#8216;learning networks&#8217; look like? And how do we grow them?</li>
<li>We&#8217;d need to know how to provide the organisation with a purpose. A Mission, a Vision, a Goal. Whatever you want to call it. Most organisations do have some sort of mission statement, but it is usually so far removed from the everyday practice of everyone working within the organisation that it might as well be absent.</li>
<li>We&#8217;d need to know how to connect that purpose to the rest of the organisation. How do we link the work of everyone in the organisation to its stated purpose? If the mission is specific this should be possible. But if we connect the work too tightly, it could be stifling.</li>
<li>We&#8217;d need to know how to connect the organisation with its customers, its suppliers, its partners. This would be different out of necessity, as the structure of the organisation itself is different. It would also be different out of philosophy, as those relations take on different meaning is the goals of the organisation outside of the monetary rise in importance.</li>
<li>We&#8217;d need to know how to align such organisations with the demands of the outside marketplace and governance. If the organisation is more oriented towards longer term viability and purposeful behaviour, this might have a good long term effect on profitability, but will certainly in the short term have a different financial behaviour. And budgeting and bookkeeping are areas that need very specific attention with an eye on the external rules these subjects need to comply with.</li>
</ul>
<p>But apart from what new management would do to the idea of an organisation, there are also questions related more to the question of how to get there from here. Why would current managers want to change their organisations? Why would they want to change so drastically? There are plenty of reasons, but would they be convincing to the current CxO? What would they need to learn to be able to execute on such a vision? Will everyone enjoy working in these kinds of more empowering organisations, or will some people prefer something more hierarchical?</p>
<p>All of these things I want to know. Some of them we&#8217;ll discuss during the <a href="http://www.stoosnetwork.org/stoos-stampede-amsterdam/">Stoos Stampede</a> (<a href="http://stoos.ideascale.com/">propose a subject to discuss!</a>), but personally I think we&#8217;re still at the very earliest stages of this particular change. In the mean time, we do have a few good examples, and some patterns that seem to work, and I&#8217;m going to try and get a few more organisations turned up to 11.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2012/05/14/turning-it-up-to-11/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Unit Testing JavaScript with QUnit and Mockjax</title>
		<link>http://www.lagerweij.com/2012/05/04/unit-testing-javascript-with-qunit-and-mockjax/</link>
		<comments>http://www.lagerweij.com/2012/05/04/unit-testing-javascript-with-qunit-and-mockjax/#comments</comments>
		<pubDate>Fri, 04 May 2012 13:37:22 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=503</guid>
		<description><![CDATA[I&#8217;ve been experimenting a bit with JavaScript. My lack of real knowledge of the language, apart from some simple DOM-manipulations, is starting to become embarrassing! So a couple of months ago I decided I should pick up the JS axe, and do some chopping. And the first step to guiding yourself into any new programming [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been experimenting a bit with JavaScript. My lack of real knowledge of the language, apart from some simple DOM-manipulations, is starting to become embarrassing!</p>
<p>So a couple of months ago I decided I should pick up the JS axe, and do some chopping. And the first step to guiding yourself into any new programming language is the selection of (or writing of&#8230;) the unit testing framework!</p>
<p>My first choice was <a href="http://docs.jquery.com/Qunit">qunit</a>. I&#8217;d decided that I&#8217;d stick close to the <a href="http://jquery.com/">jquery</a> way of doing things, to begin with, so this seemed a logical choice. I&#8217;m very much used to automated build systems, so my first steps, after getting the most basic unit test running in a browser, was of automating the testing. This was not as easy as I had hoped! Having to start a full-blown webbrowser during a build is frowned upon. It requires, apart from plenty of time, that the build server has a graphical UI running and available, and is rather prone to errors. Setting-up something like <a href="http://www.mozilla.org/rhino/">Rhino</a> is easy enough, but will fail as soon as we need to do things like DOM manipulation. Luckily, there turned out to be a reasonable compromise: using <a href="http://phantomjs.org/">PhantomJS</a>.</p>
<p>PhantomJS is a full WebKit browser, but one that is completely headless! This means you can have it load web-pages, which are fully functional, without needing to have a UI visible. It&#8217;s completely scriptable from JavaScript, and runs very quickly. Great! The PhantomJS pages even included some examples on<a href="http://code.google.com/p/phantomjs/wiki/TestFrameworkIntegration"> how to use it with qunit</a>.</p>
<p>Of course, as any JavaScript I write is usually part of a Java project, and I had actually written a little (<a href="https://github.com/Atmosphere/atmosphere">atmosphere</a> based) server for my test project, I wanted to run this from a maven build. I found the <a href="http://code.google.com/p/phantomjs-qunit-runner/">phantomjs-qunit-runner</a> maven plugin, and thought I was all set to go!</p>
<p>But it wasn&#8217;t that easy&#8230; The maven plugin worked fine, but had trouble understanding javascript libraries loaded during testing. Since my tests involved mocking out the service I was using (they were supposed to be unit tests, after all!) I could not manage to run them using the phantomjs-qunit-plugin.</p>
<p>It took me a <a href="http://code.google.com/p/phantomjs-qunit-runner/source/list">few attempts</a> to understand how the maven plugin dealt with making separate JavaScript files available to PhantomJs, but I finally managed to make it work.</p>
<blockquote><p>If you are going to try anything from this post, make sure that you have a version of the phantomjs-qunit-runner that has my changes! As of writing, that means <a href="http://code.google.com/p/phantomjs-qunit-runner/source/checkout">checking out trunk</a>, and building it yourself.</p></blockquote>
<p>From this point on, everything is easy!</p>
<p>We  start with a maven pom.xml that sets up the phantomjs runner:</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;build&gt;
        &lt;finalName&gt;GoalServer&lt;/finalName&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;net.kennychua&lt;/groupId&gt;
                &lt;artifactId&gt;phantomjs-qunit-runner&lt;/artifactId&gt;
                &lt;version&gt;1.0.12-SNAPSHOT&lt;/version&gt;
                &lt;configuration&gt;
                    &lt;jsSourceDirectory&gt;src/main/javascript/&lt;/jsSourceDirectory&gt;
                    &lt;jsTestDirectory&gt;src/test/javascript/&lt;/jsTestDirectory&gt;
                    &lt;ignoreFailures&gt;false&lt;/ignoreFailures&gt;
                    &lt;phantomJsExec&gt;/home/wouter/opt/phantomjs/bin/phantomjs&lt;/phantomJsExec&gt;
                    &lt;libraries&gt;
                        &lt;directory&gt;src/test/javascript/lib/&lt;/directory&gt;
                        &lt;includes&gt;
                            &lt;include&gt;**/*.js&lt;/include&gt;
                        &lt;/includes&gt;
                    &lt;/libraries&gt;
                &lt;/configuration&gt;
                &lt;executions&gt;
                    &lt;execution&gt;
                        &lt;phase&gt;test&lt;/phase&gt;
                        &lt;goals&gt;&lt;goal&gt;test&lt;/goal&gt;&lt;/goals&gt;
                    &lt;/execution&gt;
                &lt;/executions&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
    &lt;/build&gt;
</pre>
<p>You can see that I&#8217;ve stuck to the standard maven directory structure, keeping my javascript in the <code>src/main/javascript</code> and its tests in <code>src/test/javascript</code>. You do need to specify where the phantomjs executable is installed. This is slightly unfortunate, and should in a real project be delegated to a configuration setting (in the maven settings.xml, probably). For an example, having it hard-coded is clearer.<br />
The part of this that I added is the libraries tag, where you use the default maven fileset syntax to define all the libraries you want to have available when executing the tests. In my codebase, I put all the javascript libraries in src/test/javascript/lib, but an argument could be made to put these somewhere outside of your src dirs. The plugin doesn&#8217;t care, as the fileset is translated to fully qualified paths before handing things over to PhantomJS.</p>
<p>I must admit that my goals weren&#8217;t set very high for my first test. After all, this was to be my first javascript test! So it turned out like this:</p>
<pre class="brush: jscript; title: ; notranslate">
test(&quot;Test Test&quot;, function() {
    console.log(&quot;Testing test&quot;);
    equal(1, 0, &quot;equal!&quot;);
});
</pre>
<p>Very exciting! And indeed, it failed:</p>
<pre class="brush: bash; title: ; notranslate">
[ERROR] Failed to execute goal net.kennychua:phantomjs-qunit-runner:1.0.12-SNAPSHOT:test (default) on project GoalServer: One or more QUnit tests failed -&gt; [Help 1]
</pre>
<p>Now if you look carefully, you might be able to fix that test yourself. I&#8217;ll leave it at that, because I was quick to move on to my next step, which involved calling a function in javascript code which was in another file, and not located in the test code directory.</p>
<pre class="brush: jscript; title: ; notranslate">
test(&quot;Test true&quot;, function() {
   equal(1, GameScheduleClient.testing.isTrue(), &quot;It s true&quot;);
});
</pre>
<p>This is calling the following mindbogglingly complex function in <code>src/main/javascript/GameScheduleClient.js</code>:</p>
<pre class="brush: jscript; title: ; notranslate">
var GameScheduleClient = GameScheduleClient || {};

GameScheduleClient.testing = function() {
    return {
        isTrue : function() {
            return 1;
        }
    };
} ();
</pre>
<p>If this doesn&#8217;t work, take a look at the advice above, and ensure you have a version of the qunit-runner that includes the patches I did. Otherwise you&#8217;ll have to do what I did, and run around in circles for a day or so.</p>
<p>Next step is to be able to call a service, which we&#8217;ll mock with <a href="https://github.com/appendto/jquery-mockjax">MockJax</a>. I&#8217;m not going to explain all the details of how mockjax works, for that I suggest you read something <a href="http://enterprisejquery.com/2010/07/mock-your-ajax-requests-with-mockjax-for-rapid-development/">from someone who actually understands this stuff</a>. But as long as you&#8217;ve put the library in the right place, and use the right version of the maven plugin, the following code should work:</p>
<pre class="brush: jscript; title: ; notranslate">
module(&quot;Mock Ajax&quot;, {
    setup: function () {
        $.mockjax({
            url:&quot;/mockedservice&quot;,
            contentType:&quot;text/json&quot;,
            responseText:[ { bla:&quot;Test&quot; }]
        });
    },
    teardown: function () {
        $.mockjaxClear();
    }
});
asyncTest(&quot;Test I get a mocked response from a service&quot;, function () {
    $.getJSON(&quot;/mockedservice&quot;, function (response) {
        ok(response, &quot;There's no response!&quot;);
        equal(response.responseText.bla, &quot;NotTest&quot;, &quot;response was not Test&quot;);
        start();
    });
});
</pre>
<p>Note that there is no supporting javascript method that we&#8217;re actually testing here. The <code>$.mockjax</code> call sets up mockjax to respond to a (jquery) ajax call to the <code>/mockedservice</code> url with a response containing the string <code>Test</code>. The <code>$.getJSON</code> call is a regular jquery ajax call, and this test simply verifies that the response.</p>
<p>The test module has a separate setup and teardown, which are called for each test, as you&#8217;d expect in an xUnit type framework. The test must be an explicit <code>asyncTest</code>, that is <code>start</code>ed explicitly within that method.</p>
<p>And that, as they say, is all there is to it! All in all, qunit provides a simple interface for basic unit-testing. I&#8217;m now looking into <a href="http://pivotal.github.com/jasmine/">Jasmine</a> for a more elaborate set-up, and a little better integration with the maven build environment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2012/05/04/unit-testing-javascript-with-qunit-and-mockjax/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Estimates and Commitments &#8211; The Hard Truth</title>
		<link>http://www.lagerweij.com/2012/03/28/estimates-and-commitments-the-hard-truth/</link>
		<comments>http://www.lagerweij.com/2012/03/28/estimates-and-commitments-the-hard-truth/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 14:59:22 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[humour]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[shorties]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=497</guid>
		<description><![CDATA[My esteemed colleague, Ciarán ÓNéill just posted a nice and considered discussion on estimation, velocity and cycle time. I, however, do not plan on being so considered, or considerate. You see, too many people are bent under the crushing weight of living up to estimates. Even reckoning that they provided these estimates to begin with, the [...]]]></description>
			<content:encoded><![CDATA[<p>My esteemed colleague, <a href="http://nimble-b-jack.blogspot.com/">Ciarán ÓNéill</a> just posted a nice and considered<a href="http://nimble-b-jack.blogspot.com/2012/03/to-estimate-or-not-to-estimate-that-is.html"> discussion on estimation, velocity and cycle time</a>. I, however, do not plan on being so considered, or considerate.</p>
<p>You see, too many people are bent under the crushing weight of living up to estimates. Even reckoning that they provided these estimates to begin with, the continuing focus on this fragile, incomplete, numerical slice of their work is having a seriously detrimental effect on our industry.</p>
<p>I can&#8217;t count how many times I&#8217;ve seen this playing out, in different companies. The poor product manager, even if he&#8217;s sometimes called Product Owner, has made his business case; calculated the expected ROI; probably even spent lots of time plotting the <a href="http://en.wikipedia.org/wiki/Rate_of_return">Rate of Return</a> over time; thinking of ways to track the relevant figures closely so as to be able to adjust the approach over time; and shared these ideas with the broadest set of people within the company to get as much feedback as possible.</p>
<p>He&#8217;s calculated expected additional visitors to the website, impact on conversion and retention rates, and put in place the instruments to verify those numbers. He&#8217;s had his numbers checked by his peers, and carefully explained them in detail to the development team he&#8217;s expecting the work to be done by. He&#8217;s done everything he can to make sure his estimates are as accurate as he can make them.<a href="http://www.lagerweij.com/wp-content/uploads/2012/03/noose_tie1.jpg"><img class="alignright size-full wp-image-499" title="Noose Tie" src="http://www.lagerweij.com/wp-content/uploads/2012/03/noose_tie1.jpg" alt="" width="311" height="400" /></a></p>
<p>And <em>then</em> he&#8217;s done the additional work to make sure he can not only track whether he&#8217;s on-track, but also proposed different scenarios on how to react if they&#8217;re not. He&#8217;s done all that for all the different features, and new products, that he deals with, and used the expected returns to prioritise work in the way that profits the company most.</p>
<p>Now he knows, our intrepid product manager, that he&#8217;s dealing with a complex issue! He&#8217;s been careful to include confidence margins, bandwidths of possible returns, and comments stressing uncertainties and risk factors. He&#8217;s done everything right.</p>
<p>So what happens after a few sprints, when the initial (bare minimum) features have seen the day of light and basked in the glory of unadulterated customer scorn? He&#8217;s still in the bandwidth of expected returns, but he can see that he&#8217;ll probably end-up on the lower end of the range he expected. At the iteration review he shows the current results to the development team (there&#8217;s a few managers in the audience as well), shows how things are progressing, where he sees ways to change the feature to get more customers interested, and how the priorities need to be adjusted to make this happen.</p>
<p>Some of the feature, sometimes a lot of it, needs to be cut. Including some functionality already released! After all, no-one is actually using that. And to make it a success, the team will probably have more work to do than was originally expected. In the end, though, they still have a very good chance of making this a success.</p>
<p>And that&#8217;s where the trouble hits home. The poor guy is lambasted for not being able to stick to his estimates. He came up with those estimates himself, he should <em>make</em> them work. After all, the numbers added-up, didn&#8217;t they? Everyone else is doing their part, and if he&#8217;d just put a little <em>effort</em> into it, he really should be able to stick to the plan, and ensure that customers start using the new feature as was planned. Perhaps adding more advertising for this feature is what is needed, and budget should be found for some additional effort on that part. Or maybe, since he&#8217;s the one not delivering, he should do that advertising work himself over the weekend.</p>
<p>It&#8217;s cruel. We, as an industry, should stop holding our product managers to standards that are impossible to reach. We should accept the inherent complexity of the problem, and help them tackle it by planning, tracking, and <em>adjusting the plan </em>as necessary. In fact, if we make the steps and adjustments small and fast enough, we could possibly relieve them from a large part of the yoke of budgeting, automating many of the tracking of adoption, and making them fully recognised, adult members of the organisation!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2012/03/28/estimates-and-commitments-the-hard-truth/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>XP is Classic Rock</title>
		<link>http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/</link>
		<comments>http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 10:48:38 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[humour]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=470</guid>
		<description><![CDATA[A while back I had a little fun comparing Agile to Rock&#8217;n'Roll. It&#8217;s still one of my favourite posts, and after my recent talk on the benefits of TDD, I got the idea that the best follow-up on that is something about the XP practices. Test Driven Development with Bonnie Riatt The first artist that [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I had a little fun <a title="Agile is Rock ‘n’ Roll" href="http://www.lagerweij.com/2011/07/11/agile-is-rock-n-roll/">comparing Agile to Rock&#8217;n'Roll</a>. It&#8217;s still one of my favourite posts, and after my recent talk on the <a title="Technical Excellence: Why you should TDD!" href="http://www.lagerweij.com/2012/01/26/technical-excellence-why-you-should-tdd/">benefits of TDD</a>, I got the idea that the best follow-up on that is something about the XP practices.</p>
<p style="text-align: center;"><a href="http://xprogramming.com/xpmag/whatisxp"><img class="aligncenter size-medium wp-image-471" title="XP Practices" src="http://www.lagerweij.com/wp-content/uploads/2012/02/circles-300x225.jpg" alt="" width="300" height="225" /></a></p>
<h2>Test Driven Development with Bonnie Riatt</h2>
<p>The first artist that came up was Bonnie Riatt. This is mostly because Ron Jeffries has mentioned her a few times on the Scrum Development mailing list, and since that picture above is from his site, I figure I owe it to him. Oh, and it&#8217;s pretty good music!</p>
<span style="text-align:center; display: block;"><a href="http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/"><img src="http://img.youtube.com/vi/3_FcAg4ObRQ/2.jpg" alt="" /></a></span>
<p>She sings &#8216;<em>I Will Not Be Broken</em>&#8216;, which is as good a summary of Test First development as one could wish for. And if you take into account lines such as &#8216;<em>But I know where I&#8217;m not going</em>&#8216;, and &#8216;<em>Pull me round; Push me to the limit&#8217;</em>, then it&#8217;s perfectly clear we&#8217;re going through that TDD process cycle of Red, Green, Refactor in as small a steps as possible. Isn&#8217;t it?</p>
<h2>Pair Programming with Aerosmith / The Beatles</h2>
<p>I already mentioned &#8216;<em>Come Together</em>&#8216; in the <a title="Agile is Rock ‘n’ Roll" href="http://www.lagerweij.com/2011/07/11/agile-is-rock-n-roll/">last post</a>, and to be honest, I can&#8217;t think of a better Pair Programming song. It does bring with it some of the oft heard objections to pairing, with &#8216;<em>Hold you in his arms till you can feel his disease</em>&#8216; being a succinct summary. These things have to be overcome, but you&#8217;ll end up with a classic that is covered by practically everyone. I&#8217;m going for the Aerosmith version, as their guitar work shows the advantages of having two great practitioners working together&#8230;</p>
<span style="text-align:center; display: block;"><a href="http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/"><img src="http://img.youtube.com/vi/4cemWUUfCEQ/2.jpg" alt="" /></a></span>
<p>A great runner up was &#8216;<a href="http://www.youtube.com/watch?v=jKVTNRZAvO0">Let Me Share The Ride</a>&#8216;, by The Black Crowes. All about how sharing the ride can be done with someone who isn&#8217;t a burden&#8230;</p>
<h2>Refactoring with Eric Clapton</h2>
<p>So how about Refactoring? Well, refactoring is all about removing duplication. There are many songs about duplicitive women and men, talking about how they&#8217;ve been done wrong, but apart from having a completely different meaning, I&#8217;d also have to save those for a special post about management practices. A much more suitable song is the classic &#8216;<em>Double Trouble</em>&#8216; blues song, which you can see below in a marvellous version by Eric Clapton together with Steve Winwood. This song fits so well because it reminds the young programmer of the dangers that duplication in code brings. &#8216;<em>I have no job, laid of and I&#8217;m having Double Trouble</em>&#8216;</p>
<span style="text-align:center; display: block;"><a href="http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/"><img src="http://img.youtube.com/vi/YW1xmwReccg/2.jpg" alt="" /></a></span>
<h2>Simple Design with The Ramones / The Doors</h2>
<p>Simple Design is not simple to do. We all have a strong tendency to try to take into account all kind of possible future scenarios when writing code. So the advice that comes out of the The Doors song &#8216;<em>Take it as it comes&#8217;</em> is very apt. I&#8217;ve selected a cover version by The Ramones here, but the central message is the same: &#8220;Take it easy baby, take it as it comes. Don&#8217;t move too fast if you want your love to last&#8221;. Of course, read &#8216;code&#8217; for &#8216;love&#8217;  there, but that should be automatic for any kind of real Craftsman&#8230;</p>
<span style="text-align:center; display: block;"><a href="http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/"><img src="http://img.youtube.com/vi/SSiBU093DjQ/2.jpg" alt="" /></a></span>
<h2>Collective Code Ownership with The Red Hot Chili Peppers</h2>
<div>Moving on from there we go on to the circle that deals with wider team alignment. It would be easy to slip in the &#8216;<em>Internationale</em>&#8216; here, but that really doesn&#8217;t do this practice justice. Another thought was &#8216;You Don&#8217;t Own Me&#8217; by Dusty Springfield, but it really didn&#8217;t fit into the classic rock theme, and is much more about not being allowed to access the&#8230; object under discussion.</div>
<div>The answer was, of course, found with the Red Hot Chili Peppers song &#8216;<em>Give It Away</em>&#8216;! Not only do they  know that sharing the code makes everyone wiser: &#8220;Realize I don&#8217;t want to be a miser;<br />
Confide with sly you&#8217;ll be the wiser&#8221;, but they know that this practice is crucial to working Agile:</div>
<blockquote>
<div>Lucky me swimmin&#8217; in my ability</div>
<div>Dancin&#8217; down on life with agility</div>
</blockquote>
<div><span style="text-align:center; display: block;"><a href="http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/"><img src="http://img.youtube.com/vi/Mr_uHJPUlO8/2.jpg" alt="" /></a></span></div>
<div></div>
<h2>Continuous Integration with Bruce Springsteen</h2>
<div>Of course, you can&#8217;t have collective ownership without a good Continuous Integration system. This one is easy, &#8217;cause that code is &#8216;<em>Born to Run&#8217;!</em></div>
<div></div>
<div><span style="text-align:center; display: block;"><a href="http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/"><img src="http://img.youtube.com/vi/IxuThNgl3YA/2.jpg" alt="" /></a></span></div>
<h2>Customer Tests with Led Zeppelin</h2>
<div>Working closely with your customer is the best way to ensure that you&#8217;re building the right thing. And having the customer closely involved with defining the acceptance test is the answer to avoiding the dreaded <em>&#8216;Communication Breakdown&#8217;</em> that has left so many project is shambles:</div>
<blockquote>
<div>Communication breakdown, it&#8217;s always the same<br />
Havin&#8217; a nervous breakdown, a-drive me insane</div>
</blockquote>
<div><span style="text-align:center; display: block;"><a href="http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/"><img src="http://img.youtube.com/vi/KqF3J8DpEb4/2.jpg" alt="" /></a></span></div>
<div></div>
<h2>Sustainable Pace with Queen</h2>
<div>People who know me know I can&#8217;t resist a good Queen song. This one emphasises precisely the opposite of what we want, but a negative test case can be very effective at communicating the desired functionality, can&#8217;t it? With &#8216;<em>The Show Must Go On</em>&#8216;, we are confronted with all the dysfuction we find when teams push too hard to deliver impossible projects. Working in empty offices after everyone else has gone home, trying to find that last bug before it&#8217;s ready for production:</div>
<blockquote>
<div>Empty spaces &#8211; what are we living for<br />
Abandoned places &#8211; I guess we know the score<br />
On and on, does anybody know what we are looking for&#8230;</div>
</blockquote>
<div>The classical heroic programmer, working as an unsung (until now!) hero:</div>
<blockquote>
<div>Another hero, another mindless crime<br />
Behind the curtain, in the pantomime<br />
Hold the line, does anybody want to take it anymore</div>
</blockquote>
<div> <span style="text-align:center; display: block;"><a href="http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/"><img src="http://img.youtube.com/vi/4ADh8Fs3YdU/2.jpg" alt="" /></a></span></div>
<div></div>
<div>And that&#8217;s it, for this post. I really wanted to get into the XP <em>Metaphor</em> practice as well, but it ended up with me getting headaches trying to understand the hidden meanings of songs like <a href="http://www.straightdope.com/columns/read/2448/whats-the-story-behind-led-zeppelins-stairway-to-heaven">Stairway to Heaven</a>, and <a href="http://www.straightdope.com/columns/read/1053/in-the-song-hotel-california-what-does-colitas-mean">Hotel California</a>. Better not go there&#8230;</div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2012/02/13/xp-is-classic-rock/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Success</title>
		<link>http://www.lagerweij.com/2012/02/03/success/</link>
		<comments>http://www.lagerweij.com/2012/02/03/success/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 16:38:14 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[shorties]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[retrospective]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=415</guid>
		<description><![CDATA[I recently wrote here about the benefits of failure. One of my recent failures reminded me about the importance of success. I thought that to be nicely circular enough to warrant a new post! You see, while it&#8217;s important to embrace failure &#8211; how else are you going to learn? &#8211; it is just as important [...]]]></description>
			<content:encoded><![CDATA[<p>I recently wrote<a title="Failure" href="http://www.lagerweij.com/2011/11/16/failure/"> here about the benefits of failure</a>. One of my recent failures reminded me about the importance of success. I thought that to be nicely circular enough to warrant a new post!</p>
<p>You see, while it&#8217;s important to embrace failure &#8211; how else are you going to learn? &#8211; it is just as important that you don&#8217;t set yourself up for failure too often.</p>
<p>One very popular way that agile teams do set themselves up for failure is by taking in too much work in a sprint. True, this wouldn&#8217;t be too bad if failure was better accepted: we&#8217;d just recognise we were not going to make it, and drop some stories from the sprint. And learn to take in less work for the next sprint. But this is not what happens. What happens is that we try to succeed anyway. And that we don&#8217;t stick to our own rules of work when doing so. So we work late (making the whole concept of velocity useless, a way I missed in my <a title="5 ways to make sure your sprint velocity is a useless number" href="http://www.lagerweij.com/2011/07/08/5-ways-to-make-sure-velocity-is-useless/">previous list of ways to do that</a>), or we reduce quality. Or both, usually.</p>
<p>But here I am getting stuck on failure again. We were talking about success!</p>
<p>When a team is starting out with agile, they are bound to run into many issues. The short feedback cycles ensure that they&#8217;ll be confronted with all kinds of ways in which their current process is suboptimal. This is not always a nice experience and if it is not mitigated by successes in improving matters, a team can become discouraged, and let their agile experiment die off.</p>
<p><a href="http://www.lagerweij.com/wp-content/uploads/2012/02/success-sometimes-its-still-failure.jpg"><img class="aligncenter size-medium wp-image-466" title="success-sometimes-its-still-failure" src="http://www.lagerweij.com/wp-content/uploads/2012/02/success-sometimes-its-still-failure-300x158.jpg" alt="" width="300" height="158" /></a></p>
<p>In the recent situation I was referring to, this is what happened. The team had quite a good grasp of what was wrong in their process. In fact, during our initial &#8216;Scrum Introduction&#8217; workshop some clear issues came up. We always do such a workshop in the form of an extended retrospective, interlaced with some theory and games. In that retrospective part, one of the top issues that came up was that of team stability. Teams were reconfigured for every project, but people were also regularly reassigned in a running project. Some further questioning quickly unearthed frequent quality issues in both requirements and code, causing people to be needed for projects in trouble <em>after</em> release or in &#8216;user acceptance testing&#8217;.</p>
<blockquote><p>Note: UAT is <em>not</em> supposed to be a process where your users are the first people to test your code!</p></blockquote>
<p>So, knowing that the underlying issue was one of quality we started by focusing on quality. Can&#8217;t go wrong, right? But the feedback loop from the quality issues to the &#8216;reassignment&#8217; issue was very long. Also, since the reassignment was to other teams, that were already in trouble, the improvements we could make had no possible influence on the stability of the team. And so, when <em>during</em> a planning meeting for the third sprint the third person was &#8216;temporarily&#8217; moved to another team, we figured out that we had set this team up to fail.</p>
<p>So what should we have done? &#8216;We&#8217; being me as a coach, or the team involved in a &#8211; management approved &#8211; change process. We should have gone to the company management before starting any sprints (so right after that retro/workshop) and asked for their support, guaranteeing that this team would be left intact for the duration of the project. We should at the same time have advised working on the widespread quality issues.  I should add that it would have been exceedingly unlikely that that broader support would have been given, but then at least it would have saved everyone some work and more importantly, disappointment.</p>
<p>The lesson here is that when you find your impediments, you should make them visible to the wider environment, and make sure that you actively work to remove them in as short a time as is possible. This most definitely includes involving management, and will underline their support for the agile transition in progress. Not doing that is denying the team a chance to experience success. And that&#8217;s a great way to sabotage your change process.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2012/02/03/success/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Technical Excellence: Why you should TDD!</title>
		<link>http://www.lagerweij.com/2012/01/26/technical-excellence-why-you-should-tdd/</link>
		<comments>http://www.lagerweij.com/2012/01/26/technical-excellence-why-you-should-tdd/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 00:22:21 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=422</guid>
		<description><![CDATA[Last Thursday, Januari 19, I gave a short talk at ArrowsGroup&#8217;s Agile Evangelists event in Amsterdam. Michiel de Vries was the other speaker, talking about the role of Trust in Agile adoptions. On my recommendation the organisers had changed the format of the evening to include two Open Space Technology sessions, right after each 20 minute talk, with [...]]]></description>
			<content:encoded><![CDATA[<p>Last Thursday, Januari 19, I gave a short talk at <a href="http://www.arrowsgroup.com/">ArrowsGroup&#8217;s</a> <a href="http://news.arrowsgroup.com/newsletters/viewwithtoken.aspx?MTEzNzo4Mg==!*!2305">Agile Evangelists event</a> in Amsterdam. <a href="http://agileadvisory.wordpress.com/">Michiel de Vries</a> was the other speaker, talking about the role of Trust in Agile adoptions. On my recommendation the organisers had changed the format of the evening to include two Open Space Technology sessions, right after each 20 minute talk, with the subject of the talk as its theme. This worked very well, and we had some lively discussions going on after both talks, with the 50 or so attendents talking in four or five groups. I&#8217;m happy it worked out, as it was the first time I facilitated an Open Space.</p>
<p>My own talk dealt with Technical Excellence, and in particular with Test Driven Development, and why it&#8217;s a good idea to use it. My talk was heavily inspired by <a href="http://www.renaissancesoftware.net/">James Grenning</a>&#8216;s closing keynote at the <a title="Scrum Gathering London 2011 – day 3" href="http://www.lagerweij.com/2011/10/26/scrum-gathering-london-2011-day-3/">Scrum Gathering in London</a> last year. He even allowed me to use some of his sheets, which were very important in getting the argument across. I&#8217;ll go through the main points of my talk below.</p>
<p>For me the big challenge was to manage to fit the most important parts of what I wanted to say within the 20 minutes I had available to me. As in software development, it turns out presentation writing is about making the result short, clear, and without duplication. The first attempt at this presentation took about 50 minutes to tell, and subsequent versions got shorter and shorter&#8230;</p>
<p>The complete set of slides is here. And this is how the story went:</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_1.png"><img class="size-medium wp-image-444 aligncenter" title="technical_excellence_20120119_slide_1" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_1-300x225.png" alt="" width="300" height="225" /></a></p>
<p>I quickly introduced the subject by talking about Agile&#8217;s rise in popularity ever since the term was introduced ten years ago (and before, really, for the separate methods that already existed). About35% of companies reported using some form of Agile early last year, in a forrester report. Most of those companies are showing positive effects of this adoption. No matter what you think of the quality of investigation of the Standish Report, for their internally consistent measure of project success the improvements over the last ten years have been distinct.</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_2.png"><img class="size-medium wp-image-443 aligncenter" title="technical_excellence_20120119_slide_2" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_2-300x225.png" alt="" width="300" height="225" /></a></p>
<p>That&#8217;s not the whole story, though. Many teams have been finding that their initial success hasn&#8217;t lasted. Completely apart from any other difficulties in getting Agile accepted in an organisation, and there are plenty of othere, this particular one is clearly recognisable.</p>
<p>There is a slowing of development. Usually due to having a lot of defects that come out in production, but also because of an increasing fragility of the codebase that means that any change you do can (and will&#8230;) have unforseen side-effects. One very frequent indicator that this is happening in your team is the increase in requests for &#8216;refactoring&#8217; stories from the team. By this they usually mean &#8216;rework&#8217; stories, where major changes (&#8216;clean-up&#8217;) is needed for them to work more comfortably,  and productively, with the code. In this situation the term &#8216;Technical Debt&#8217; is also becoming a more familiar part of the vocabulary.</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_3.png"><img class="size-medium wp-image-442 aligncenter" title="technical_excellence_20120119_slide_3" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_3-300x225.png" alt="" width="300" height="225" /></a></p>
<p>And that is why it is time to talk about technical excellence. And why the people who came up with this whole Agile thing were saying last year that encouraging technical excellence is the top priority! OK, they said &#8216;demand&#8217;, but I have less clout than those guys&#8230; They said other things, but this was a 20min. presentation, which is already too short for even this one. It is on top, though.</p>
<p>I further emphasised the need with a quote by Jeff Sutherland:</p>
<blockquote><p>“14 percent, are doing extreme programming practices inside the SCRUM, and there is where we see the fastest teams: using the SCRUM management practice with the XP engineering practices inside.” -<a href="http://2011.secr.ru/lang/en-en/home/press-center/jeff-sutherland-interview"> Jeff Sutherland, 2011</a></p></blockquote>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_5.png"><img class="size-medium wp-image-440 aligncenter" title="technical_excellence_20120119_slide_5" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_5-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Since Jeff was nice enough to mention XP, Extreme Programming, this allows us to take a look at <a href="http://c2.com/cgi/wiki?ExtremeProgrammingCorePractices">what those XP Engineering practices are</a>.</p>
<p>We&#8217;re mainly talking about the inner circle in the picture, since those are the practices that are most directly related to the act of creating code. The second circle of Hell^H^H^H^H XP is more concerned with the coordination between developers, while the outer ring deals with coordination and cooperation with the environment.</p>
<p>From the inner circle, I think Test Driven Development is the most important one. The XP practices are designed to reinforce each other. One good way to do Pair Programming, for instance is by using the TDD development cycle to drive changing position: First one developer writes a test, then the other writes a piece of implementation, doeas some refactoring, and writes the next test, after which he passes the keyboard back to the first, who starts through the cycle again. And, since you are  keeping each-other honest, it becomes easier to stick to the discipling of working Test Driven.</p>
<p>TDD is, according to my humble opinion, a little more central than the others, even if only because it is so tightly woven with Refactoring and Simple Design. So let&#8217;s talk further about TDD!</p>
<p>Test Driven Development has a few different aspects to it, which are sometimes separately confused with the whole of TDD. I see these aspects:</p>
<ul>
<li>Automated Tests</li>
<li>Unit Tests</li>
<li>Test-First</li>
<li>The Red, Green, Refactor process</li>
</ul>
<p>I&#8217;ve had plenty of situations where people were claiming to do TDD, but it turned out their tests were not written before the production code, and were at a much higher level than you&#8217;d want for unit tests. Well, let&#8217;s look at those different aspects of TDD, and discuss why <strong>each of them</strong> is a good idea.</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_7.png"><img class="size-medium wp-image-438 aligncenter" title="technical_excellence_20120119_slide_7" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_7-300x225.png" alt="" width="300" height="225" /></a></p>
<h3>Why Automated Tests?</h3>
<p>This is where some of the wonderful slides of James Grenning come in. In fact, for a much better discussion of these graphs, you should read <a href="http://www.renaissancesoftware.net/blog/archives/206">his blog post</a>! If you&#8217;re still with me, here&#8217;s the short version: Every Sprint you add new functionality, and that new functionality will need to be tested, which takes some fraction of the time that&#8217;s needed to implement it. The nasty thing is that while you&#8217;re adding new functionality, there is a good chance of breaking some of the existing functionality.</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_8.png"><img class="size-medium wp-image-437 aligncenter" title="technical_excellence_20120119_slide_8" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_8-300x225.png" alt="" width="300" height="225" /></a></p>
<p>This means that you need to test the new functionality, and *all* functionality built in previous sprints! Testing effort grows with the age of your codebase.</p>
<p>Either you skip parts of your testing (decreasing quality) or you slow down. It&#8217;s good to have choices. So what happens is that pretty soon you&#8217;re stuck in the &#8216;untested code gap&#8217;, and thus stuck in the eternal firefighting mode that it brings.</p>
<p>&nbsp;</p>
<p>This seems to be a great time to remind reader that the primary goal of a sprint is to release complete, working, <strong>tested </strong>software. And if that doesn&#8217;t happen, then you will end-up having to do that testing, and fixing, at a later date.</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/hardening_sprints_1.png"><img class="size-medium wp-image-456 aligncenter" title="hardening_sprints_1" src="http://www.lagerweij.com/wp-content/uploads/2012/01/hardening_sprints_1-300x32.png" alt="" width="300" height="32" /></a></p>
<p>To try to illustrate this point, I&#8217;ve drawn this in a slightly suggestive form of a&#8230; waterfall!</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/hardening_sprints_2.png"><img class="aligncenter size-medium wp-image-455" title="hardening_sprints_2" src="http://www.lagerweij.com/wp-content/uploads/2012/01/hardening_sprints_2-300x57.png" alt="" width="300" height="57" /></a></p>
<h3>Why Unit Tests?</h3>
<p>So what is the case for unit tests? Let me first assure you that I will be the last to tell you that you shouldn&#8217;t have other types of tests! Integration Tests, Performance Test, Acceptance Tests, &#8230; And certainly also do manual exploratory testing. You will never think over everything beforehand. But. Those tests  should be added to the solid base of code covered by unit tests.</p>
<h4>Combinatorial Complexity</h4>
<p>Object Oriented code is built out of objects that can have a variety of inner states, and the interactions between those objects. The possible different states of such interacting components grows huge very quickly! That means that testing such a system from the outside requires very big tests, that would not have easy access to all of the details of all possible states of all objects. Unit Tests, however are written with intimate knowledge of each object and its possible states, and can thus ensure that all possible states of the object are covered.</p>
<h4>Fine Grained tests make it easier to pin-point defects</h4>
<p>Perhaps obvious, but if you have small tests covering a few lines of code each, when a defect is introduced, the test will accurately point to the defect with a couple of lines of accuracy. An integration or acceptance test will perhaps show the defect, but still leaves tens, hundreds or thousands of lines of code to comb through in search of the defect.</p>
<h4>Code documentation that stays in sync</h4>
<p>Unit tests document the interfaces of objects by demonstrating how the developer means them to be used. And because this is code, the documentation cannot get out of sync without breaking the build!</p>
<h4>Supports changing the code</h4>
<p>Unit tests are crucial to your ability to do changes to code. Be they refactoring changes or added functionality, if you don&#8217;t have detailed tests they chances of introducing a defect are huge. And if you don&#8217;t have those tests, chances are you&#8217;ll be finding out about those shiny new defect in production.</p>
<h3>Why Test-First?</h3>
<p>Ok, so we need unit tests. But why write them before writing the production code? One of the arguments is simply that there&#8217;s a good chance you <strong>won&#8217;t</strong> write them if you&#8217;ve already written your production code. But let&#8217;s pretend, just for a minute, that we&#8217;re all very disciplined, and do write those tests. And that we wrote our code in such a way that we <strong>can</strong> write unit tests for it with a normal level of effort. Time for another of mr Grenning&#8217;s sheets!</p>
<p><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_12.png"><img class="aligncenter size-medium wp-image-433" title="technical_excellence_20120119_slide_12" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_12-300x225.png" alt="" width="300" height="225" /></a></p>
<p>The full story, again, can be found<a href="http://www.renaissancesoftware.net/blog/archives/16"> on his blog</a>, but the short version is as follows. It&#8217;s been an accepted fact in software development for <a href="http://dl.acm.org/citation.cfm?id=53072">quite a long time</a> that the longer the period between introducing a defect and finding out about it, the more expensive it will be to fix it. This is easy to accept intuitively: the programmer won&#8217;t remember as well what he was thinking when the error was made; He might have written code in the same general area; Other people might have made changes in that part of the code. (How dare they!)</p>
<p><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_13.png"><img class="aligncenter size-medium wp-image-432" title="technical_excellence_20120119_slide_13" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_13-300x225.png" alt="" width="300" height="225" /></a>Now how does Test-First help alleviate this? Simple: If you write the test first, you will notice the defect immediately when you introduce it! Yes, granted, this does not mean that you can&#8217;t get any defects into production, there are many different types of bugs. But you&#8217;ll avoid a huge percentage of them! Some research on this indicates <a href="http://www.infoq.com/news/2009/03/TDD-Improves-Quality">differences of 50 to 90 percent reduction of bugs</a>.  More links to various studies on TDD can be found on <a href="http://biblio.gdinwiddie.com/biblio/StudiesOfTestDrivenDevelopment">George Dinwiddie&#8217;s wiki</a>.</p>
<h3>Red, Green, Refactor</h3>
<p><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_14.png"><img class="aligncenter size-medium wp-image-431" title="technical_excellence_20120119_slide_14" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_14-300x225.png" alt="" width="300" height="225" /></a></p>
<p>And now we get to the last aspect of TDD, as an actual process of writing/designing code. The steps are simple: write a small test (<span style="color: #ff0000;">red</span>), that fails; write the simplest code that makes the test pass (<span style="color: #008000;">green</span>), and then refactor that code to remove duplication and ensure clean, readable code. And repeat!</p>
<p>One thing that is important in this cycle, is that is is very short! It should normally last from 3 to 10 minutes, with most of the time actually spent in the refactoring step. The small size of the steps is a feature, keeping you from the temptation of writing too much production code which isn&#8217;t yet tested.</p>
<h4>Clean code</h4>
<p>Sticking to this process for writing code has some important benifits. Your code will be cleaner. Writing tests first means that you will automatically be writing testable code. Testable code has a lower complexity (see <a href="http://www.keithbraithwaite.demon.co.uk/professional/presentations/2008/qcon/MeasureForMeasure.pdf">Keith Braithwaite&#8217;s great work in this area</a>). Testable code will be more loosely coupled, because writing tests for tightly coupled code is bloody hard. Continuous refactoring will help keep the code tightly cohesive. Granted, this last one is still very much dependent on the quality of the developer, and his/her OO skills. But the process encourages it, and if your code is not moving towards cohesion, you&#8217;ll see duplication increasing (for instance in method parameters).</p>
<p><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_15.png"><img class="alignright size-medium wp-image-430" title="technical_excellence_20120119_slide_15" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_15-300x225.png" alt="" width="300" height="225" /></a>After last weeks presentation, in one of the Open Space discussions some doubt was expressed on whether a lower cyclomatic complexity is always an indication of better code. I didn&#8217;t have/take much time to go into that, and accidentally reverted to an invocation of authority figures, but it is a very interesting subject. If you look at the link to <a href="http://www.keithbraithwaite.demon.co.uk/professional/presentations/2008/qcon/MeasureForMeasure.pdf">Keith Braithwaite&#8217;s slides</a>, and <a href="http://cumulative-hypotheses.org/">his blog</a>, you&#8217;ll notice that all the projects he&#8217;s discussing have classes with higher and lower complexity. The interesting part is that the distribution differs between code that&#8217;s under test and code that isn&#8217;t. He also links this to more subjective judgement of the codebases. This is a good indication that testing indeed helps reduce complexity. Complexity is by no means the only measure though, and yes, you can have good code that has a higher complexity. But a codebase that has a tendency to have more lower complexity and less higher complexity classes will almost always be more readable and easier to maintain.</p>
<h4>Simple Design</h4>
<p>XP tells you You Ain&#8217;t Gonna Need It. Don&#8217;t write code that is not (yet) absolutely necessary for the functionality that you&#8217;re building. Certainly don&#8217;t write extra functionality! Writing the tests first keeps you focused on this. Since you are writing the test with a clear objective in mind, it&#8217;s much less likely that you&#8217;ll go and add this object or that method because it &#8216;seems to belong there&#8217;.</p>
<p>Another phrase that&#8217;s popular is Don&#8217;t Repeat Yourself. The refactoring step in the TDD process has the primary purpose of removing duplication. Duplication usually means harder to maintain. These things keep your code as lean as is possible, supporting the Simple Design filosophy</p>
<h2>Why Not?</h2>
<p>So why isn&#8217;t everyone in the world working with this great TDD thing I&#8217;ve been telling you about? I hear many reasons. One of them is that they didn&#8217;t know about is, or were under the misconception that TDD is indeed just Test Automation, or Unit Testing. But in the Internet age, that excuse is a bit hard to swallow.</p>
<p style="text-align: left;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_16.png"><img class="size-medium wp-image-429 aligncenter" title="technical_excellence_20120119_slide_16" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_16-300x225.png" alt="" width="300" height="225" /></a>More often, the first reaction is along the lines of &#8220;We don&#8217;t have the time&#8221;.</p>
<p>I&#8217;ve just spent quite a bit of time discussing hoe TDD will normally save you time, so it doesn&#8217;t make much sense to spend more time discussing why not having time isn&#8217;t an argument.</p>
<p>But there is one part of this objection that does hold: getting started with TDD will take time. As with everything else, there&#8217;s a learning curve. The first two or three sprints, you will be slower. Longer, if you have a lot of code that wasn&#8217;t written with testing in mind. You can speed things up a bit by getting people trained, and getting some coaches in to help get used to it. But it will still take time.</p>
<p>Then later, it will save you time. And embarrasment.</p>
<p style="text-align: left;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_17.png"><img class="size-medium wp-image-428 aligncenter" title="technical_excellence_20120119_slide_17" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_17-300x225.png" alt="" width="300" height="225" /></a>Another objection I&#8217;ve encountered is &#8216;But software will always contain bugs!&#8217;.</p>
<p>Sure. Not as many as now, but I&#8217;m sure there will be bugs. Still, that argument makes as much sense to me as saying that we will always have deaths in traffic due to people crossing the road, even if we have traffic lights! So we might as well get rid of all traffic lights?</p>
<p>There will always be some people that fall ill, even if we inoculate most everyone against a disease. So should we stop the inoculations?</p>
<p>Nah.</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_18.png"><img class="size-medium wp-image-427 aligncenter" title="technical_excellence_20120119_slide_18" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_18-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Uhm&#8230; Yeah&#8230;</p>
<p>At the same time the strongest and the weakest of arguments. Yes, in many companies there are bosses who will have questions about time spent writing tests.</p>
<p>The thing is: you, as a developer are the expert. You are the one who can tell your boss why not writing the test will be slower. Will slow you down in the future. Why code that isn&#8217;t kept clean and well factored will bog you down into the unmaintainability circle of hell until the company decides to throw it all away and start over. And over. And over.</p>
<p>You are also the one that that guy is going to be standing at the desk of, telling you that he&#8217;s going to have to ask you to come in on Saturday. And Sunday. And you know what? That&#8217;s going to be your own fault for not not working <em>better</em>.</p>
<p>And in the end, if you&#8217;re unable to impress them with those realities, use the Law of Two Feet, and change companies. Really. You&#8217;ll feel so much better.</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_19.png"><img class="size-medium wp-image-426 aligncenter" title="technical_excellence_20120119_slide_19" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_19-300x225.png" alt="" width="300" height="225" /></a></p>
<p>This last one is, I must admit, the most convincing of the reasons why people are not TDDing. Legacy code really is hard to test.</p>
<p>There&#8217;s some good advice out there on how to get started. Michael Feathers book. <a href="http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052">Working Effectively With Legacy Code</a> is the best place to start. Or the <a href="http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf">article of the same name</a>, to whet your appetite. And the new <a href="http://mikadomethod.wordpress.com/">Mikado Method</a> definitely has promise, though I haven&#8217;t tried that on any real code yet.</p>
<p>And the longer you wait to get started, the harder it&#8217;s going to be&#8230;</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_20.png"><img class="size-medium wp-image-425 aligncenter" title="technical_excellence_20120119_slide_20" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_20-300x225.png" alt="" width="300" height="225" /></a></p>
<h2>How?</h2>
<p>I closed the presentation with two sheets on how to get to the point where you can deliver at high quality.</p>
<p>For a developer, it&#8217;s important to keep learning. There a lot of <a title="Reading Up: Books Every Programmer Should Read" href="http://www.lagerweij.com/2010/08/31/reading-up-books-every-programmer-should-read/">great books out there</a>. And new ones coming out all the time. But don&#8217;t just read. Practice. At Qualogy I&#8217;ve been organising <a title="My First Coding Dojo" href="http://www.lagerweij.com/2011/06/23/my-first-coding-dojo/">Coding Dojos</a>, where we get together and work on coding problems, as an exercise. A lot of learning, but also a lot of fun to do! Of course, we&#8217;ve also all had a training in this area, getting <a href="http://www.qualogy.com/certified-scrum-trainingen-met-agile-grondleggers/">Ron Jeffries and Chet Hendrickson over to teach us Agile Development Skills</a>.</p>
<p>Make sure that when you give an estimate, that you include plenty of time for testing. We developers simply have a tendency to overlook this. And when you&#8217;re still new to TDD, make a little more room for that. Commit to 30% fewer stories for your next three sprints, while your learning. And when someone tries to exert some pressure to squeeze in just that one more feature, that you know you can only manage by lowering quality? Don&#8217;t. Say NO. Explain why you say no, say it well, and give perspective on what you can say yes to. But say no.</p>
<p style="text-align: center;"><a href="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_21.png"><img class="size-medium wp-image-424 aligncenter" title="technical_excellence_20120119_slide_21" src="http://www.lagerweij.com/wp-content/uploads/2012/01/technical_excellence_20120119_slide_21-300x225.png" alt="" width="300" height="225" /></a></p>
<p>For a manager, the most important thing you can do is ensure that you consistently emphasize quality over schedule. For a manager this is also one of the most difficult things to do. We&#8217;ve been talking about the discipline required for developers to stick to TDD. This is where the discipline for the manager comes in. It is very easy to let quality slip, and it <strong>will</strong> happen almost immediately as soon as you start emphasizing schedule. You want it as fast as possible, but only if it&#8217;s solid (and <a href="http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)">SOLID</a>).</p>
<p>You can encourage teams to set their own standards. And the encourage them to stick to them. You&#8217;ll know you&#8217;ve succeeded when the next time you slip up and put on a little pressure, they&#8217;ll tell you &#8220;No, we can&#8217;t do that and stick to our agreed level of quality.&#8221; Congrats:-)</p>
<p>You can send your people to the trainings that they need. Or get help in to coach them (want my number? :-)</p>
<p>You can reserve time for those practice sessions. You will benifit from them, no reason they have to be solely on private time.</p>
<p>Well, it&#8217;s nicely consistent. I went over my time when presenting this, and over my target word-count when writing it down. If you stuck with me till this end, thanks! I&#8217;m also learning, and short, clear posts are just as hard as short, clear code. Or short, clear presentations.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2012/01/26/technical-excellence-why-you-should-tdd/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Failure</title>
		<link>http://www.lagerweij.com/2011/11/16/failure/</link>
		<comments>http://www.lagerweij.com/2011/11/16/failure/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 13:45:06 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[shorties]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=413</guid>
		<description><![CDATA[Failure is not an option! I&#8217;ve heard that phrase a number of times during my career. Mostly by people imitating a manager they heard in a meeting, but still too often. What&#8217;s remarkable is that this phrase is usually uttered at the moment that it is becoming very clear that, yes, failure seems to not [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Failure is not an option!</p></blockquote>
<p>I&#8217;ve heard that phrase a number of times during my career. Mostly by people imitating a manager they heard in a meeting, but still too often.</p>
<p>What&#8217;s remarkable is that this phrase is usually uttered at the moment that it is becoming very clear that, yes, failure seems to not just be an option, but fairly likely!</p>
<p>And that&#8217;s the thing. Failure is <em>always</em> an option. The question is, what are you going to do about it?</p>
<blockquote><p>Failure is <em>always</em> an option</p></blockquote>
<p>No, let&#8217;s step back from that for a minute. First let&#8217;s see what we mean by failure. For many project managers, a project is a failure if it&#8217;s not delivered on time, and with the complete scope that was agreed. I&#8217;ve hurt project manager&#8217;s feeling at times by reminding them that according to their own definition, budget was also part of that equation.</p>
<blockquote><p>A project for which people have had to work overtime, was a failure</p></blockquote>
<p>Overtime means that you found out there was a problem very late, and at that point did not have a good enough relation with your customer to be able to negotiate release date <em>or</em> scope. That&#8217;s a good description of project management failure. Which is not to say that the project manager is the only one that failed, btw. That sort of thing requires a team effort&#8230;</p>
<p>Back to the options for failure.</p>
<p>Failure should not just be an option, it&#8217;s a requirement. If you go through a whole week of work on your project, and there&#8217;s no failures at all, it&#8217;s time to get worried. Because either you&#8217;re not noticing the failures, or you&#8217;re simply not trying hard enough.</p>
<p>You should have found some things that were harder to do than expected. When you do them again, later in the project, they&#8217;ll be easier, <em>if</em> you noticed this failure and learn from it. You should notice that your velocity over the last three sprints has been lower (or higher!) than expected. You need to adjust your planning accordingly, and talk to the customer about possible scope or release dates changes. Your continuous build broke five times in the last sprint. You should be talking in the team why that is, and ensure it doesn&#8217;t happen again. Your newly written unit test fails. Of course it does, you&#8217;re working test driven! Your customer keeps adding to and changing requirements during the sprint. You should make the requirements more explicit before the sprint starts, so that it&#8217;s clear the requirements are new.</p>
<blockquote><p>Failure means learning. Failure to learn could mean&#8230; lack of success.</p></blockquote>
<p>The more you allow failure. The more you encourage failure. The better you will be at detecting failure. The lower the threshold be for your people to report failure. And all that will help you navigate towards success.</p>
<blockquote><p>Success consists of going from failure to failure without loss of enthusiasm.<br />
&#8211; Winston Churchill</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2011/11/16/failure/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>On Discipline, Feedback and Management</title>
		<link>http://www.lagerweij.com/2011/11/09/on-discipline-feedback-and-management/</link>
		<comments>http://www.lagerweij.com/2011/11/09/on-discipline-feedback-and-management/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 16:45:02 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Qualogy]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[practices]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=405</guid>
		<description><![CDATA[Change is hard. If we know that about 80% of organisational change programs fail, then it&#8217;s easy to appreciate just how hard. Why is that? And, more importantly, what can we do to make it easier? Recently, I saw a tweet come by from Alan Shalloway. He wrote that, back in the days, people were saying: [...]]]></description>
			<content:encoded><![CDATA[<p>Change is <em>hard</em>. If we know that about 80% of organisational change programs fail, then it&#8217;s easy to appreciate just <em>how</em> hard. Why is that? And, more importantly, what can we do to make it easier?</p>
<p>Recently, I saw a tweet come by from Alan Shalloway. He wrote that, back in the days, people were saying: Waterfall (though they didn&#8217;t call it that, back then, I think) is fine, people are just not doing it right. All we need is apply enough discipline, and a little common sense, and it will work perfectly! I think Alan was commenting on an often heard sound in the Agile community about failing Scrum adoptions: You&#8217;re just not doing it right! You need to have more <em>discipline</em>!<a href="http://www.lagerweij.com/wp-content/uploads/2011/11/riding_crop.jpg"><img class="alignright size-thumbnail wp-image-408" title="discipline" src="http://www.lagerweij.com/wp-content/uploads/2011/11/riding_crop-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>This is, actually, a valid comment. In fact, both views are valid. On the one hand, just saying that people are not doing it right is not very helpful. Saying you need to be more disciplined is certainly not helpful. (Just look at the success rate of weight loss programs (or abstinence programs against teen pregnancies).  Change is hard, because it requires discipline. <em>Any</em> process requires discipline. The best way to ensure a process is successfully adopted is to make sure the process <em>supports</em> discipline. This is, again, <em>hard</em>.</p>
<p>This post talks about discipling. About how it can be supported by your process. About how it&#8217;s often <em>not</em> supported for managers in Agile organisations, and then of course how to ensure that management does get that kind of support in their work.</p>
<h3>In Support Of Discipline</h3>
<p>Take a look at Scrum, throw in XP for good measure, and let&#8217;s have a look at what kind of discipline we need to have, and how the process does (or does not!) support that discipline.</p>
<div id="attachment_90" class="wp-caption alignleft" style="width: 190px"><a href="http://www.lagerweij.com/wp-content/uploads/2011/04/AgileFeedbackLoops.png"><img class="size-medium wp-image-90 " title="Agile Feedback Loops" src="http://www.lagerweij.com/wp-content/uploads/2011/04/AgileFeedbackLoops-300x281.png" alt="Agile Feedback Loops" width="180" height="169" /></a><p class="wp-caption-text">Agile Feedback Loops</p></div>
<p>The <a href="http://xprogramming.com/xpmag/whatisxp">eXtreme Programming practices</a> often generate a lot of resistence. Programmers were, and are, very hesitant in trying them out, and some require quite a bit of practice to do well. Still, most of these practices have gained quite a wide acceptance. Not having unit-testing in place is certainly frowned upon nowadays. It may not be done in every team, but at least they usually feel some embarrassment about that. Lack of Continuous Integration is now an indication that you&#8217;re not taking things seriously.</p>
<p>Working structurally using TDD, and Pair Programming, have seen slower adoption.</p>
<div class="wp-caption alignright" style="width: 442px"><a href="http://xprogramming.com/xpmag/whatisxp"><img title="Extreme Programming Practices" src="http://xprogramming.com/images/circles.jpg" alt="Extreme Programming Practices" width="432" height="324" /></a><p class="wp-caption-text">Extreme Programming Practices from XProgramming.com</p></div>
<p>If we look at some practices from Scrum, we can see a similar distribution of things that are popularly adopted, and some things that are&#8230; less accepted.  The Daily Stand-Up, for instance can usually be seen in use, even in teams just getting started with Scrum. Often, so it the Scrum Board. The Planning Meeting comes next, but the Demo/Review and certainly the Retrospective, are much less popular.</p>
<p>Why?</p>
<p>All of these practices require discipline, but some require more discipline than others. What makes something require less discipline?</p>
<ul>
<li>It&#8217;s easy!</li>
<li>Quick Feedback: It obviously and <em>quickly</em> shows it&#8217;s worth the effort</li>
<li>Shared Responsibility: The responsibility of being disciplined is shared by a larger group</li>
</ul>
<p>Let&#8217;s see how this works for some of the practices we mentioned above. The <strong>Daily Stand-Up</strong>, for instance, scores high on all three items. It&#8217;s pretty easy to do, you do it together with the whole team, and the increased communication is usually immediately obvious and useful. Same for the <strong>Scrum Board</strong>.</p>
<p>The <strong>Planning Meeting</strong> also scores on all three, but scores lower for the first two. It&#8217;s not all that easy, as the meetings often are quite long, especially at the start. And though it&#8217;s obvious during the planning meeting that there is a lot of value in the increased communication and clarity of purpose, the full effect only becomes apparent during the course of the sprint.</p>
<p>The <strong>Demo</strong> is also not all that easy, and the full effect of it can take multiple sprints to become apparent. Though quick feedback on the current sprint will help the end-result, and the additional communication with stakeholders will benefit the team in the longer run, these are mostly advantages over the longer term. To exacerbate this effect, responsibility for the demo is often pushed to one member of the team (often the scrum master), which can make the rest of the team give it less attention than is optimal.</p>
<p><strong>Retrospectives</strong> are, of course, the epitome of feedback. Or they should be. Often, though, this is one of the less successful practices in teams new to Scrum. The reasons for that are surprisingly unsurprising: there is often no follow-up on items brought forward in the retrospective (feedback on the feedback!), solving issues is not taken up as a responsibility for the whole team, and quite a few issues found are actually <em>hard to fix</em>!</p>
<p>The benefits of <strong>Continuous Integration</strong> are usually quite quickly visible to a development team. Often, they&#8217;re visible even before the CI is in use, as many teams will be suffering from many &#8216;integration issues&#8217; that come out late in the process. It&#8217;s not all that hard to set-up, and though one person can set it up, &#8216;not breaking the build&#8217; is certainly shared by the whole team.</p>
<p><strong>Unit testing</strong> can be very hard to get started with, but again the advantages *if* you use it are immediately apparent, and provide value for the whole team. <strong>Refactoring</strong>. Well, anyone who has <a title="Code Cleaning: A Refactoring Example In 50 Easy Steps" href="http://www.lagerweij.com/2011/05/28/code-cleaning-a-refactoring-example-in-50-easy-steps/">refactored a bit of ugly code</a>, can attest how nice it feels to clean things up. In fact, in the case of refactoring the problem is often ensuring that teams don&#8217;t drop everything just to go and refactor <em>everything</em>&#8230; Still, additional feedback mechanisms, like code statistics using Sonar or similar tools, can help in the adoption of code cleaning.</p>
<p><strong>Pairing</strong> shows quick feedback, and is shared by at least one other person, but it&#8217;s often very hard, and has to deal with other things: management misconceptions. We&#8217;ll talk about that a little later. <strong>TDD</strong>&#8216;s advantages are more subtle than just testing at all. So the benefit is less obvious and quick. It&#8217;s also a lot harder, and has no group support. These practices do reinforce each other, testing, TDD, and refactoring are easier to do if done together, pairing.</p>
<div>So we can see at least some correlation between adoption and the way a practice <em>supports</em> discipline. This makes a lot of sense: The easier something is to do, the more obvious its benefits, and the more shared its burdens by a group, the better is supports its users, and the more it is adopted.</div>
<h3>Feedback within the team</h3>
<p>One large part of this is: feedback rules. This is not a surprise for most Agile practitioners, as it&#8217;s one of the bases of Agile processes. But it is good to always keep in mind: if you want to achieve change, focus on supporting it with some form of feedback. One form of feedback that is used e.g. Scrum and Kanban, is the visualisation of the work. Use of a task board, or a Kanban board, especially a real, physical one, has a remarkable effect on the way people do their work. It&#8217;s still surprising to me how far the effects of this simple device go in changing behaviour in a team.</p>
<p>Seeing how feedback and shared responsibility help in adoption of practices within the team, we could look at the various team practices and find ways to increase adoption by increasing the level of feedback, or sharing the responsibility.</p>
<p><strong>The Daily Stand-Up</strong> can be improved by emphasising shared responsibility: rotating the chore of updating the burn-down, ensuring that there&#8217;s not a reporting-to-scrum-master feel by passing around a token.</p>
<p><strong>The Planning Meeting</strong> could be made easier by using something different from Planning Poker if many stories need to be estimated, or this estimation could be done in separate &#8216;Grooming&#8217; sessions. Feedback could be earlier by ensuring Acceptance Criteria are defined during the planning meeting (or before), so we get feedback for every story as soon as it gets picked up. Or we can stop putting hourly estimates on tasks to make the meeting go by quicker.</p>
<p><strong>Retrospectives</strong> could be improved by creating a Big Visual Improvement backlog, and sticking it to the wall in the team room. And by taking the top item(s) from that backlog into the next sprint as work for the whole team to do. If it&#8217;s a backlog, we might as well start splitting those improvements up into smaller steps, to see if we can get results sooner.</p>
<div>All familiar advice for anyone that&#8217;s been working Agile! But how about feedback on the Agile development process as it is experienced by management?</div>
<h3><strong>Agile management practices</strong></h3>
<p>Probably the most frequently sited reason for failure of Agile initiatives, is lack of support from management. This means that an Agile process requires changes in behaviour of management. Since we&#8217;ve just seen that such changes in behaviour require discipline, we should have a look at how management is supported in that changed behaviour by feedback and sharing of responsibility.</p>
<p>First though, it might be good to inventory what the recommended practices for Agile Managers are. As we&#8217;ve seen, Scrum and XP provide enough guidance for the work within the team. What behaviour outside the team should they encourage? There&#8217;s already a lot that&#8217;s been written about this subject. <a href="http://www.scrumalliance.org/articles/103-the-managers-role-in-agile">This article by Lyssa Adkins and Michael Spayd</a> , for instance, gives a high-level overview of responsibilities for a manager in an Agile environment. And <a href="http://noop.nl/">Jurgen Apello</a> has written a <a href="http://www.management30.com/">great book</a> about the subject. For the purposes of this article, I&#8217;ll just pick three practices that are fairly concrete, and that I find particularly useful.</p>
<p><strong>Focus on quality</strong>: As was also determined to be the subject requiring the most attention at the <a href="http://drdobbs.com/architecture-and-design/229301128">2011 reunion of the writing of the Agile Manifesto</a>, technical excellence is a requirement for any team that want to be Agile (or just be delivering software&#8230;) for the long term. Any manager that is dealing with an Agile team should keep stressing the importance of quality in all its forms above speed. If you go for quality first, speed will follow. And the inverse is also true: if you don&#8217;t keep quality high, slowing down until nothing can get done is assured.</p>
<p><strong>Appreciate mistakes:</strong> Agile doesn&#8217;t work without feedback, but feedback is pretty useless without experimentation. If you want to improve, you need to try new things <em>all the time</em>. A culture that makes a big issue of mistakes, and focuses on blame will smother an Agile approach very quickly.</p>
<p><strong>Fix impediments:</strong> The best way to make a team feel their own (and their works)  importance is to take anything they consider getting in the way of that very seriously. Making the prioritised list of impediments that you as a manager are working on <em>visible</em>, and showing (and regularly reporting) on their progress is a great way of doing that.</p>
<p>Note that I&#8217;ve not talked about stakeholder management, portfolio management, delivering projects to planning, or negotiating with customers. These are important, but are more in the area of the Product Owner. The same principles should apply there, though.</p>
<p>Let&#8217;s see how these things rate on ease, speed of feedback, and shared responsibility.</p>
<p><strong>Focus on Quality</strong>. Though stressing the importance of quality to a team is not all that difficult, I&#8217;ve noticed that it can be quite difficult to get the team to accept that message. Sticking to it, and acting accordingly in the presence of outside pressures can be hard to do. Feedback will not be quick. Though there can be improvements noticeable within the team, from the outside a manager will have to wait on feedback from other parties (integration testing, customer support, customers directly, etc.) If the Agile transition is a broad organisational initiative, then the manager can find support and shared responsibility from his peers. If that&#8217;s not the case, the pressure from those peers could be in quite a different direction&#8230;</p>
<p><strong>Appreciate mistakes</strong>. Again, this practice is one in which gratification is delayed. Some experiments will succeed, some will fail. The feedback from the successful ones will have to be enough to sustain the effort. The same remarks as above can be given with regards to the peer support. Support from within a team, though less helpful than from peers, can be a positive influence.</p>
<p><strong>Fix impediments</strong>. The type of impediments that end on a manager&#8217;s desk are not usually the easy-to-fix ones. Still, the gratification of removing problems, make this a practice well supported by  quick feedback. And there is usually both gratitude from the team and respect for action from peers.</p>
<p>We can see that these management practices are much less supported by group responsibility and quick feedback loops. This is one of the reasons why managers often are the place where Agile transitions run into problems. Not because of lack of will (we all lack sufficient willpower:-), but because any change requires discipline, and discipline needs to be supported by the process</p>
<h3><strong>Management feedback</strong></h3>
<p>If we see that some important practices for managers are not sufficiently supported by our process, then the obvious question is going to be: how do we create that support?</p>
<p>We&#8217;ve identified two crucial aspects of supporting the discipline of change: early feedback, and shared responsibility. Both of those are not natural fits in the world of management. Managers usually do not work as part of a closely knit team. They may be part of a management team, but the frequency and intensity of communication is mostly too low to have a big impact. Managers are also expected to think of the longer term. And they should! But this does make any change more difficult to sustain, since the feedback on whether the change is successful is too far off.</p>
<p>By the way, if that feedback is that slow, the risk is also that change that is <em>not </em> successful is kept for too long. That might be even worse&#8230;</p>
<p>When we talk about scaling Agile, we very quickly start talking about things such as the (much debated) Scrum of Scrums, &#8216;higher level&#8217; or &#8216;integration&#8217; stand-up meetings, Communities of Practice, etc. Those are good ideas, but are mostly seen as instruments to scale scrum to larger projects, and align multiple teams to project goals (and each other).  These practices help keep transparency over larger groups, but also through hierarchical lines. They help alignment between teams, by keeping other teams up-to-date of progress and issues, and help arrange communication on specialist areas of interest.</p>
<p>What I&#8217;m discussing in this post seems to indicate that those kind of practices are not just important in the scenario of a large project scaled over multiple teams, but are just as important for team working separately and their surrounding context.</p>
<p>So what can we recommend as ideas to help managers get enough feedback and support to sustain an Agile change initiative?</p>
<p><strong>Work in a team</strong>. Managers need the support and encouragement (and social pressure&#8230;) that comes of working in a team context as much as anyone. This can partly be achieved by working more closely together within a management team. I&#8217;ve had some success with a whole C-level management team working as a Scrum team, for instance.</p>
<p><strong>Be close to the work</strong>. At the same time, managers should be more directly following the work on the development teams. Note that I said &#8216;following&#8217;. We do not want to endanger the teams self-organization. I think a manager should be welcome at any team stand-up, and should also be able to speak at one. But I do recognise that there are many situations where this has led to problems, such as undue pressure being put on a team. A Scrum of Scrums, of multi-level stand-up approach can be very effective here. Even if there&#8217;s only one team, having someone from the team talk to management one level up <em>daily</em> can be very effective.</p>
<p><strong>Visualise management tasks</strong>. Managers can not only show support for the transition in this way, they can immediately profit from it themselves. Being very visible with an impediment backlog is a big help, both to get the impediments fixed, and showing that they&#8217;re not forgotten. Starting to use a task board (or Kanban, for the more advanced situations) for the management team work is highly effective. And if A3 sheets are being put on the wall to do analysis of issues and improvement experiments, you&#8217;re living the Agile dream&#8230;</p>
<p><strong>Visualise management metrics</strong>. Metrics are always a tricky subject. They can be very useful, are necessary, but can also tempt you to manage them directly (Goodhart’s Law). Still, some metrics are important to managers, and those should be made important to the teams they manage. Visualising is a good instrument to help with that. For some ideas read <a href="http://www.estherderby.com/2011/10/metrics-for-agile.html">Esther Derby&#8217;s post on useful metrics for Agile teams</a>. Another aspect of management, employee satisfaction, could be continuously visualised with <a href="http://scrum.jeffsutherland.com/2010/11/happiness-metric-wave-of-future.html">Henrik Kniberg&#8217;s Happiness Matrix</a>, or <a href="http://ourfounder.typepad.com/leblog/2011/07/smiles-everyone-smiles-why-you-should-fear-the-availability-heuristic-and-how-subjective-well-being-can-save-us-from-it.html">Jim Benson&#8217;s refinement of that</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2011/11/09/on-discipline-feedback-and-management/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scrum Gathering London 2011 &#8211; day 3</title>
		<link>http://www.lagerweij.com/2011/10/26/scrum-gathering-london-2011-day-3/</link>
		<comments>http://www.lagerweij.com/2011/10/26/scrum-gathering-london-2011-day-3/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 16:09:16 +0000</pubDate>
		<dc:creator>wouter</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Qualogy]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[scaling scrum]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://www.lagerweij.com/?p=388</guid>
		<description><![CDATA[The third day of the London Scrum Gathering (day 1, day 2) was reserved for an Open Space session led by Rachel Davies and a closing keynote by James Grenning. We started with the Open Space. I&#8217;d done Open Spaces before, but this one was definitely on a much larger scale than what I&#8217;d seen [...]]]></description>
			<content:encoded><![CDATA[<p>The third day of the London Scrum Gathering (<a title="Scrum Gathering London 2011 – day 1" href="http://www.lagerweij.com/2011/10/12/scrum-gathering-london-2011-day-1/">day 1</a>, <a title="Scrum Gathering London 2011 – day 2" href="http://www.lagerweij.com/2011/10/21/scrum-gathering-london-2011-day-2/">day 2</a>) was reserved for an Open Space session led by Rachel Davies and a closing keynote by James Grenning.</p>
<p><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG695.jpg"><img class="alignright size-medium wp-image-390" title="See all the sheets for scheduling Open Space topics for this large group" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG695-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>We started with the Open Space. I&#8217;d done Open Spaces before, but this one was definitely on a much larger scale than what I&#8217;d seen before. After the introduction, everyone that had a subject for a session wrote their subject down, and got in line to announce the session (and have it scheduled). With so many attendents, you can imagine that there would be many sessions. Indeed, there were so many sessions that extra spaces had to be added to handle all of them. The subject for the Open Space was to be the Scum Alliance tag-line: &#8220;Changing the world of work&#8221;.</p>
<p><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG694.jpg"><img class="alignleft size-medium wp-image-389" title="Rachel Davies introducing the Open Space" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG694-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>I initially intended to go the a session about Agile and Embedded, as the organiser mentioned that if there wouldn&#8217;t be enough people to talk about the embedded angle, he was OK with widening the subject to &#8216;difficult technical circumstances&#8217;. I haven&#8217;t done much real embedded work, but was interested in the broader subject. It turned out, though, that there were plenty of interested parties into the real deal, so the talk quickly started drifting to FPGAs and other esoterica and I used the law of two feet to find a different talk.</p>
<p>My second choice for that first period was a session about getting involvement of higher management. This session, proposed by Joe Justice and Peter Stevens (people with overlapping subjects were merging their sessions), turned out to be  very interesting and useful. The group shared experiences of both successfully (and less successfully) engaging higher management (CxOs, VPs, etc.) into an Agile Change process. Peter has since posted <a href="http://www.scrum-breakfast.com/2011/10/getting-ceos-attention.html">a nice summary of this session</a> on his blog.</p>
<p>My own session was about applying Agile and Lean-Startup ideas to the context of setting up a consultancy and/or training business. If we&#8217;re really talking about &#8216;transforming the world of work&#8217;, then we should start with our own work. My intention was to discuss how things like transparency, early feedback, working iteratively and incrementally could be applied for an Agile Coach&#8217;s work. My <a href="http://nimble-b-jack.blogspot.com/">colleague</a> and I have been working to try and approach our work in this fashion, and are starting to get the hang of this whole &#8216;fail early&#8217; thing. We&#8217;ve also been changing our approach based on feedback of customers, and more importantly, not-customers. During the session we talked a little about this, but we also quickly branched off into some related subjects. Some explanation of Lean-Startup ideas was needed, as not everyone had heard of that. We didn&#8217;t get far on any discussion on using some of the customer/product development ideas from that side of things, though.</p>
<p>Some discussion on contracts, and how those can fit with an agile approach. Most coaches are working on a time-and-material basis, it seems. We have a &#8216;Money for nothing and your changes for free&#8217; type contract (see <a href="http://jeffsutherland.com/Agile2008MoneyforNothing.pdf">http://jeffsutherland.com/Agile2008MoneyforNothing.pdf</a>, sheets 29-38) going for consultancy at the moment, but it&#8217;s less of a fit than with a software development project. Time and material is safest for the coach, of course, but also doen&#8217;t reward them for doing their work better than the competition. How should we do this? Jeff&#8217;s &#8216;money back guarantee&#8217; if you don&#8217;t double your velocity is a nice marketing gimmick, but a big risk for us lesser gods: Is velocity a good measure for productivity and results? How do we measure it? How do we determine whether advice was followed?</p>
<p>Using freebies or discounts to customers to test new training material on was more generally in use. This has really helped us quickly improve our workshop materials, not to mention hone the training skills&#8230;</p>
<p>One later session was Nigel Baker&#8217;s. He did a session on the second day called &#8216;Scrumbrella&#8217;, on how to scale Scrum, and was doing a second one of those this third afternoon. I hadn&#8217;t made it to the earlier one, but had heard enthusiastic stories about it, so I decided to go and see what that was about. Nigel didn&#8217;t disappoint, and had a dynamic and entertaining story to tell. He made the talk come alive by the way he drew the organisational structures on sheets of paper, and moved those around on the floor during his talk, often getting the audience to provide new drawings.</p>
<p style="text-align: left;"><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG706.jpg"><img class="size-medium wp-image-391 aligncenter" title="Nigel in Action!" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG706-300x225.jpg" alt="" width="300" height="225" /></a>There is no way I can do Nigel&#8217;s presentation style justice here. There were a number of people filming him in action on their cellphones, but I haven&#8217;t seen any of those movies surface yet. For now, you&#8217;ll have to make do with his <a href="http://nigelbaker.wordpress.com/2011/05/18/scrumofscrums/">blog-post</a> on the subject, and some <a href="http://www.scrumalliance.org/system/slides/52/original/Scrumbrella%20-%20Scaling%20Scrum.pdf?1319033124">slides</a> (which he obviously didn&#8217;t use during this session). I can, however, show you what the final umbrella looked like:</p>
<p style="text-align: left;"><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG708.jpg"><img class="aligncenter size-medium wp-image-392" title="The completed ScrumBrella" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG708-225x300.jpg" alt="" width="225" height="300" /></a><strong></strong></p>
<p style="text-align: left;">All my other pictures, including some more from the ScrumBrella session, and from the Open Space closing, can be found on <a href="http://www.flickr.com/photos/lagerweij/sets/72157627982483950/with/6283202534/">flickr</a>.</p>
<p style="text-align: left;"><strong>Closing Keynote by James Grenning on &#8216;Changing the world of work through Technical Excellence&#8217;</strong></p>
<p style="text-align: left;">(slides are <a href="http://www.renaissancesoftware.net/component/content/article/17/86-sglon.html">here</a>)</p>
<p style="text-align: left;">The final event of the conference was the closing keynote by <a href="http://www.renaissancesoftware.net/">James Grenning</a>. His talk dealt with &#8216;Technical Excellence&#8217;, and as such was very near my heart.</p>
<p style="text-align: left;">He started off with a little story, for which the slides are unfortunately not in the slide deck linked above, about how people sometimes come up to him in a bar (a conference bar, I assume, or pick-up lines have really changed in the past few years) and tell him: &#8220;Yeah, that agile thing, we tried that, it didn&#8217;t work&#8221;.</p>
<p style="text-align: left;">He would then ask them some innocent questions (paraphrased, I don&#8217;t have those slides, not a perfect memory):</p>
<blockquote>
<p style="text-align: left;">So you were doing TDD?</p>
<p style="text-align: left;">No.</p>
<p style="text-align: left;">Ah, but you were doing ATDD?</p>
<p style="text-align: left;">No.</p>
<p style="text-align: left;">But surely you were doing unit testing?</p>
<p style="text-align: left;">Not <em>really</em>.</p>
<p style="text-align: left;">Pair programming?</p>
<p style="text-align: left;">No.</p>
<p style="text-align: left;">Continuous Integration?</p>
<p style="text-align: left;">Sometimes.</p>
<p style="text-align: left;">Refactoring?</p>
<p style="text-align: left;">No!</p>
<p style="text-align: left;">At least deliver working software at the end of the sprint?</p>
<p style="text-align: left;">No&#8230;</p>
</blockquote>
<p style="text-align: left;">If you don&#8217;t look around and realise that to do Agile, you&#8217;ll actually have to improve your quality, you&#8217;re going to fail. And if you insist on ignoring the experience of so many experienced people, then maybe you deserve to fail.</p>
<p style="text-align: left;"><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG730.jpg"><img class="alignright size-medium wp-image-393" title="Listen to experience" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG730-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>After this great intro, we were treated to a backstage account of the way the Agile Manifesto meeting at Snowbird went. And then about what subjects came up after this year&#8217;s reunion meeting. James showed the top two things coming out of the reunion meeting:</p>
<blockquote>
<p style="padding-left: 30px;"><strong>We believe the agile community must:</strong></p>
<ol>
<li><strong>Demand Technical Excellence</strong></li>
<li><strong>Promote individual [change] and lead organizational change</strong></li>
</ol>
<div><strong><br />
</strong></div>
</blockquote>
<div>The rest of his talk was a lesson in doing those things. He first went into more detail on Test Driven Development, and how it&#8217;s the basis for improving quality.</div>
<div>To do this, he first explains why Debug-Later-Programming (DLP) in practice will always be slower than Test-First/TDD.</div>
<div id="attachment_394" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG718.jpg"><img class="size-medium wp-image-394 " title="The Physics of Debug-Later-Programming" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG718-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">The Physics of Debug-Later-Programming</p></div>
<div>
<div id="attachment_395" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG721.jpg"><img class="size-medium wp-image-395 " title="DLP vs TDD" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG721-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">DLP vs TDD</p></div>
</div>
<div>Mr. Grenning went on to describe the difference between System Level Tests and Unit Tests, saying that the System Level Tests suffer from having to test the combinatorial total of all contained elements, while Unit Tests can be tailored by the programmer to directedly test the use of the code as it is intended, and only that use. This means that, even though System Level Tests can be useful, they can never be sufficient.</div>
<div>Of course, the chances are small that you&#8217;ll write sufficient and complete Unit Tests if you don&#8217;t do Test Driven Development, as Test-After always becomes Release First. Depending on Manual Testing for testing is a recipe for unmaintainability.</div>
<div>
<div id="attachment_396" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG726.jpg"><img class="size-medium wp-image-396 " title="The Untested Code Gap" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG726-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">The Untested Code Gap</p></div>
</div>
<div>The keynote went on to talk about individual and organisational change, and what Developers, Scrum Masters and Managers can do to improve things. Developers should learn, and create tested and maintainable code. Scrum Masters should encourage people to be Problem Solvers, not Dogma Followers. He illustrated this with the example of Planning Poker. As he invented Planning Poker, him saying that you shouldn&#8217;t always use it is a strong message. For instance, if you want to estimate a large number of stories, other systems can work much better. Managers got the advice to Grow Great Teams, Avoid De-Motivators, and Stop Motivating Your Team!</div>
<div>
<div id="attachment_397" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG733.jpg"><img class="size-medium wp-image-397 " title="De-Motivators" src="http://www.lagerweij.com/wp-content/uploads/2011/10/IMG733-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">DeMotivators</p></div>
<p>It was very nice to be here for this talk, validating my own stance on Technical Excellence, and teaching me new ways of talking to people in order to help them see the advantages of improving their technical practices. Oh, and some support for my own discipline in strictly sticking to TDD&#8230;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.lagerweij.com/2011/10/26/scrum-gathering-london-2011-day-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: www.lagerweij.com @ 2012-05-19 13:29:44 by W3 Total Cache -->
