<?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>Xebia Blog &#187; Erwin van der Koogh</title>
	<atom:link href="http://blog.xebia.com/author/evanderkoogh/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 01 Feb 2012 00:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Why do we need Agile coaches at all?</title>
		<link>http://blog.xebia.com/2011/08/09/why-do-we-need-agile-coaches-at-all/</link>
		<comments>http://blog.xebia.com/2011/08/09/why-do-we-need-agile-coaches-at-all/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 21:43:21 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Scrum]]></category>

	<!-- AutoMeta Start -->
	<category>gravity</category>
	<category>coaches</category>
	<category>bootstraps</category>
	<category>accelerate</category>
	<category>transition</category>
	<category>transition</category>
	<category>coach</category>
	<category>climbers</category>
	<category>gravity</category>
	<category>coaches</category>
	<category>bootstraps</category>
	<category>accelerate</category>
	<category>transition</category>
	<category>transition</category>
	<category>coach</category>
	<category>climbers</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7253</guid>
		<description><![CDATA[Today I was asked a really interesting question by a client: &#8220;Agile is very simple, why do you need Agile coaches?&#8221;. That is a pretty fundamental question to ask of any Agile coach and after my initial shock we did come up with some good answers. But the question (and the initial answers) kept nagging [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was asked a really interesting question by a client: &#8220;Agile is very simple, why do you need Agile coaches?&#8221;.<br />
That is a pretty fundamental question to ask of any Agile coach and after my initial shock we did come up with some good answers.</p>
<p>But the question (and the initial answers) kept nagging at me all day. And while I sat down with a glass of good whisky in the evening I got back to the question. Here is what I came up with:</p>
<ul>
<li>Agile is simple, not easy</li>
<li>Experience bootstraps learning</li>
<li>Organizational gravity</li>
</ul>
<p><span id="more-7253"></span><br />
<strong>Agile is simple, not easy</strong></p>
<p>Any agile methodology is usually very light on rules and have-to-dos. That makes it simple, but not easy.<br />
Behind and because of those simple rules there are still very complicated issues.<br />
<em>&#8220;Features must be broken down into chunks that can be implemented in x days&#8221;</em> is very simple, but very hard to do if you have no experience. (and sometimes even if you <strong>do</strong> have experience.)<br />
<em>&#8220;At the end of every sprint you need to have a retrospective&#8221;</em>. Again very simple. But actually creating a team and environment that can really learn and improve their own process is hard.</p>
<p>So yes Agile is simple, but hard</p>
<p><strong>Experience bootstraps learning</strong></p>
<p>One of the most important things about Agile methodologies is that they make it possible and encourage learning teams.<br />
Having someone with experience however allows a team to accelerate learning in the beginning. Someone who has been in a similar situation before can pick lessons learned and share those with the team so some wheels do not need to be reinvented. As long as the team only uses those ideas as a starting point for their own learning it can accelerate the initial learning.</p>
<p><strong>Organization gravity</strong></p>
<p>Lyssa Adkins has a brilliant quote in the book &#8220;Coaching Agile Teams: A Companion for ScrumMasters, Agile Coaches, and Project Managers in Transition&#8221;.</p>
<blockquote><p><em>&#8220;Gravity Works&#8221;. Yes it does. Rock climbers know this and plan for it. So do Agile coaches.</em></p></blockquote>
<p>Agile transitions are not limited to the teams doing the actual development. They are part of much bigger picture. Other departments need to at least be aware of the transition and probably have to change considerably.<br />
For example walk into the operation department of a big company that is doing waterfall projects and tell them that you are going to release every project every month. They&#8217;ll laugh at you.<br />
Most managers actually really like the fake certainty of waterfall projects..<br />
Agile does not solve any problems by itself, it just makes them painfully clear. Not all organizations are mature enough to realize that and will usually blame Agile for all those problems that are suddenly surfacing.</p>
<p>Those are only some examples where organizational gravity will play up. They will constantly pull your Agile transition towards the old status quo.<br />
An experienced Agile coach will recognize those signals and work with the clients to keep an Agile transition on track towards the goals that were set.</p>
<p>Just like a regular coach.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/08/09/why-do-we-need-agile-coaches-at-all/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F08%2F09%2Fwhy-do-we-need-agile-coaches-at-all%2F&amp;title=Why%20do%20we%20need%20Agile%20coaches%20at%20all%3F" id="wpa2a_2"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/08/09/why-do-we-need-agile-coaches-at-all/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Agile Portfolio Game &#8211; The Big Payoff</title>
		<link>http://blog.xebia.com/2011/07/04/agile-portfolio-game-the-big-payoff/</link>
		<comments>http://blog.xebia.com/2011/07/04/agile-portfolio-game-the-big-payoff/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 04:30:10 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

	<!-- AutoMeta Start -->
	<category>tastycupcakes</category>
	<category>game</category>
	<category>game</category>
	<category>portfolio</category>
	<category>mcgreal</category>
	<category>donmcgreal</category>
	<category>mccullough</category>
	<category>mccm68</category>
	<category>tastycupcakes</category>
	<category>game</category>
	<category>game</category>
	<category>portfolio</category>
	<category>mcgreal</category>
	<category>donmcgreal</category>
	<category>mccullough</category>
	<category>mccm68</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7047</guid>
		<description><![CDATA[At the Boston Agile Game Conference Alex Boutin and myself attended the &#8216;How to design your own game&#8217; workshop given Don McGreal (@donmcgreal) and Michael McCullough (@mccm68) of Tastycupcake.org fame. The game is designed to let people experience the how to plan with stable teams and let them experience the advantages of planning with agile [...]]]></description>
			<content:encoded><![CDATA[<p>At the Boston Agile Game Conference Alex Boutin and myself attended the &#8216;How to design your own game&#8217; workshop given Don McGreal (@donmcgreal) and Michael McCullough (@mccm68) of Tastycupcake.org fame.</p>
<p>The game is designed to let people experience the how to plan with stable teams and let them experience the advantages of planning with agile projects. It does this by giving a group a somewhat simplified portfolio wall and challenge them to optimize the value generated by the teams.<br />
After they have made the perfect 3 year plan, we of course hit them with random events to mess up that plan.<br />
The explanation of the game is up at <a href="http://tastycupcakes.org/2011/07/1291/">tastycupcakes.org</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/07/04/agile-portfolio-game-the-big-payoff/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F07%2F04%2Fagile-portfolio-game-the-big-payoff%2F&amp;title=Agile%20Portfolio%20Game%20%26%238211%3B%20The%20Big%20Payoff" id="wpa2a_4"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/07/04/agile-portfolio-game-the-big-payoff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting started with Node.js, npm, Coffeescript, Express, Jade and Redis</title>
		<link>http://blog.xebia.com/2011/06/24/getting-started-with-node-js-npm-coffeescript-express-jade-and-redis/</link>
		<comments>http://blog.xebia.com/2011/06/24/getting-started-with-node-js-npm-coffeescript-express-jade-and-redis/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 13:40:19 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Node.js npm coffeescript express java redis]]></category>

	<!-- AutoMeta Start -->
	<category>redis</category>
	<category>redis</category>
	<category>app2</category>
	<category>3000</category>
	<category>express</category>
	<category>express</category>
	<category>1337</category>
	<category>sudo</category>
	<category>redis</category>
	<category>redis</category>
	<category>app2</category>
	<category>3000</category>
	<category>express</category>
	<category>express</category>
	<category>1337</category>
	<category>sudo</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7001</guid>
		<description><![CDATA[To celebrate my move to the Agile Consulting and Training division of Xebia I thought it would be very appropriate to start playing with some hip new technologies. From their homepages: Node.js: Evented I/O for V8 JavaScript. (A framework for building completely non-blocking servers in Javascript) NPM: A package manager for node. CoffeeScript: A little [...]]]></description>
			<content:encoded><![CDATA[<p>To celebrate my move to the Agile Consulting and Training division of Xebia I thought it would be very appropriate to start playing with some hip new technologies.</p>
<p>From their homepages:</p>
<p><a href="http://nodejs.org/">Node.js</a>: Evented I/O for V8 JavaScript. (A framework for building completely non-blocking servers in Javascript)<br />
<a href="http://npmjs.org/">NPM</a>: A package manager for node.<br />
<a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a>: A little language that compiles into JavaScript<br />
<a href="http://expressjs.com/">Express</a>: High performance, high class web development for Node.js<br />
<a href="http://jade-lang.com/">Jade</a>: Node Template Engine<br />
<a href="http://www.redis.io/">Redis</a>: An open source, advanced key-value store</p>
<p>In this guide I will take very small steps so that you can verify that you are check whether you are still on track.<br />
The result is an extremely performant, scalable and lightweight alternative for web development.</p>
<p><span id="more-7001"></span></p>
<p>So I installed a brand new Ubuntu 11.4 virtual machine and got started. After following some tutorials, googling and some tweaking this is the step-by-step guide I came up with.</p>
<p><strong>Installing Node.js</strong></p>
<p><code>$ sudo apt-get install python-software-properties<br />
$ sudo add-apt-repository ppa:jerome-etienne/neoip<br />
$ sudo apt-get update<br />
$ sudo apt-get install nodejs<br />
</code></p>
<p><strong>Installing npm</strong></p>
<p><code>$ apt-get install curl<br />
$ curl http://npmjs.org/install.sh | sudo sh<br />
</code></p>
<p><strong>Node.js Hello World</strong></p>
<p><code>$ mkdir helloworld<br />
$ cd helloworld<br />
$ vi helloworld.js<br />
</code></p>
<p>insert</p>
<pre class="brush: jscript; title: ; notranslate">
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337);
console.log('Server running at http://127.0.0.1:1337/');
</pre>
<p><code>$ node helloworld.js</code></p>
<p>check http://127.0.0.1:1337</p>
<p><strong>Add Coffeescript</strong></p>
<p>Writing all that javascript is going to lead to lots and lots of brackets, semi-colons and parantheses. Let&#8217;s use Coffeescript to make our code readable again.</p>
<p><code>$ sudo npm install -g coffee-script<br />
$ cd ..<br />
$ mkdir hellocoffee<br />
$ cd hellocoffee<br />
$ vi hellocoffee.coffee<br />
</code></p>
<p>insert </p>
<pre class="brush: jscript; title: ; notranslate">http = require &quot;http&quot;
http.createServer( (req, res) -&gt;
  res.writeHead 200, {&quot;Content-Type&quot;: &quot;text/plain&quot;}
  res.end &quot;Hello Coffee!!&quot;
).listen 1337

console.log 'Server running at http://127.0.0.1:1337/'
</pre>
<p><code>$ coffee -c hellocoffee.coffee<br />
$ node hellocoffee.js</code></p>
<p>And check http://127.0.0.1:1337 again.</p>
<p><strong>Adding Express</strong></p>
<p>Node.js is a very powerful, but it still requires quite a bit of boilerplating to use it for web development. That&#8217;s where Express comes in. It is build on top of another middleware layer called Connect and gives you much better support in handling requests, rendering, templates and responses.</p>
<p><code>$ cd ..<br />
$ sudo npm install -g mime qs connect express<br />
$ mkdir helloexpress<br />
$ cd helloexpress<br />
$ express<br />
$ npm install -d<br />
$ node app.js<br />
</code></p>
<p>check http://127.0.0.1:3000</p>
<p><code>vi app2.coffee</code></p>
<p>insert:</p>
<pre class="brush: jscript; title: ; notranslate">
express = require('express')app = express.createServer()

# Setup configuration
app.use express.static(__dirname + '/public')
app.set 'view engine', 'jade'

# App Routes
app.get '/', (request, response) -&gt;
  response.render 'index', { title: 'Express with Coffee' }

# Listen
app.listen 3000
console.log &quot;Express server listening on port %d&quot;, app.address().port
</pre>
<p><code>$ coffee -c app2.coffee<br />
$ node app2.js<br />
</code></p>
<p>And check http://127.0.0.1:3000 again.<br />
Now that we have Coffeescript working with Express let&#8217;s add sessions.</p>
<p><strong>Add session support</strong></p>
<p><code>$ vi app2.coffee</code></p>
<p>insert after app.use express.static(__dirname + &#8216;/public&#8217;)</p>
<pre class="brush: jscript; title: ; notranslate">app.use express.cookieParser()
app.use express.session {secret: &quot;Coffeebreak&quot; }
</pre>
<p>insert after app.get &#8216;/&#8217;, (request, response) -></p>
<pre class="brush: jscript; title: ; notranslate">request.session.views++</pre>
<p>replace</p>
<pre class="brush: jscript; title: ; notranslate">response.render 'index', { title: request.session.views + ': Express with Coffee and sessions' }</pre>
<p><code>$ coffee -c app2.coffee<br />
$ node app2.js</code></p>
<p>Check http://127.0.0.1:3000 and refresh a few times. You should see the counter increase.</p>
<p><strong>Install Redis</strong></p>
<p>Open a new terminal.</p>
<p><code>$ wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz<br />
$ tar -zxvf redis-2.2.11.tar.gz<br />
$ cd redis-2.2.11/<br />
$ sudo apt-get install build-essential<br />
$ make<br />
$ ./src/redis-server<br />
</code></p>
<p><strong>Add redis session to node</strong></p>
<p><code>$ npm install -d redis connect-redis<br />
vi app2.coffee</code></p>
<p>insert after express = require &#8216;express&#8217;</p>
<pre class="brush: jscript; title: ; notranslate">RedisStore = require('connect-redis')(express)</pre>
<p>change</p>
<pre class="brush: jscript; title: ; notranslate">app.use express.session {secret: &quot;Coffeebreak&quot;, store: new RedisStore, cookie: { maxAge: 60000 } }</pre>
<p><code>$ coffee -c app2.coffee<br />
$ node app2.js<br />
</code></p>
<p>In the Redis terminal you should now see something like:<br />
<code>[25489] 24 Jun 04:57:11 - DB 0: 1 keys (1 volatile) in 4 slots HT.<br />
[25489] 24 Jun 04:57:11 - 1 clients connected (0 slaves), 799032 bytes in use<br />
</code></p>
<p>Check http://127.0.0.1:3000 and refresh a bunch of times<br />
kill and restart node</p>
<p><code>$ node app2.js</code></p>
<p>Check http://127.0.0.1:3000 again and refresh a few more times<br />
Note that you started where you left off.</p>
<p>And that brings us to the end of this guide. As you can see the stack is very powerful and extremely small, lightweight and clean. With all the session information in the Redis store the availability of the entire systems comes down to the availability of Redis. And with these guys working on a proper clustering solution it will be very interesting to see where all this is going in the near future.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/06/24/getting-started-with-node-js-npm-coffeescript-express-jade-and-redis/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F06%2F24%2Fgetting-started-with-node-js-npm-coffeescript-express-jade-and-redis%2F&amp;title=Getting%20started%20with%20Node.js%2C%20npm%2C%20Coffeescript%2C%20Express%2C%20Jade%20and%20Redis" id="wpa2a_6"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/06/24/getting-started-with-node-js-npm-coffeescript-express-jade-and-redis/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>What I learned about stories on my holiday</title>
		<link>http://blog.xebia.com/2011/01/11/what-i-learned-about-stories-on-my-holiday/</link>
		<comments>http://blog.xebia.com/2011/01/11/what-i-learned-about-stories-on-my-holiday/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 23:11:44 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
				<category><![CDATA[General]]></category>

	<!-- AutoMeta Start -->
	<category>fish</category>
	<category>goby</category>
	<category>fishes</category>
	<category>gobies</category>
	<category>sergeant</category>
	<category>seahorse</category>
	<category>scuba</category>
	<category>symbioses</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5727</guid>
		<description><![CDATA[This year I spend New Year&#8217;s Eve at the beach near the small village of Marsa Alam in Egypt. The point of the holiday was to go scuba diving for a week on some of the best reefs in the world in the Red Sea. What I learned during this week is just how powerful [...]]]></description>
			<content:encoded><![CDATA[<p>This year I spend New Year&#8217;s Eve at the beach near the small village of Marsa Alam in Egypt. The point of the holiday was to go scuba diving for a week on some of the best reefs in the world in the Red Sea.</p>
<p>What I learned during this week is just how powerful stories are. And that they do not need to be big or elaborate. Let me explain.<br />
<span id="more-5727"></span></p>
<p>My girlfriend had just gotten her scuba diving certification when it was slightly warmer in the Netherlands. But she had not seen more than 8 fish of 3 different species while getting the certification.<br />
So it was quite a culture shock for her to be diving in the Red Sea, which has hundreds of different species and always tens of different types of fish to see at any given moment.</p>
<p>With this overload of information it was hard for her to learn any of the new fishes. Trying to point out a type of fish in the book and then underwater did not prove very effective.<br />
That wasn&#8217;t until I realized how I remember the different types of fishes and that was through , sometimes extremely short, stories, usually about a fish behavior.</p>
<p>Some examples:</p>
<p><a href="http://en.wikipedia.org/wiki/Seahorse#Reproduction">Seahorse</a><br />
This is the story of how the male seahorse has a womb-like organ in which he carries the babies.</p>
<p><a href="http://animals.nationalgeographic.com/animals/fish/butterflyfish.html">Butterfly fish</a><br />
Most butterfly fishes mate for life and are almost always found in pairs.</p>
<p><a href="http://en.wikipedia.org/wiki/Sergeant_major_(fish)">Sergeant Major</a><br />
Sergeant Majors are very territorial, especially when they have just deposited their eggs. Which can be seen a purple spots on rocks.<br />
You will often find that a picture of a Sergeant Major is completely blurred and out of focus, because it decided to attack the camera at the last moment.</p>
<p><a href="http://en.wikipedia.org/wiki/Goby#Symbiosis">Goby</a> Symbioses<br />
There are actually 2 ways Gobies work together with other animals. The most common is that they clean other fish. They stay in an area called a cleaning station. Whenever a fish wants to be cleaned, it swims to a cleaning station and it will be cleaned by the Gobies and other cleaning fish. The most remarkable is that these fish would normally consider these fish prey. It is remarkable to see a goby swim not just in the mouth of a huge grouper, but also come out alive.</p>
<p>And the other great story about Gobies is their symbioses with a type of shrimp. The shrimps will burrow a hole in the sand and the Goby will keep watch. They communicate with their antenna and fins. Amazing to see when it happens.</p>
<p>When I started sharing these and other stories behind the fishes the underwater world suddenly came alive. </p>
<p>So how will that benefit you when you are at the office doing serious work? Stories matter; They allow you to connect with other people much better. Dry facts are a good way to communicate information, but stories will make people remember or act. Maybe even inspire.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/01/11/what-i-learned-about-stories-on-my-holiday/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F01%2F11%2Fwhat-i-learned-about-stories-on-my-holiday%2F&amp;title=What%20I%20learned%20about%20stories%20on%20my%20holiday" id="wpa2a_8"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/01/11/what-i-learned-about-stories-on-my-holiday/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>What World of Warcraft and Scrum have in common</title>
		<link>http://blog.xebia.com/2010/12/10/what-world-of-warcraft-and-scrum-have-in-common/</link>
		<comments>http://blog.xebia.com/2010/12/10/what-world-of-warcraft-and-scrum-have-in-common/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 10:03:49 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5559</guid>
		<description><![CDATA[Why a good Scrum is like World of Warcraft Today I saw a brilliant TED talk by Tom Chatfield called &#8220;7 ways games engage the brain&#8221;. While watching the presentation and going through these 7 ways, I realized that while I have seen these playing games, I have also seen these happen in a good [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Why a good Scrum is like World of Warcraft</strong></p>
<p>Today I saw a brilliant TED talk by Tom Chatfield called <a href="http://www.ted.com/talks/tom_chatfield_7_ways_games_reward_the_brain.html">&#8220;7 ways games engage the brain&#8221;</a>. While watching the presentation and going through these 7 ways, I realized that while I have seen these playing games, I have also seen these happen in a good Scrum.</p>
<p>The 7 ways are:</p>
<ol>
<li>Experience bars measuring progress</li>
<li>Multiple long and short-term aims</li>
<li>Rewards for effort</li>
<li>Rapid, frequent and clear feedback</li>
<li>An element of Uncertainty</li>
<li>Windows of enhanced attention</li>
<li>Other people</li>
</ol>
<p>I will go through each of the points comparing World of Warcraft to a Scrum.<br />
<span id="more-5559"></span></p>
<p><strong>Experience bars measuring progress</strong></p>
<p><em>World of Warcraft</em>:</p>
<p>In World of Warcraft you have a very literal experience bar when you level a character from level 1. But even when you get to the maximum level the game changes from focus around gaining experience and levels and shifts to gaining better and better gear. To make this process more visible people have actually created ways to distill the level of someone&#8217;s gear into a single number. Just so they can see their own improvements and compare theirs to others.</p>
<p><em>Scrum</em>:</p>
<p>In Scrum, all progress is tracked by a burndown chart.<br />
<img alt="" src="http://www.infoq.com/resource/articles/agile-kanban-boards/en/resources/Fig4_DailyBurndown.jpg;jsessionid=204C665239CBFE1E2910178BEED428E5" title="Burndown Chart" class="aligncenter" width="477" height="347" /></p>
<p><strong>Multiple long and short-term aims</strong></p>
<p><em>World of Warcraft</em>:</p>
<p>Tom compares killing creatures in World of Warcraft with opening boxes looking for pie. Finding 5000 pies is boring; finding 15 is fun. World of Warcraft makes it fun by having a whole lot of different quests and challenges to overcome on a wide range of levels. From the killing of monster hoping he will drop item X to vanquishing the big dragon who is threatening to destroy the entire world.<br />
Which is probably why I have killed 85592 creatures since they started keeping track without being bored out of my skull yet.</p>
<p><em>Scrum</em>:</p>
<p>Scrum (Or Agile Modeling, or whatever you want to call it) does pretty much the same by breaking long term goals and visions down into smaller and smaller pieces. At the top are visions and we work our way down through themes, epics, user stories. And even those are broken into tasks, the equivalent of &#8220;kill 10 bears&#8221; quests.</p>
<p><strong>Reward for effort</strong></p>
<p><em>World of Warcraft</em>:</p>
<p>In World of Warcraft you always get some reward for doing anything. Kill any monster and you will get a little bit of loot, possibly some experience. Gathering resources and crafting obviously gives rewards too. The interesting bit here is that even the mighty Blizzard messed up in this department, but they fixed it later in the game.<br />
As I mentioned before, at maximum level the game changes from leveling a character to improving his gear. But because of point 5, the need for uncertainty, and the desire to extend the playing experience, the best bossed can only be killed once a week and drop random items from a fixed list. This meant that someone who was either unlucky or already had all the items from a boss would get no reward. This was changed a few years ago with the introduction of points to buy items from when you killed any boss, giving everybody at least some points to spend on stuff. </p>
<p><em>Scrum</em>:</p>
<p>Anything you do in Scrum is related to some task that is being tracked. These tasks are small, typically between 4 and 10 hours of work. After every task you get rewarded with the feeling of having completed something. This is usually done with the ceremony of moving your task on the Scrum Board from In Progress to Done.</p>
<p><strong>Rapid, frequent and clear feedback</strong></p>
<p><em>World of Warcraft</em>:</p>
<p>In World of Warcraft all feedback is instant and clear. Kill a monster, get experience and items; Craft an item and receive it; Hand in a quest and you can pick a quest reward; Level up and you will receive new abilities; Fail at killing a boss and you will die and have to run back to your corpse, have bad tactics and you lose a match. You get a reward for doing something good, and get punished when you do something bad.</p>
<p><em>Scrum</em>:<br />
Scrum (with some borrowing from XP) also has multiple feedback cycles. The first is Continuous Integration and automatic testing. On every checkin of code the CI application will check out your code, compile it, run all your tests and report the outcome. This gives you near instant feedback that your code is still in decent shape.<br />
Then there is the burndown chart feedback. Are we still on track to make our Sprint goals? How about the epic goals?<br />
At the end of every sprint we demonstrate our changes to the Product Owner and other stakeholders. This allows them to give feedback on what we did the past weeks.<br />
And of course we have the retrospective, where we can give feedback on what went well and what could be improved in delivering working software.<br />
All initiatives to give rapid, frequent and clear feedback.</p>
<p><strong>Element of uncertainty</strong></p>
<p><em>World of Warcraft</em>:</p>
<p>The rewards in World of Warcraft are a mix of certain and uncertain awards. Will this monster drop my quest item? will I receive an extra skill when I make this item?<br />
Bosses are known to drop certain items, but what they drop will be random. This adds to the excitement of killing bosses to find out if they drop the item you want from them.</p>
<p><em>Scrum</em>:</p>
<p>All of Software Development is all about uncertainty. And Scrum is no exception to that. A lot of things are uncertain during a sprint.</p>
<ul>
<li>Will my code still compile and all the test run?</li>
<li>Will we make our sprint goal?</li>
<li>Will the demo work when it is supposed to?</li>
<li>Will the stakeholders like what they see when they get to see it?</li>
</ul>
<p><strong>Window of enhanced attention</strong></p>
<p><em>World of Warcraft</em>:</p>
<p>Have you ever tried to start a conversation with someone who is in the middle of trying to kill a boss he has never killed before? That is immersion. The person is completely focussed on achieving her goal and will not be disturbed by the game until after the encounter.</p>
<p><em>Scrum</em>:</p>
<p>In Scrum we also have the notion of not changing or disturbing a team during a Sprint. Between Sprints stakeholders can change whatever they want, but during a Spring the team is in control of how and when. This allows a team to be immersed in the problem at hand and solve it.</p>
<p><strong>Other people</strong></p>
<p><em>World of Warcraft</em>:</p>
<p>Being a Massively Online Roleplaying Game, World of Warcraft is for a large part about player interaction.<br />
There is cooperation because you need to work together to kill the tougher bosses, but there is also competition between players. Both in who can kill the toughest bosses first or has the best gear, but also all out warfare in player versus player combat.</p>
<p><em>Scrum</em>:</p>
<p>Is obviously all about working together. It is a tool for people to collaborate and produce great quality software that delivers real business value. A lot of people have to be working together to make that happen.</p>
<p><strong>To wrap it all up</strong></p>
<p>A good working Scrum is eerily similar to World of Warcraft, which is interesting, because we can now ask ourselves the question: &#8220;Would I rather work, or be playing World of Warcraft?&#8221;. If the answer is the latter, you might want to take a look into which above areas you are not addressing properly at work.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/12/10/what-world-of-warcraft-and-scrum-have-in-common/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F12%2F10%2Fwhat-world-of-warcraft-and-scrum-have-in-common%2F&amp;title=What%20World%20of%20Warcraft%20and%20Scrum%20have%20in%20common" id="wpa2a_10"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/12/10/what-world-of-warcraft-and-scrum-have-in-common/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Do NOT do it right the first time</title>
		<link>http://blog.xebia.com/2010/04/30/do-not-do-it-right-the-first-time/</link>
		<comments>http://blog.xebia.com/2010/04/30/do-not-do-it-right-the-first-time/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 10:13:49 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Testing]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=4527</guid>
		<description><![CDATA[I was triggered recently by a status update from someone that mentioned that we will have to get &#8216;this&#8217; right the first time around in the future. This particular case was about a test, very late in the project cycle, where lots of things needed to get together perfectly to make it work. Any delays [...]]]></description>
			<content:encoded><![CDATA[<p>I was triggered recently by a status update from someone that mentioned that we will have to get &#8216;this&#8217; right the first time around in the future.<br />
This particular case was about a test, very late in the project cycle, where lots of things needed to get together perfectly to make it work. Any delays would not only delay the current project, but all other projects that rely on the shared resources being used. This huge cost if things go wrong is why it is so imperative that we do get it right the first time around.<br />
The problem is that this involves tens of people across multiple companies and departments, who have written thousands of lines of code.</p>
<p>Now I do not know what they are going to do to make things right in the future, but if we go by past experience most people will want to enforce even stricter entrance criteria.<br />
There are a couple of problems with this approach:<br />
<span id="more-4527"></span></p>
<ul>
<li>Having to test every component for these extra criteria is a lot of work</li>
<li>The longer the list of criteria is, the harder it will be to guarantee that every component does adhere to all of them</li>
<li>When integrating multiple components it is the interaction where the complexity is, not the separate components</li>
<li>You will only prevent foreseen errors</li>
</ul>
<p>Especially the last two make it very unlikely that having stricter entrance criteria will work. So what can we do?</p>
<p>All of this reminds me of something in ancient IT history. I was not around myself, but I have heard much about the <a href="http://en.wikipedia.org/wiki/Punched_card">Punch Card</a> days. Just to refresh everyone&#8217;s memory. This was an age when if you programmed something you made a punch card. You then took a stack of these cards to an operator who at some point in time ran your program on a big computer with a fraction of the computing power that you currently have in your microwave.</p>
<p>Now these programmers were in pretty much the same boat. They <strong>had</strong> to get it right the first time around. Any typo or mistake and at best a couple of hours were wasted, potentially days.<br />
Currently however there are very few programmers around that care about typos before running a program. Let alone trying to figure out more complex mistakes. Why is that?<br />
The answer is of course the compiler. A compiler can check your code for these mistakes much more quickly then you can. Why would you spend hours trying to find errors in your code manually when the compiler can find most syntactic errors for you in minutes or seconds?</p>
<p>The next great invention was the invention of the Unit Test. It was a lot more involved than just running a compiler on your code, but it did allow you to very quickly find not just syntactic errors, but also most of your logical errors.</p>
<p>Then came Continuous Integration. No longer content in finding errors in a single persons code we are now able to find another class of logical errors, which are introduced by the complexity of having multiple people work on the same application and relying on external components.</p>
<p>So what do these three measures have in common? They are very cheap, certainly compared to the cost of not detecting the error and they are very quick. These properties allow you to use them whenever you want, which means you might as well use them after every significant change, just in case you introduced an error.</p>
<p>In the complex environments we are currently working in there is no way we can get it right the first time all the time.<br />
So next time you are saying &#8220;We just have to get this right first time in the future&#8221; or hear someone else say it, make a slight adjustment. &#8220;We have to go get this right the first time around when we try this for real&#8221;. And then go find a cheap and quick way of finding out if it works.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/04/30/do-not-do-it-right-the-first-time/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F04%2F30%2Fdo-not-do-it-right-the-first-time%2F&amp;title=Do%20NOT%20do%20it%20right%20the%20first%20time" id="wpa2a_12"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/04/30/do-not-do-it-right-the-first-time/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Skiing as an agile vs waterfall metaphor</title>
		<link>http://blog.xebia.com/2010/01/31/skiing-as-an-agile-vs-waterfall-metaphor/</link>
		<comments>http://blog.xebia.com/2010/01/31/skiing-as-an-agile-vs-waterfall-metaphor/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 00:30:02 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=4009</guid>
		<description><![CDATA[I was asked by one of my clients to give a short introduction into Agile. As we did not have an appropriate presentation for this kind of audience and knowledge level I decided to create a new presentation. And while I was thinking of a good metaphor to compare traditional waterfall against agile methodologies the [...]]]></description>
			<content:encoded><![CDATA[<p>I was asked by one of my clients to give a short introduction into Agile. As we did not have an appropriate presentation for this kind of audience and knowledge level I decided to create a new presentation. And while I was thinking of a good metaphor to compare traditional waterfall against agile methodologies the pictures of my recent snowboarding trip caught my eye and it hit me; Skiing (or snowboarding) is a very good metaphor to compare both methodologies.</p>
<p>It has the same characteristics as a project in that once you get started it just keeps on going; There are other projects (or skiers) in your way, environments change and conditions might not be what you expected them to be.</p>
<p>Let&#8217;s see how it works out:<br />
<span id="more-4009"></span></p>
<blockquote><p><strong>Walter the waterfall skier.</strong></p>
<p>Walter is standing on top of the mountain, having just left the ski lift. During the requirements phase he and Adrian had decided that they were going to have lunch in a restaurant not too far from here at the bottom of the slope. The only thing between Walter and a bratwurst and beer is a couple hundred meters of completely empty ski slope.<br />
Looking down he decides it is time to make the design for the decent. He takes out his notepad from his backpack, sits down and starts drawing the slope with the estimated distances and angles on it.<br />
He can not really see all that well past one of the turns, but luckily he is well prepared and he takes out some of the photographs of the last part he found last night and continues drawing.<br />
Happy that the drawing of the slope is accurate enough Walter starts drawing in his planned decent. This involves drawing in every turn his is going to make to make sure he slows down enough so that he stays in control, that he goes quickly enough to go over that bump and that he avoids the pillars in the middle of the slope.</p>
<p>Finally he is happy with the result, stands up, and puts on his skis and goes.. </p>
<p><strong>Adrian the agile boarder</strong></p>
<p>A little bit earlier Adrian had realized he was due to meet Walter at the restaurant in 30 min. The restaurant was just over the hill and if he left now he would make it there in time.</p>
<p>On the ride in the ski lift Adrian takes a look at the map. The slope on the other side is a red slope, which means it would not be very easy, but certainly doable for Adrian. He also needs to make sure he does not miss one of the turns to the right to stay on the right slope.<br />
Leaving the lift he walks to the crest of the slope and looks down. The whole slope is nice and empty and he fastens his board. </p>
<p><strong>The decent</strong></p>
<p>Together with the other 5 people from the lift Adrian starts his decent when suddenly out of nowhere a skier appears.<br />
It is Walter who is intently studying the map he drew and only glances up every now and then to check his location. One of Adrian&#8217;s fellow skiers only managed to avoid a collision with Walter by letting himself fall and tumble down.<br />
A little further Adrian notices an ice patch further down and adjusts his speed accordingly. Walter however is still studying his map and fails to see the ice and falls hard on his face.<br />
Not discouraged by this however he sets up, checks his map and continues to the first junction.<br />
When Adrian and Walter get there however they notice the slope is closed because of possible avalanches. Walter starts to curse, the last bit of the slope had taken him the better part of half an hour to plan properly. He finds a spot to sit, takes out his notepad and map again starts drawing again.<br />
Adrian noticed nothing of this however. Remembering there was a second turn to take he just continued down when he noticed the closure of the first slope. </p>
<p>Adrian was on his second beer by the time Walter arrived, completely covered in snow. When asked what happened Walter explained that because of the change in requirements a redesign was needed. But because of the time pressure he did not have time to do a full redesign, so he reused his design for the other slope. They seemed very similar at first. It wasn&#8217;t until later he realized the pillars were spaced differently and he only barely managed to avoid one.</p></blockquote>
<p>Does it sound like any project you have seen?</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/01/31/skiing-as-an-agile-vs-waterfall-metaphor/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F01%2F31%2Fskiing-as-an-agile-vs-waterfall-metaphor%2F&amp;title=Skiing%20as%20an%20agile%20vs%20waterfall%20metaphor" id="wpa2a_14"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/01/31/skiing-as-an-agile-vs-waterfall-metaphor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Is debugging a skill?</title>
		<link>http://blog.xebia.com/2009/09/25/is-debugging-a-skill/</link>
		<comments>http://blog.xebia.com/2009/09/25/is-debugging-a-skill/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 15:53:40 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Java]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=3187</guid>
		<description><![CDATA[Recently someone asked me how I came to be so good in debugging things. I was a bit startled by the question as I was not aware of it being something you could be good at. But some people are better at finding problems then others, so I guess it must be true. This is [...]]]></description>
			<content:encoded><![CDATA[<p>Recently someone asked me how I came to be so good in debugging things. I was a bit startled by the question as I was not aware of it being something you could be good at. But some people are better at finding problems then others, so I guess it must be true. This is my attempt at trying to figure out what debugging is and how you can get better at it.<br />
<span id="more-3187"></span></p>
<p>When I look back at my most successful debugging sessions there are three recurring themes:</p>
<ul>
<li>Triage</li>
<li>Partitioning</li>
<li>Assumptions</li>
</ul>
<p><strong>Triage</strong></p>
<p>When something goes wrong, there are usually a lot of other issues that are either caused by that failure or are related. My first priority when faced with multiple issues is to figure out which issue is most important to solve right now. Those are usually either issues that prevent all flows, or the most important happy flow, from functioning properly, or likely root causes of multiple issues.<br />
This focus is needed because when you start debugging you usually run into errors in log files, stacktraces on web pages etc. Whenever you see anything that indicates a problem you can now ask yourself if it is related to the problem you are trying to solve or not and prevent being distracted by unrelated issues.</p>
<p><strong>Partitioning</strong></p>
<p>The next step is isolating the issue. Difficult debugging problems usually arise when things disappear or there is an unexpected flow in the logic. What I usually do is create an overview of the entire application and its related systems either in my head or scribbled on a piece of paper. With this overview in place you can find system or module boundaries where you can usually quickly check whether the problem is present at that location and zoom in on that.<br />
So first figure out what application the unexpected happens, then what module, class and method level. Do not guess what method it will be and verify that.</p>
<p><strong>Assumptions</strong></p>
<p>There are two famous sayings related to assumptions. &#8220;<em>Assumptions are the mother of all f*ckups</em>&#8221; and &#8220;<em>When you assume things, you make an ass out of u and me</em>&#8221; and those are very true. Especially when debugging you need to be extremely careful to not make any assumptions. When 2 requests in a log file look the same, copy and paste them and manually verify them line by line or better yet, run a diff on them. Do not only look whether the request is sent, but is it a valid request?  Assumptions are most likely the reasons you are in the mess in the first place, the only way to get out of it is to be mindful of them. </p>
<p>Forcing myself to answer the question and write this blog post has forced me to really think about debugging and going from unconscious competent to conscious competent, which is always a good thing. Please leave a comment if you think I have missed something, or if you have any practices that have worked for you.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/09/25/is-debugging-a-skill/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F09%2F25%2Fis-debugging-a-skill%2F&amp;title=Is%20debugging%20a%20skill%3F" id="wpa2a_16"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/09/25/is-debugging-a-skill/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The worst thing about Waterfall</title>
		<link>http://blog.xebia.com/2009/08/27/the-worst-thing-about-waterfall/</link>
		<comments>http://blog.xebia.com/2009/08/27/the-worst-thing-about-waterfall/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 11:00:13 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Java]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=2978</guid>
		<description><![CDATA[Last week, after one of our bi-weekly Xebia Knowledge Exchange meetings when we should have been having a beer chatting about cars and sport, a few fellow Xebians and I were having a beer chatting about agile vs waterfall. The conversation quickly turned to the question &#8220;what is the worst part about waterfall.&#8221; In the [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, after one of our bi-weekly Xebia Knowledge Exchange meetings when we should have been having a beer chatting about cars and sport, a few fellow Xebians and I were having a beer chatting about agile vs waterfall. The conversation quickly turned to the question &#8220;what is the worst part about waterfall.&#8221;</p>
<p>In the end we settled on &#8220;Incentivizing (is that a word?) parts of the chain instead of the whole&#8221;.</p>
<p>Let me explain.<br />
<span id="more-2978"></span></p>
<p>A typical waterfall project has a few distinct phases that are always something along the lines of Business Analyses, Detailed Specification, Construction and Testing. They all depend on each other and nothing can start before the previous phase is finished. You can not start Constructing if you do not know what the Detailed Specifications are for example. Nothing really spectacular wrong with this yet. The problem arises when you consider that all phases are usually impacted and budgeted separately. You can not know how long Construction will take until the Specification guys are done.<br />
But in the real world you have to manage your resources, so once your impact and estimates for the Specification phase are done, you have to make reservations for the Construction guys to actually code your project.</p>
<p>With that reservation in place, there is now a very big incentive to have that phase finished by that time, because the penalty for not finishing in time are that a whole development team is twiddling its thumbs. When it comes to making decisions that might delay the current phase, even though it might save hundred of hours later down the line are now surprisingly hard. A project manager&#8217;s first priority is delivering his particular part of the chain on time.<br />
This is hard to spot though, because the next phase will look at the deliverables of the previous phase and if there are any defects or inefficiencies they will just plan and budget accordingly. This hides (most of) the real pain. Usually the only performance metrics that are used are if you delivered your part in time. Not if the overall project went smoothly.</p>
<p>With no focus on the total project costs, including maintenance, it is no surprise that a lot of these projects eventually run very late and get more and more expensive as they go along. So if you absolutely <strong>have</strong> to do waterfall, at least make sure that if ever a decision comes up about when to fix or improve something the answer can not be anything but: &#8220;<strong>Right now!</strong>&#8220;</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/08/27/the-worst-thing-about-waterfall/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F08%2F27%2Fthe-worst-thing-about-waterfall%2F&amp;title=The%20worst%20thing%20about%20Waterfall" id="wpa2a_18"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/08/27/the-worst-thing-about-waterfall/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Culture is the new Process</title>
		<link>http://blog.xebia.com/2009/07/27/culture-is-the-new-process/</link>
		<comments>http://blog.xebia.com/2009/07/27/culture-is-the-new-process/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 09:19:42 +0000</pubDate>
		<dc:creator>Erwin van der Koogh</dc:creator>
				<category><![CDATA[Java]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=2794</guid>
		<description><![CDATA[Over the years I have seen many attempts to increase software quality. Most of our clients try to increase software quality by introducing a quality process. It usually involves a combination of strict coding guidelines, code reviews, checklists, acceptance criteria based on things like PMD, Checkstyle and Findbugs and audits by external parties amongst others. [...]]]></description>
			<content:encoded><![CDATA[<p>Over the years I have seen many attempts to increase software quality. Most of our clients try to increase software quality by introducing a quality process. It usually involves a combination of strict coding guidelines, code reviews, checklists, acceptance criteria based on things like PMD, Checkstyle and Findbugs and audits by external parties amongst others.<br />
But what struck me a couple of weeks ago is that we, as Xebia, have little extensive formal quality process. That is, while we have do have a lot of best practices and we test and measure quality a lot, we never have to resort to &#8216;enforcing&#8217; quality.<br />
<span id="more-2794"></span><br />
There are no mandatory code reviews, no coding guidelines and while I know there are some PMD, Checkstyle and Findbugs configuration files in the Maven repository somewhere, but I seriously doubt that all our projects make us of them. Yet when our software is audited by external auditors we receive marks like &#8220;There are no recommendations on how to improve the maintainability and reliability..&#8221; and &#8220;The strongest point of the system is that it does not contain any weak points. The systems scored great or excellent on all points.&#8221;.<br />
I have seen exactly the same thing at one of our customer about a year ago while I was doing a security audit. The code was clear, extremely easy to understand and we had literally only 1 unimportant finding, where normally we have tens of important ones. They had no process to speak off to make sure that that happened, it just happened.<br />
At my previous employer we also had very little in the way of process and still managed to deliver high quality software. How is this all possible?</p>
<p>All these environments have a couple things in common in no particular order.</p>
<ul>
<li>They have experienced and passionate teams and especially team leaders.</li>
<li>There is a very strong focus on keeping things simple and getting results.</li>
<li>The entire organization has an culture of excellence.</li>
<li>An open culture.</li>
</ul>
<p>I will discuss those points one by one:</p>
<p><strong>Experienced teams and team leaders</strong></p>
<p>Xebia has very strict recruiting requirements and as part of the recruitment procedure, besides the usual interview, we have assignments where candidates can (and must) show they have experience in the field. At my previous employer and my customer there were Gertjan van Oosten and Andre Kampert, easily some of the best team leads I have come across in my career. These people not only know the rules to writing good software, but also when to break them. All those people are passionate about creating quality working software.</p>
<p><strong>Simplicity</strong></p>
<p>But maybe the most important thing that happened in all the environments is a very strict focus on keeping things simple and getting results. However do not confuse simplicity with using simple code. The best example on how not to do it came from an application I had to quickly fix a couple of bugs in. The most complex construct in the entire application was a case statement with 4 cases and a default. However there were methods with 6 deep nested if statements. Some complexity, in this case in the form of polymorphism for example, would have gone a long way to make the application more simple.<br />
The focus on results makes sure the application never strays too far away from working code. If we have something working now and we have to have something working in one week, we better make sure it keeps working in between as well.</p>
<p><strong>Culture of excellence</strong></p>
<p>This one is very visible within Xebia, but also in the other organizations. One of our core values in Quality without Compromise. While that is of course utopian, it does mean that if we ever make a compromise on quality, we have at least thought about it very carefully. It also means I do not have to defend each and every decision to project managers or line managers. If I can do something dirty in 2 hours and do it properly in a day, I can easily say it is going to take a day. We do things right or we do not do them at all.</p>
<p><strong>Open culture</strong></p>
<p>Software quality is never black and white. There is a great deal of grey. What these environments have is a culture in which it is ok to discuss quality. No single person &#8216;owns&#8217; a single piece of code and the entire thing is a team effort. A discussion about the quality of the code that someone had written is perceived as a way to improve both the code and the person having written the code.</p>
<p>So to sum it all up, if you are having code quality issue you should contemplate throwing out all quality procedures, hire a passionate, experienced team lead, keep a focus on simple, working code, and give your team the assurance that while it is ok to make mistakes, it is not ok to take shortcuts and not to do things properly.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/07/27/culture-is-the-new-process/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F07%2F27%2Fculture-is-the-new-process%2F&amp;title=Culture%20is%20the%20new%20Process" id="wpa2a_20"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/07/27/culture-is-the-new-process/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/author/evanderkoogh/feed/ ) in 0.77323 seconds, on Feb 9th, 2012 at 5:35 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 6:35 pm UTC -->
