<?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>Machiel&#039;s Blog</title>
	<atom:link href="http://machielgroeneveld.nl/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://machielgroeneveld.nl</link>
	<description>Conscious Development</description>
	<lastBuildDate>Wed, 10 Mar 2010 13:29:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Quality vs. Automated Software Testing</title>
		<link>http://machielgroeneveld.nl/?p=187#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=187#comments</comments>
		<pubDate>Tue, 09 Mar 2010 15:40:17 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[deming]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=187</guid>
		<description><![CDATA[Inspection is not enough
Deming is world famous, especially in the Agile/Lean world. During his life Deming taught top management how to improve design (and thus service), product quality, testing and sales. His name is synonymous to quality improvement and his philosophies are still seen as visionary.
One of  Deming&#8217;s principles is: &#8220;Cease dependence on inspection to achieve [...]]]></description>
			<content:encoded><![CDATA[<h3>Inspection is not enough</h3>
<p>Deming is world famous, especially in the Agile/Lean world. During his life <a href="http://en.wikipedia.org/wiki/W._Edwards_Deming" target="_blank">Deming</a> taught top management how to improve design (and thus service), product quality, testing and sales. His name is synonymous to quality improvement and his philosophies are still seen as visionary.</p>
<p>One of  Deming&#8217;s principles is: &#8220;<em>Cease dependence on inspection to achieve quality. Eliminate the need for massive inspection by building quality into the product in the first place.</em>&#8221; Sounds good, right? In stead of testing every last inch of your product, you increase it&#8217;s intrinsic quality which is more sustainable, has a direct benefit for the customer and eventually lowers cost.</p>
<p>Now how does that relate to software development? In software development we do quite a bit of inspection, not only by peer reviews but mostly by testing. We test documents, units of code, modules of code, systems, user interfaces, services etc. We test functionality, speed, error handling, ease of use, fit for purpose etc. etc. My interpretation of what Deming would say to us: focus less on creating more tests, focus more on product and process quality.</p>
<p><span id="more-187"></span></p>
<p>Let&#8217;s start out with the obvious, tests are useful. Even when you&#8217;re 100% Deming compliant™ you&#8217;ll still have tests, especially automated tests. But I&#8217;m not arguing to stop testing, the point I&#8217;m making is that tests lure you into a false sense of security and are not a guarantee for improving quality. A symptom of that is in software development QA people (often called testers) seem mainly concerned with &#8216;checking&#8217; and spend very little time on &#8216;mistake proofing&#8217;.</p>
<h3>Mistake proofing</h3>
<p>John Hunter <a href="http://management.curiouscatblog.net/2010/03/08/improving-software-development-with-automated-tests/" target="_blank">says</a> tests are a form of prevention. They are a form of <a href="http://en.wikipedia.org/wiki/Poka-yoke" target="_blank">Poke Yoke</a>, Poke Yoke means &#8220;mistake-proofing&#8221;. His reasoning is: with a test in place, you can&#8217;t introduce a bug in the software. But this is not true, the test detects the bug, but doesn&#8217;t prevent the bug from entering the code. A better example of <a href="http://facultyweb.berry.edu/jgrout/pokasoft.html" target="_blank">Poke Yoke in software development</a> is using high level language constructs, these prevent mistakes that are easily made with low level languages. The difference is that the mistake-proofing is done at the level of human actions where the mistakes occur and prevents the mistake being made. A test doesn&#8217;t prevent a mistake being made, it just signals that the product contains (at least) one bug. So even if your test servers as a Poke Yoke, it&#8217;s only detecting, not preventing.</p>
<h3>Prevent Construction Errors</h3>
<p>Tests and other forms of inspection have one fundamental limitation. I&#8217;ll try to clarify this with an analogy:</p>
<p>Suppose you&#8217;re a gardener who has to keep a big lawn. The worst enemy of the gardener is the mole and its molehills. Now suppose you&#8217;ve discovered a molehill. You don&#8217;t want those on your lawn. So you can remove it and place a heavy object (a slab of stone) where the hole was dug. You&#8217;ve made sure the mole can&#8217;t create a molehill at that particular place, but you haven&#8217;t prevented the next molehill from appearing.</p>
<p>After talking to your software tester friend, he helps you to find a way to strategically put the slabs in place before the mole arrives, preventing a lot of the molehills from appearing. You&#8217;ll soon end up with a garden covered in stone slabs and it keeps your lawn fairly green. However, the obvious question is, why aren&#8217;t you trying to get rid of the mole?</p>
<p>In software development, I&#8217;ve seen too few team getting rid of the mole. Too few discussions on the real cause of bugs. I would expect a Deming compliant team™ asking: &#8220;What preceded writing that particular bit of code that led to the bug? What would make it <em>impossible</em> to create this bug again? How can we increase quality across the board to prevent these <em>kind</em> of bugs, not just this single one?&#8221;</p>
<h3>Prevention vs. Inspection</h3>
<p><a href="http://twitter.com/DReinertsen/status/9982288783" target="_blank">Donald Reinertsen</a> says &#8220;Inspection makes economic sense if it is more cost-effective than prevention.&#8221;  Of course, this is a truism and automated tests are a relatively cheap way to do inspection. When inspection is your major instrument for assuring and improving quality, there&#8217;s a risk of <strong>test-addiction</strong>. Suppose you have lots of tests, but in production the customers finds a bug. What do you do? You create a test for it and that might not be the best way to handle the bug. If the actual cause is low software quality due to overly complex design or sloppy coding, it&#8217;s not enough to create a test.The opposite could even be true: the number of tests per quantity of software (LoC) should decrease over time because quality increases to such a level tests are no longer needed in large numbers.</p>
<h3>Decrease the necessity of testing</h3>
<p>In software development we need to fight the mole more often than patching the molehill. Do a root cause analysis with the team to uncover the cause of the bug and change your process, change they way you do design, introduce patterns, use pair programming, take a training course or do whatever prevents the mistake from occurring again, than will not only prevent that particular bug from re-occuring, it will prevent a whole slew of bugs because overall quality is higher. Your customer will thank you for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=187</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fitting Scrum to project organizations</title>
		<link>http://machielgroeneveld.nl/?p=143#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=143#comments</comments>
		<pubDate>Fri, 27 Nov 2009 13:51:46 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[prince2]]></category>
		<category><![CDATA[product development]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=143</guid>
		<description><![CDATA[Isn&#8217;t Scrum a project management method?
No it&#8217;s not. It&#8217;s a product development method (or framework). The good thing is that projects always have a product development part, so Scrum can be embedded in your project. But beware of the  &#8217;Scrum organizational model&#8217; which is geared mostly to product development companies. If your organization chooses to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Isn&#8217;t Scrum a project management method?</strong></p>
<p><img class="alignright size-full wp-image-161" title="wood-toy" src="http://machielgroeneveld.nl/wp-content/uploads/2009/11/wood-toy.jpg" alt="wood-toy" width="210" height="202" />No it&#8217;s not. It&#8217;s a product development method (or framework). The good thing is that projects always have a product development part, so Scrum can be embedded in your project. But beware of the  &#8217;Scrum organizational model&#8217; which is geared mostly to product development companies. If your organization chooses to have projects for all new development, you&#8217;ll need to embed Scrum in a project management model.</p>
<p><span id="more-143"></span><strong>What is a project?</strong></p>
<p>A project has a start, a middle and a finish. If I tell you this project will take approximately one year, an interesting process starts, most people assume there will be a single release at the end. Even if the project will be done with an Agile process, it will still be &#8217;steering&#8217; to that single release. All work is planned backward, burndowns are drawn to show you&#8217;re going to make (or miss) the deadline. Anyway, most of us know what a project is.</p>
<p><strong>What is product development?</strong></p>
<p>The origins of Scrum point to a different model. The term product backlog says it all, it&#8217;s not &#8216;project&#8217; backlog, but product backlog. The default case for Scrum assumes you&#8217;re working on releases of a product, which has a virtually infinite lifespan like MS Windows, Atlassian Jira, Patientkeeper etc.</p>
<p>Scrum is a method for making development part of your entire business. Or better yet, if development is an integral part of your business, use Scrum. You rarely start projects because new features (large of small) are just put on the backlog. Developing software is what you do. This differs from organizations that do projects to not only develop software.</p>
<p><strong>Can we do projects with Scrum?</strong></p>
<p>Using Scrum for projects is surely possible, but you can&#8217;t use Scrum for projects without some project management practices like tracking budget, planning resources and loads of extra communication. For instance, if you&#8217;re using Prince2 and Scrum, you&#8217;re mixing two models, the ongoing development model of Scrum and the special initiative (a.k.a. project) model of Prince2.</p>
<p>A pure Scrum implementation should be embedded in a big vision, when you&#8217;re working on a product that vision is clear, product managers are hired for that purpose. On the other hand, in a project the variations are much more extreme, the choices of technology, budget, features etc. are much harder to make. In many cases projects are done by people who aren&#8217;t familiar with the context and history of the company. So expect a preparation phase where the team at least gets acquainted with the environment.</p>
<p>The thing to watch out for when implementing Scrum is that you don&#8217;t try to force the product development model onto your organization. If you use projects, accept that there is a ramp-up at the start of the project. And you might need a different process for different phases of the project. For instance, when your project is a one-off special campaign launching project, you can&#8217;t expect the whole organization to react quickly (just-in-time) to your impediments. It&#8217;s a matter of economics: any process changes they make for your project will be obsolete by the time your project finishes, which is not always worth the effort.</p>
<p><strong>So what are you saying?</strong></p>
<p>You can use Scrum in many contexts, it fits product development companies like a glove. Organizations that are project-driven can also benefit from Scrum, but not without some extra project practices. Expect a phased process and accept that in a project some impediments are simply not worth solving. Much of the frustration that goes along with Scrum implementations boils down to forcing the product development model (dogma) on your project organization. It&#8217;s like forcing a cube in a triangular hole, you&#8217;ll get frustrated and it won&#8217;t fit, no matter how hard you try. A project management method can be the adapter that makes Scrum fit.</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=143</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Dalende trend in ICT detachering</title>
		<link>http://machielgroeneveld.nl/?p=134#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=134#comments</comments>
		<pubDate>Sun, 15 Nov 2009 12:31:23 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[ict]]></category>
		<category><![CDATA[tarieven]]></category>
		<category><![CDATA[trend]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=134</guid>
		<description><![CDATA[Lagere tarieven]]></description>
			<content:encoded><![CDATA[<p>Uit meerdere nieuwsberichten blijkt dat de markt voor ICT detachering een neerwaartse beweging maakt. De politie wil na een periode van exhorbitante uitgaven aan inhuur de detachering <a href="http://www.computable.nl/artikel/ict_topics/overheid/3155605/1277202/politie-wil-inhuur-icters-beperken-tot-486-fte.html" target="_blank">beperken</a>. Binnen de overheid wordt gewaarschuwd voor ongebreidelde inhuur van externen en men maant om beperking. Ook bij commerciële bedrijven wordt forst gesneden in externe krachten. Van de externen die wel worden ingehuurd wordt lager tarief gevraagd en dan gaat het niet altijd om een paar procent, maar soms om halvering of zelfs tot een nul tarief. Voor een senior ontwikkelaar worden regelmatig maximumtarieven gesteld van 40 of 50 euro per uur. Een jaar geleden was dat rond de 80 tot 90 euro.</p>
<p>Het indammen van inhuur en drastisch verlagen van tarieven heeft gevolgen. De markt zal zich aanpassen aan deze verandering in de vraag. Een kort overzicht van wat dit op korte termijn kan betekenen, ervan uitgaande dat er geen structurele verandering komt in de vraag:</p>
<p><span id="more-134"></span></p>
<p><img class="alignnone size-full wp-image-138" title="Lagere tarieven" src="http://machielgroeneveld.nl/wp-content/uploads/2009/11/Screen-shot-2009-11-15-at-13.27.46.png" alt="Lagere tarieven" width="523" height="488" /></p>
<p>Wat ik nog niet kan bedenken is, wat voor effecten heeft dit op langere termijn? Wat gebeurt er als de vraag weer aantrekt? Is er dan voldoende interne capaciteit opgebouwd om de nieuwe projecten te bemannen? Of zal er opnieuw een beroep worden gedaan op externen en begint het liedje weer van voor af aan? Graag hoor ik wat jij hiervan denkt.</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=134</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>My First Hippo Steps</title>
		<link>http://machielgroeneveld.nl/?p=124#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=124#comments</comments>
		<pubDate>Sat, 31 Oct 2009 11:09:13 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[hippo]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=124</guid>
		<description><![CDATA[Hippo is a Dutch Content Management System (CMS) company. Friday the 30th of October was the second Forge Friday in Hippo&#8217;s history and my first in depth encounter with this product. Hippo has gained popularity in Dutch government deals and Hippo powers some large governmental websites. This is a quite an achievement and although the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.onehippo.org/" target="_blank">Hippo</a> is a Dutch Content Management System (CMS) company. Friday the 30th of October was the second Forge Friday in Hippo&#8217;s history and my first in depth encounter with this product. Hippo has gained popularity in Dutch government deals and Hippo powers some large governmental websites. This is a quite an achievement and although the product has great potential, from my perspective Hippo disappointed in both technical and customer perspective. I hope my gripes will be fixed in future releases so Hippo can continue its success.</p>
<p><strong><span id="more-124"></span>Open Source</strong></p>
<p>Hippo is open source. This has a number of benefits, such as a lower risk of vendor lock in. Hippo&#8217;s commercial success is a result the Dutch government&#8217;s preference for open source software and Hippo&#8217;s professional, local and Dutch support, a unique combination.</p>
<p>For the developer open source projects have the benefit of community support. Obvious examples such as Apache and a CMS like Wordpress show that open source can lead to solid products with tremendous support (books, articles, plugins, forums).</p>
<p>Alas, Hippo still has a fairly small community. Their <a href="http://lists.hippo.nl/pipermail/hippocms-dev/2009-September/thread.html" target="_blank">mailing list</a> is mostly used by it&#8217;s own employees. The amount of plugins is small and mostly created as spin off from commercial projects. Perhaps Java is one of the limiting factors because hosting Java is expensive, which prevents individual developers to use Hippo for their own blog or website (a limitation Wordpress or Joomla don&#8217;t have). Without a large community, customers would still have only Hippo to maintain their code because their knowledge of the system is not free.</p>
<p><strong>User Experience</strong></p>
<p>The user interface is another Achilles&#8217; heel. The competition is also appalling in this respect (Tridion, Sharepoint), but user experience is on the rise because of it&#8217;s high competitive value. Wordpress, for example  has a large amount of goodwill simply because of the good user interface for editing content.</p>
<p>However, it&#8217;s not just the user interface, it&#8217;s also the type of information supplied. A professional content editor would like to know how people rate the content, where it&#8217;s used, how often is it read, what content is obsolete etc. Hippo does not provide this and thus cannot be used to share knowledge and be the single content repository for the customer. There is great opportunity here to beat systems like Sharepoint.</p>
<p><strong>Writing plug ins</strong></p>
<p>The documentation for contributing to Hippo is quite minimalistic. There is one tutorial, which didn&#8217;t work when I tried it because it was based on an old version. There are other weird things about Hippo&#8217;s documentation. The site contains quite a few dead links, not very reassuring. An even weirder issue is that the site changes while you&#8217;re reading it. The tutorial I read on Friday morning was replaces by a tutorial on Friday afternoon. It&#8217;s like the site is in constant motion and you never know when a page might disappear. It seems like testing is not part of Hippo&#8217;s publishing process and the CMS itself doesn&#8217;t have functionality to check dead links on the site.</p>
<p>Creating add-ons means you&#8217;re extending the CMS, which means you cannot drop in your plugin into a running CMS, you need to bundle it with the application, in essence making the add-on an integral part of the CMS. Any change in the internal API or storage system will result in rewriting add-ons. Thus the learning curve for add-ons is steep because you have to  know the entire architecture of Hippo before creating them. I would prefer a plugin architecture that makes it easy to drop in functionality and creates visible results quickly.</p>
<p>If you want community contributions, plugins should be easy to create, loosely coupled to the underlying architecture and easy to exchange and install. Google and Yahoo have created such great APIs that developer will use them just because they&#8217;re fun and easy.  And although a good plugin architecture is always hard to master, Eclipse has great tooling and support for writing plugins.</p>
<p>Wrap up</p>
<p>Hippo has a great crew and  it&#8217;s organizational structure (people, vibe) resembles a company like TomTom. I&#8217;m convinced Hippo can create great products and service. With this Forge Friday it has made a serious attempt to enlarge the developer community. But it needs to step up its effort if it wants a real community and a solid product. Open source without a community is just as useless as closed source products because the customer still depends on the vendor for maintenance. And a CMS without serious tools for managing content and its meta data is not worthy of managing any other content than pages on a website.</p>
<p>My tips for Hippo:</p>
<ul>
<li>Create a plugin architecture that makes it fun and easy to add functionality to Hippo.</li>
<li>Make testing an integral part of the CMS (such as an automatic dead links checker)</li>
<li>In future versions build the user interface of the CMS from the ground up with the content editor in mind. Make it the slickest tool to inspect, report on and publish company content (hire an information specialist).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=124</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Avoid Big solutions</title>
		<link>http://machielgroeneveld.nl/?p=95#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=95#comments</comments>
		<pubDate>Thu, 22 Oct 2009 12:47:17 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[problems]]></category>
		<category><![CDATA[solutions]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=95</guid>
		<description><![CDATA[Much of my work consists of solving problems. Problems in areas such as the development process, cooperation between team members, software architecture etc. I&#8217;ve noticed there are roughly two ways to solve problems, using big solutions or using small solutions (for lack of a better term). A lot has been written about big redesigns etc. however, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-102 alignright" title="rietpluimen" src="http://machielgroeneveld.nl/wp-content/uploads/2009/10/IMG_3269k-300x225.jpg" alt="rietpluimen" width="240" height="180" />Much of my work consists of solving problems. Problems in areas such as the development process, cooperation between team members, software architecture etc. I&#8217;ve noticed there are roughly two ways to solve problems, using big solutions or using small solutions (for lack of a better term). A lot has been written about big redesigns etc. however, I want to understand where these big solutions come from. I think it&#8217;s our natural tendency to abstract situations which makes us favor big solutions, even though they&#8217;re not always the best option.</p>
<p>After explain the usual method I&#8217;ll give you some examples which you can probably identify with. The next post will discuss the small solutions and their gripes.</p>
<p><span id="more-95"></span>To clarify, in this post &#8216;fixing problems&#8217; means fixing them in real life, not just analyzing the problem. The process that leads to <strong>big solutions</strong> is something like this:</p>
<ol>
<li>Get a clear overview of the situation</li>
<li>Simplify the situation</li>
<li>Fix the problem if it hasn&#8217;t fixed itself already (more on this later)</li>
</ol>
<p>To illustrate let&#8217;s imagine the problem is picking all the green circles from this pile:</p>
<p><img class="alignnone size-full wp-image-96" title="mess" src="http://machielgroeneveld.nl/wp-content/uploads/2009/10/Screen-shot-2009-10-21-at-20.06.12.png" alt="mess" width="173" height="166" /></p>
<p>Now, the usual process:</p>
<p>1. Get an overview: place all the circles in a line:</p>
<p><img class="alignnone size-full wp-image-99" title="line" src="http://machielgroeneveld.nl/wp-content/uploads/2009/10/Screen-shot-2009-10-21-at-20.10.14.png" alt="line" width="438" height="54" /></p>
<p>2. Simplify the situation: Group the circles by color:</p>
<p><img class="alignnone size-full wp-image-101" title="4 piles" src="http://machielgroeneveld.nl/wp-content/uploads/2009/10/Screen-shot-2009-10-22-at-09.53.49.png" alt="4 piles" width="396" height="63" /></p>
<p>3. Fix the problem: it has almost solved itself as the green circles are on a separate pile. Now you might notice your mind altering between seeing all the different circles and seeing 4 piles. Just  by sorting the circles by color the problem was fixed. Isn&#8217;t that neat? And now we can reason about the piles in stead of all the different circles, which makes life easier still.</p>
<p><strong>Abstractions</strong></p>
<p>A pile is an abstraction of the circles on that pile. In most situations it&#8217;s far easier to talk abstractions than the actual things you&#8217;re dealing with because otherwise the amount of detail would be overwhelming. That&#8217;s why we like big solutions, when restructuring the context of the problem, it becomes easier to reason about. For instance if everyone uses the same operating system it&#8217;s easier to reason about PCs in your workplace because you can forget about the detail of the operating system.</p>
<p>To make abstractions, there has to be some visible patterns in the situation, otherwise it&#8217;s just a big mess (like the single pile of circles). To get to a point where simple abstractions can be made, people go very far in restructuring the situation, often destroying value in the process. One important thing to realize is people don&#8217;t favor big solutions, big solutions are a result of our desire to abstract and simplify, it&#8217;s a natural tendency with adverse effects (in some cases).</p>
<p>This is the issue with big solutions. It&#8217;s not a bad strategy to deal with complicated problems, but big solutions don&#8217;t solve the problem very quickly, they start paying of usually months or even years later.</p>
<p>When simplifying the context of the problem, you could for instance introduce a new method: throw out all existing social structures and procedures and replace it with a full implementation of a method that is &#8216;consistent and correct&#8217; throughout all layers of the organization. The big problem here is destroying the existing structures that worked very well or were even specially tailored to the domain. The biggest issue with restructuring is the new structure will have problems of its own. So by fixing one problem you could be introducing several others that come along with your new method.</p>
<p>I&#8217;ll give you some other examples of big solutions from my recent experience:</p>
<ul>
<li>IT department is slow and expensive, we&#8217;ll replace the entire IT infrastructure with an off-the-shelf product.</li>
<li>Our process is too slow and complicated in places, we&#8217;ll redesign and document <span style="text-decoration: underline;">all</span> business processes and put them <span style="text-decoration: underline;">all</span> in a BPM tool.</li>
<li>The use of one technology doesn&#8217;t fit certain problems in our application, we&#8217;ll refactor all modules in all applications to use a new technology.</li>
<li>We&#8217;ve got a big pile of legacy systems, let&#8217;s define a new architecture (SOA) and demand all projects to conform to that architecture from now on.</li>
</ul>
<p>I also tend to come up with big solutions. These big solutions, when you first image them, always have sense of elegance, simplicity and control. When struggling with the current system architecture I come up with things like: &#8220;If we could only replace the entire back end with technology X&#8221; or &#8220;If we could only get 6 months to make tests for all the legacy systems&#8221;.</p>
<p>But while you&#8217;re restructuring, training people in new methods and drawing up conceptual charts you&#8217;re not actually fixing anything. You&#8217;re laying ground work to fix the problem in one big sweep. It might actually work too, the big solutions are not wrong per se, they just distract you from the problem and a smaller solution would have had a far higher return on investment.</p>
<p>Do you explicitly think when to use a big or small solution? How effective are big solutions? In my next post I&#8217;ll talk about &#8217;small&#8217; solutions and how they are a great alternative when you find yourself drawn to the big solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=95</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flowing through The Bottleneck</title>
		<link>http://machielgroeneveld.nl/?p=71#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=71#comments</comments>
		<pubDate>Sat, 10 Oct 2009 10:06:52 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[bottlenecks]]></category>
		<category><![CDATA[flow]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[queues]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=71</guid>
		<description><![CDATA[In the much praised book Flow about product development the management of queues and bottle necks are a central theme. The book states principles on how to best deal with them. Traffic lanes and cars are great for showing the (wrong) use of queuing because most people can relate to traffic jams and bottlenecks in [...]]]></description>
			<content:encoded><![CDATA[<p>In the much praised book <a href="http://www.amazon.com/Principles-Product-Development-Flow-Generation/dp/1935401009" target="_blank">Flow</a> about product development the management of queues and bottle necks are a central theme. The book states principles on how to best deal with them. Traffic lanes and cars are great for showing the (wrong) use of queuing because most people can relate to traffic jams and bottlenecks in a traffic situation.</p>
<p>One major topic of any process optimization is the management of bottlenecks. One intriguing statement is made, it urges to go beyond the popular idea that &#8216;the capacity of the bottleneck controls system flow&#8217;. It&#8217;s not only the bottleneck, it also very important to look at the flow through the bottleneck.</p>
<p><span id="more-71"></span></p>
<p>The example given in the book discribes a traffic situation where three lanes are reduced to two. Combining two lanes into one causes turbulence and you don&#8217;t want this turbulence at the bottleneck, which is why the narrowing process starts miles before the actual bottleneck.</p>
<p>Although this is better to leave the narrowing totally unmanaged, in practice it often doesn&#8217;t work like this. On a recent car trip I found there is a better way of controlling flow which works much better than the regular solution, I&#8217;ll explain.</p>
<p>First the basic problem found very often on the Dutch highway, three lanes need to be narrowed to two:</p>
<p><img class="alignnone size-full wp-image-87" title="problem" src="http://machielgroeneveld.nl/wp-content/uploads/2009/10/problem3.png" alt="problem" width="175" height="326" /></p>
<p>The regular solution is to urge the car driver to start &#8216;turbulenting&#8217; a few hundred meters before the third road ends. This usually doesn&#8217;t happen, what does happen is people cram their car into the bottleneck, usually with high speed. Their motivation is to slip through (escape) the bottleneck as quickly as possible. This decreases flow sometimes to a standstill.</p>
<p><img class="size-full wp-image-76 alignnone" title="solution1" src="http://machielgroeneveld.nl/wp-content/uploads/2009/10/solution11.png" alt="solution1" width="143" height="328" /></p>
<p>An alternative solution, I recently experienced, is much more focussed on flow. This solution takes a two step approach, it splits the three lanes into two before combining them. This way the driver in the middle lane has two options when merging with another lane, to the left or right lane. This spreads the turbulence more evenly over the two other lanes. It also makes it undesirable to drive up to the road block as fast as possible because you haven&#8217;t &#8216;escaped through the bottleneck&#8217; yet because the real bottleneck is still a few hundred meters ahead.</p>
<p>I&#8217;m not sure if the road workers made this arrangement on purpose to increase flow, but it&#8217;s a brilliant way of dealing with a bottleneck and minimizing it&#8217;s impact.</p>
<p><img class="size-full wp-image-77 alignnone" title="solution2" src="http://machielgroeneveld.nl/wp-content/uploads/2009/10/solution2.png" alt="solution2" width="136" height="331" /></p>
<p>The relevance to organizations is to keep in mind that widening a bottleneck might not have the highest value, optimizing flow through the bottleneck can also reap huge benefits.</p>
<p>Suppose you have too few testers in your team. One thing you can do is hire more testers. But instead you can make sure the flow of work through the testers is optimal. In stead of the tester testing a feature as a whole after (or even before) it&#8217;s developed, involve the tester a few short times during development. This way he/she can detect testing issues before the full test and spread the &#8216;testing turbulence&#8217; over a longer period of time, reducing the impact of tester-shortage. No extra testers, but increased flow. This is how I prefer to tackle bottleneck issues in my team, when increase in capacity is not at hand.</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=71</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Deadline and Cost &#8211; a Deming Trap?</title>
		<link>http://machielgroeneveld.nl/?p=54#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=54#comments</comments>
		<pubDate>Wed, 09 Sep 2009 12:26:25 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=54</guid>
		<description><![CDATA[Measuring deadline and cost does not guarantee project success. Try to measure up and be honest about the actual impact your project is making in its production environment.]]></description>
			<content:encoded><![CDATA[<p>The Chaos Reports are one the most citated reports used in Agile presentations and courses. The most famous piece of data is the chart that shows that, in the projects studied, very few features developed were actually used. Minimizing the amount of unused features is core to Agile projects. But there is something odd about the Chaos Reports. The data they contain might be valid (<a href="http://www.infoq.com/news/Standish-Chaos-Report-Questioned" target="_blank">or not</a>), but the targets that they measure have one serious flaw, they measure the wrong objectives. Even more troublesome is the fact that most customers I deal with measure the same objectives: conformance to budget and deadlines. I call for suppliers to urge their customers to start measuring up and collaborate on achieving what really matters to their customers.</p>
<p><span id="more-54"></span></p>
<p>The problem lies not only in measuring the wrong objectives, keeping an eye on the budget is not wrong in itself, it&#8217;s using quantified objectives to measure success that has some big issues. Reading Demings arguments <a href="http://en.wikipedia.org/wiki/Management_by_objectives#Arguments_Against" target="_blank">against</a> management by objectives (MBO) makes me think twice before using cost or deadline to measure a projects&#8217; success. Deming: &#8220;It is human nature to assume that there is something better about random events that meet arbitrary objectives, and assign their superiority to a non-existent special cause&#8221;. This is the heart of the matter: when a customer sets a deadline and his supplier meets this deadline, it&#8217;s human nature to assume the supplier did something special to meet the deadline. But there is no cause-and-effect here, meeting a deadline does not make you a good or bad supplier, it doesn&#8217;t mean anything.</p>
<p>Most proponents of Agile still use these same old arguments, arguing Agile will bring your project in on time and on budget. But this is only a superficial answer to the customers (real) objectives. Because variation of scope is used to attain these goals, you are actually doing exactly what Deming warned us about: cheating the system to meet the objectives. Why is this cheating? Because you&#8217;re still making the numeric objectives the goal of the project. What about the consequences of this behaviour? Are projects that are on time and within budget <em>better </em>than projects that are not. Perhaps the projects overshooting their deadline actually have a higher ROI. More likely there is no relation between ROI and staying within budget.</p>
<p>One way to get out of this objective trap, is to <a href="http://www.poppendieck.com/measureup.htm" target="_blank">measure up</a>. Don&#8217;t measure progress towards the deadline or the budget but focus on things like customer satisfaction, increase in sales or actual reduction in cost or process cycle time. It will free up your project managers to lead teams to do the right thing and include the complexity of attaining actual ROI into the project. Scrum originated from this holistic approach (<a href="http://apln-richmond.pbworks.com/f/New+New+Prod+Devel+Game.pdf" target="_blank">pdf</a>), but project management hijacked the burn down chart and inserted the classic objectives again.</p>
<p>One note of warning, I&#8217;ve never seen this happen myself. <span style="line-height: normal;">I do know of <a href="http://www.bcase.nl/" target="_blank">companies</a> with good track records in this regard, but they are not stricly IT companies. Do you have the courage to add business value to your burn down chart and measuring up?</span></p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=54</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>An Agile pitfall &#8211; starting a project too soon</title>
		<link>http://machielgroeneveld.nl/?p=29#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=29#comments</comments>
		<pubDate>Thu, 27 Aug 2009 11:41:40 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[business case]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=29</guid>
		<description><![CDATA[Preparing to start a project, is not the same as executing a project. Agile principles don't apply cleanly to the preparation phase of a project.]]></description>
			<content:encoded><![CDATA[<p>The pre-project phase is a hot topic that I&#8217;ve blogged about <a href="http://blog.xebia.com/2008/08/27/agile-2008-ideas-and-inspiration/">before</a> under the header &#8216;Iteration -1&#8243;.</p>
<p>This post is on the &#8216;pre-iteration-1&#8242; phase, before the project has even started. I&#8217;ll explain the contradiction that I&#8217;ve found in my experience with starting Agile projects. Preparing a project is not the same as executing a project and therefore the Agile principles don&#8217;t apply cleanly to the pre-project phase (oh, dear).</p>
<p><span id="more-29"></span>Starting a project is a delicate and risky endeavor. Some projects don&#8217;t turn out too well, much money is lost on starting the wrong projects. And yet, projects are the way forward for many organizations, the way to really get things done. So there is a fine line between starting too many risky projects and not starting projects at all (or only doing the ones that have a high chance of success). What would be an Agile way to deal with starting projects? To my knowledge there is not a lot of Agile information on starting or preparing projects, but two principles that apply here come to mind:</p>
<ol>
<li>Take action (start the project)</li>
<li>Decide as late as possible (don&#8217;t start the project, yet)</li>
</ol>
<p>The first principle says: &#8220;You&#8217;ll never know exactly how the project go, so just start and find out.&#8221; The second principle says: &#8220;If you can, wait for more information and then start the project (or not)&#8221;.</p>
<p>In a project context these principles wouldn&#8217;t conflict because they&#8217;re about the same thing: making decisions based on result, not speculation. Principle 2 comes from <a href="http://en.wikipedia.org/wiki/Lean_software_development#Decide_as_late_as_possible">Lean</a> and implies using an options-based approach to decision making. So when during your project you are faced with a complex problem, apply principle #1 and using real experience, do #2. But you can&#8217;t take action when you haven&#8217;t started your project yet, no team and no software means no real experience to prove viability of the project.</p>
<p>I find principle #1 is the favourite amongst my Agile colleagues, they have an eagerness to get the Agile process started. It has obvious benefits: shorten the project cycle time, get measurements on real world experience etc. So, when the decision to start a project seems too complex, the <a href="http://www.controlchaos.com/download/Book%20Excerpt.pdf">Scrum</a> principles is applied (quoted):</p>
<blockquote><p>[...] the values integral to Scrum, such as <strong>empiricism</strong>, self-organization, and <strong>action</strong></p></blockquote>
<p>But this can-do spirit has a pitfall: you might start too many projects that has no chance of success.</p>
<p>The heart of the matter is, can you make a viable prediction of a projects&#8217; success without actually starting it? Starting projects just to find out how viable they are, is a costly approach. The Agile &#8216;ready, fire, aim&#8217; principle, driven by the high number of developers pushing for Agile, might not be the best option in all cases. But the alternative might sound all too &#8216;<a href="http://en.wikipedia.org/wiki/Waterfall_model" target="_blank">waterfally</a>&#8216;. But I don&#8217;t think it&#8217;s the same thing as writing down all your requirements in detail up front. It&#8217;s actually not a project yet, so not all Waterfall vs. Agile <a href="http://blog.xebia.com/2009/08/27/the-worst-thing-about-waterfall/" target="_blank">flamewars</a> apply.</p>
<p>Let&#8217;s say we have two options for the project preparation phase:</p>
<ol>
<li>Very little preparation followed by starting the project. &#8220;Just do it and learn as you go&#8221;.</li>
<li>Doing research on the ROI, the needs of the user, getting buy-in from executives, getting a clear set of requirements, setting up reporting and project management processes etc. And only after getting a green light on all of these, start the project.</li>
</ol>
<p>I will not say which is best on all cases, there is no such thing. But you might find it interessting to know that the Standish Group, in the book &#8216;<a href="http://www.amazon.co.uk/My-Life-Failure-Successful-Project/dp/1424308410/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251357638&amp;sr=8-1" target="_blank">My life is Failure</a>&#8216; recommends option #2. And yet, they also recommend using an Agile process. The business case and the project plan should be sound and there&#8217;s quite a bit of groundwork to be done before even deciding on the start of a project.</p>
<p>You are partly in the land of theory-building, making plans, doing ROI estimates, asking what the user wants. All these things can change when you start the project. The benefit of this phase is that it doesn&#8217;t take a whole team and focussed organisation to execute this phase. When you decide not to do the project, only a few weeks of work is lost, but a huge los on a failed project is avoided.</p>
<p>My main insight here is: &#8220;Preparing to start a project, is simply not the same as executing a project&#8221;. A big difference is the preparation phase does not have a working product as its main deliverable, only plans and decisions. This means not all Agile principles apply and they should be forced onto this phase. The Standish Group gives us a lot of patterns for dealing with this phase, but they are differ from the Agile patterns. So pick the right pattern for the right phase and context. The preparation phase needs its own patterns for success.</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=29</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Life of a Software Developer</title>
		<link>http://machielgroeneveld.nl/?p=8#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/?p=8#comments</comments>
		<pubDate>Sun, 12 Jul 2009 11:35:58 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[crafstmanship]]></category>
		<category><![CDATA[creativity]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=8</guid>
		<description><![CDATA[software development is hard, creative but most of all, it's shrouded in myths. Not much is commonly know about the profession and most management practices work around understanding the developers processes.]]></description>
			<content:encoded><![CDATA[<p>There are quite a few myths about the profession of software developer. Most people find the profession hard to describe. So what is the &#8216;essence of software development&#8217;? For me it&#8217;s a mix of creativity, struggle and craftsmanship and love of technology. Striving for the perfect solution in an imperfect environment.</p>
<p><span id="more-8"></span></p>
<p>I like to view it as a creative endeavor where I need freedom to shout boisterously with my fellow developers while writing great (if not brilliant) software. Non-developers will probably view this style of working as chaotic and most of all loud. Some of the projects I&#8217;ve done had a high noise level and some pieces of software really cannot be modified <a title="WTFs per minute" href="http://www.osnews.com/story/19266/WTFs_m" target="_blank">in silence</a>. This style of development fits me pretty well, but I don&#8217;t know if it&#8217;s the best way to develop for everyone.</p>
<p>Quite another way of looking at it, is to view the developer as a <a title="Software Craftsmanship" href="http://manifesto.softwarecraftsmanship.org/" target="_blank">craftsman</a>. This invokes images of carpenters and sculptors that pass on their wisdom from generation to generation. The love of the trade and the product is central. Good tools and quality of the product. A long day of coding does sometimes feel like sculpting, carving out (deleting) large pieces of material from a massive brick (legacy code) to reveal a deceptively simple result.</p>
<p>Anyway you look at it, a good software developer has a love for technology and systems. There would be no other way she/he would endure all the fiddly syntax issues, obscure error messages and paradoxical problems. It&#8217;s like trying to write a sentence, but while you keep trying to end the sentence, the computer keeps saying &#8216;wrong syntax&#8217;. Most developer problems have to deal with this frustrating trail and error cycle. Somehow developers can endure this and find fulfillment in fixing the problem after a long struggle. The worst thing you can ask a developer after such an endeavor is: &#8220;Why didn&#8217;t you just do it right the first time?&#8221;.</p>
<p>What I haven&#8217;t figured out yet, is whether software development really needs making lots of mistakes. Do we need to debate the software product and examine it from all different angles? Or is development much more a matter of technology, tools and discipline, the perfect developer being someone who can turn a specification into working software without making mistakes?</p>
<p>I believe software development is a weird combination of creativity and discipline. The software we create needs to work in complex environments with unpredictable scenarios and users. The computer, on the other hand, is nothing like its environment, it&#8217;s ruthlessly strict. One misplaced bracket or statement can be enough to bring down an entire system. The world of the system is  linear, where everything is black or white, true or false and nothing in between.</p>
<p>Bridging the gap between the organic world where the problem lies and the computer system where (part of) the solution lies is the essence of a developers life. Not many people understand this nature of software development, including developers themselves. Software development will always be a profession made up of conflicts and challenges. I will need to be creative to find a simple solution for hard problems. But I will also long for that perfect program or technology  that will be able to solve all problems and situations.</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/?feed=rss2&amp;p=8</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
