<?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/" rel="self" type="application/rss+xml" />
	<link>http://machielgroeneveld.nl</link>
	<description>Conscious Development</description>
	<lastBuildDate>Wed, 18 Jan 2012 22:00:40 +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>Version numbers are overrated &#8211; use version labels instead</title>
		<link>http://machielgroeneveld.nl/2012/01/18/version-numbers-are-overrated-use-version-labels-instead/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2012/01/18/version-numbers-are-overrated-use-version-labels-instead/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 22:00:40 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[versions]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=236</guid>
		<description><![CDATA[Most developers use version numbers for their software. It&#8217;s considered a &#8216;best practice&#8217;, but version numbers are overused and give you a false sense of control and compatibility. Use the simplest versioning scheme possible, where versionless is the simplest. Rationale What is a version number? It&#8217;s a label (doesn&#8217;t have to be numeric) that identifies [...]]]></description>
			<content:encoded><![CDATA[<p>Most developers use version numbers for their software. It&#8217;s considered a &#8216;best practice&#8217;, but version numbers are overused and give you a false sense of control and compatibility. Use the simplest versioning scheme possible, where versionless is the simplest.</p>
<h3>Rationale</h3>
<p>What is a version number? It&#8217;s a <em>label</em> (doesn&#8217;t have to be numeric) that identifies one particular snapshot of your software. Usually there is one overall version number for the whole system, even when components of that system have their own versions. Using this label, anyone can reason about the state of the code for that label. Users might say, in version IE 9.0.1.2 there is a bug when I try to print. The developers will know exactly which state the code was in for that version number and should be able to find and run that version (and fix the bug). Summary: you need to label revisions of your code to refer to it later.</p>
<h3>Numbers are silly</h3>
<p>So far, so good. Version labels are useful. But in stead of labeling the software with a date of release, the name of the latest feature, most developers use numeric labels. And not just a sequence number (1, 2, 3), but fancy numbers with dots! Giving your application a version number like <em>15.0.12.21.h</em> makes it (and you) look really complicated and smart, don&#8217;t you think? Have you seen the Chrome version numbers? Anyway, let&#8217;s go into these version numbers more deeply. A typical application, let&#8217;s say a website for creating blogs, releases these versions:</p>
<ul>
<li>1.0</li>
<li>1.1</li>
<li>1.2</li>
<li>2.0</li>
</ul>
<p>What does that mean? Well, convention says:</p>
<ul>
<li>first ever release</li>
<li>small change</li>
<li>small change</li>
<li>big change</li>
</ul>
<p>That&#8217;s it, nothing more to it. But the numbers look more professional, don&#8217;t you think? Although list 1 and 2 have the exact same meaning. And was the change from 1.2 to 2.0 was really that big? We don&#8217;t know. What this developer deems big, might not be so big and worthy of a &#8216;major&#8217; version bump for others. So why use numbers at all? Why not use descriptive names like:</p>
<ul>
<li>&#8216;first basic YourBlog release&#8217;</li>
<li>&#8216;fixed bugs in login&#8217;</li>
<li>&#8216;fixed bugs in page-saving&#8217;</li>
<li>&#8216;redesigned UI&#8217;</li>
</ul>
<div>Now you might argue that you can&#8217;t see which version preceded which. Who cares? If you need get back to the exact version of <em>fixed bugs in page-saving </em>you can just check out that version (assuming you&#8217;ve labeled it in your source control). If you want, you can track the chronology somewhere else. Or you could add the date to the label to signify when it was released to add even more meaning to the label:</div>
<div>
<ul>
<li>&#8217;2011-1-10 first basic CMS release&#8217;,</li>
<li>&#8217;2011-2-1 fixed bugs in login&#8217;,</li>
<li>&#8217;2011-2-9 fixed bugs in page-saving&#8217;,</li>
<li>&#8217;2011-3-2 redesigned UI (big change)&#8217;.</li>
</ul>
<div>Now you have everything you need, suppose you read theses labels in your source control? Much better than just 1.1, 1.2, don&#8217;t you think?</div>
</div>
<h3>My Application is an API</h3>
<div>There are cases where using the dot-numbers make sense: when you&#8217;re developing an API or library for public use. Then the numbers signify something very important: compatibility. The convention basically says: if you increase the number behind the dot (1.1 -&gt; 1.2), the library will be backwards compatible with all 1.x releases. When increasing the main (major) number (1.2 -&gt; 2.0), compatibility is not guaranteed with 1.x releases. That is quite an exact definition of a big change. So if your API is always backwards compatible, you can stick to 1.x releases forever.</div>
<div></div>
<div>Now, this might be the root cause of the wide spread use of numbers as version labels. Most developers think API development is the coolest thing in the business and many practices (like misuse of interfaces in Java) stem from thinking your code will be used as an API. In reality, most code is not an API. GUI applications don&#8217;t have a programatic interface, so they don&#8217;t need version numbers. Even if you&#8217;re releasing a new version of your library for in-house use, no one will trust your backwards compatibly claims anyway and just re-test their whole system using your new version. Only when the library is developed externally, you want to know if you can upgrade safely or not.</div>
<div></div>
<div>To summarize: for API development version numbers signify something important, most people don&#8217;t build public APIs but build applications or websites that don&#8217;t require this strict convention.</div>
<h3>Maven: WTF?</h3>
<p>Maven doesn&#8217;t help in making people steer clear of the number fetish. When you create a new maven project. The initial version for you module is: 0.0.1. Yes, not one dot, but two! You&#8217;re going to be doing some serious API-building business. No, you&#8217;re not.</p>
<p>What does that mean? By convention, 0.0.1 means ultra-pre-beta-alpha release. It&#8217;s probably just prints &#8216;hello world&#8217; in a console. So you start building and maven increases your version with every release you make. 0.0.1, 0.0.2, 0.0.3. You&#8217;re not making much progress, so after a few weeks you make the bold move and change it to 0.1, your first pre-beta-alpha release! Or is it, perhaps it&#8217;s already live, in production and making money. When do you switch over to 1.0? When all the bugs have been fixed? The first time you go live? 1.0 means done, right? Stable, right? Yes, it does. But your website is never done, your GUI will always have issues so there is no 1.0!</p>
<p>I find when building whole systems, there is never a clean cut release. The first public release is not much different from the one before or after. So stop fiddling with the numbers.</p>
<p>Just to get back at the API argument, when you release an API to the world, there will be a 1.0. It&#8217;s that contract again, meaning: this API is stable and ready for production use, it has undergone testing and everything. This number means something because your communicating it explicitly, it&#8217;s in the product you ship (like commons-lang-1.0.jar). Your website just has a url, your GUI an icon, no version.</p>
<h3>Version-less coding</h3>
<p>Some code doesn&#8217;t need version numbers at all, it&#8217;s just code. If it&#8217;s checked into source control (on a particular branch) it&#8217;s usable. No 0.1 release or 0.1-SNAPSHOT. Just the code. If I want to make change that breaks stuff, I&#8217;ll create a separate branch. Maven doesn&#8217;t allow this, it&#8217;s basically duplicating what my source control system can do better (track revisions). For libraries, I might want this, but for my main project, I don&#8217;t. One of the reasons these version numbers are still so prevalent, is that Maven requires a version number. Starting with 0.0.1 will start you off thinking you need a complex version numbering scheme.</p>
<h3>The build number alternative</h3>
<p>I propose a complete alternative to using version numbers. It&#8217;s simple: build numbers and labels. Every time you build your system, for instance in your CI tool (like Hudson) it gets a build identifier, let&#8217;s say a timestamp. That number might be set in your source control as a label or the revision of the code might be stored alongside the build number, either way the build number will be a reference to a specific state of your code, but also a specific attempt to build that code. Sometimes you have to build the same code multiple times to get a good release (your build procedure might have issues). Now the build numbers are just a sequence. You can <em>label</em> releases that are actually going out for release, so you can refer to them later. Using the build number, you can even pick up the exact artifacts from that build.</p>
<ul>
<li>2011-01-01-1543 &#8211; &#8216;added new content type&#8217;</li>
<li>2011-01-02-1218</li>
<li>2011-01-02-1543</li>
<li>2011-01-02-1743 - &#8216;improved render time&#8217;</li>
<li>2011-01-03-1109</li>
</ul>
<p>Most CI tools (like Bamboo, probably others too) even support labeling a build.</p>
<p>One extra benefit of this, is that your code doesn&#8217;t have to contain version numbers. I think it&#8217;s a smell that the version of the code, is in the code. The version is something external to your code, your source control system has to deal with revisions, not the code itself. You&#8217;ll see that a lot of web projects don&#8217;t have a version at all, it&#8217;s just the code.</p>
<p>So, using labels in stead of dot-numbers, everyone will know what the version entails but you don&#8217;t have to worry about the numbers anymore. So, let&#8217;s make it easier!</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/2012/01/18/version-numbers-are-overrated-use-version-labels-instead/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Task Board Retrospective</title>
		<link>http://machielgroeneveld.nl/2011/09/23/the-task-board-retrospective/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2011/09/23/the-task-board-retrospective/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 20:58:15 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[retrospective]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[task board]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=232</guid>
		<description><![CDATA[When did you last improve your task board? Most teams working with an Agile process like Scrum use a task board (physical or digital). Even many teams that only do a bit of Agile or Scrum will work with a task board. It&#8217;s a core practice in Agile software development, not specific to any methodology. [...]]]></description>
			<content:encoded><![CDATA[<h2><a href="http://machielgroeneveld.nl/wp-content/uploads/2011/09/simpletaskboard.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><br />
</a>When did you last improve your task board?</h2>
<p>Most teams working with an Agile process like Scrum use a task board (physical or digital). Even many teams that only do a bit of Agile or Scrum will work with a task board. It&#8217;s a core practice in Agile software development, not specific to any methodology. So, it&#8217;s common practice.</p>
<p>So like all things in Agile it should be subject to scrutiny once in a while. A fair question is, why have a task board at all? Just because you&#8217;re doing Agile(tm)? No one benefits from blind adoption, so ask yourself this question. Not to get rid of your task board, but to find out if it really fits your purpose and to find room for improvement.</p>
<p><span id="more-232"></span></p>
<h2>The previous board(s)</h2>
<h3><em>The kanban board:</em></h3>
<p><a href="http://machielgroeneveld.nl/wp-content/uploads/2011/09/kanban.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignnone size-full wp-image-245" title="kanban" src="http://machielgroeneveld.nl/wp-content/uploads/2011/09/kanban.png" alt="" width="445" height="240" /></a></p>
<p>One team had a kanban board, that had many lanes. It represented roughly our process. But since the team had 3 team members (2 developers and 1 tester), the team had some trouble keeping track of what story actually needed work. Also the meaning of the lanes became vague. For instance after the tests for a user story had been defined, it went into Implementing (make the tests pass), but what if more tests had to be defined along the way? Was this testing or implementing? Also some stories didn&#8217;t require formal acceptance, so the column was skipped. Some user stories popped up during development, so didn&#8217;t go through the explore &amp; plan columns but also weren&#8217;t picked up immediately. So, in short, not very helpful.</p>
<p>The lanes were a result of months of tuning, so they did have meaning at some point in time, for some kind of work, but not the work the team was doing now. We did appreciate the visibility of the phase a user story was in and the wip limits.</p>
<h3><em>The simple task board:</em></h3>
<p><a href="http://machielgroeneveld.nl/wp-content/uploads/2011/09/simpletaskboard.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignnone size-full wp-image-246" title="simpletaskboard" src="http://machielgroeneveld.nl/wp-content/uploads/2011/09/simpletaskboard.png" alt="" width="362" height="277" /></a><a href="http://machielgroeneveld.nl/wp-content/uploads/2011/09/simpletaskboard.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><br />
</a></p>
<p>The other team had a task board which was almost the complete opposite of the kanban board. It didn&#8217;t even have a &#8216;done&#8217; column! It was the bare bone task board with a twist, trying to keep the pull between the tester and developers by using two task boards, one for the developers and one for the testers. The main issue here is that it wasn&#8217;t clear what the exact tasks were that were being worked on. And as the cooperation between developers and testers tightened, having two boards didn&#8217;t always make sense. When we tried adding sticky notes (green ones) to track the smaller tasks within a user story, it became quite messy, it was hard to see which task belonged to which user story.</p>
<h2>Having a board retrospective</h2>
<p>Picking a theme for a retrospective is a good tip from the <a href="http://pragprog.com/book/dlret/agile-retrospectives">Agile Retrospectives</a> book. For us the theme is sometimes the task board. When you hold a retrospective with your team, to discuss whether your task board really fits your needs, the format we used last time was:</p>
<ol>
<li>Define the goals for your task board (what would you miss when it&#8217;s gone?)</li>
<li>Evaluate whether the current board meets those goals</li>
<li>Brainstorm on new board formats that better meet the goals</li>
<li>Decide how to change the board</li>
</ol>
<h2>Board goals</h2>
<p>So in our last task boar retrospective, the team defined the goals for the board. Based on the team&#8217;s experience and day to day needs, the main goals for any task board were defined as:</p>
<ol>
<li>See what&#8217;s left for a user story</li>
<li>See what&#8217;s left for an MMF/Sprint</li>
<li>See what we&#8217;re working on now</li>
<li>Visualize loss of focus</li>
</ol>
<h2>The New Board</h2>
<p>We brainstormed on new board designs. We introduced the &#8216;swim lane&#8217; concept and tried to use it to fulfill our goals. At the end of the meeting we came up with this (the arrows shows a swim lane):</p>
<div><a href="http://machielgroeneveld.nl/wp-content/uploads/2011/09/newtaskboard.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignnone size-full wp-image-247" style="margin-bottom: 20px;" title="newtaskboard" src="http://machielgroeneveld.nl/wp-content/uploads/2011/09/newtaskboard.png" alt="" width="483" height="237" /></a></div>
<div>We&#8217;ve been using new board in both teams and this task board meets our goals quite well:</div>
<div>
<ul>
<li>Point 1 (what&#8217;s left for a us) is solved with one swim lane for each user story, showing the remaining tasks.</li>
<li>Point 2 was solved by a vertical column of &#8216;todo user stories&#8217; showing what&#8217;s left after the current stories.</li>
<li>Point 3 (&#8216;what are we doing now&#8217;) is visible in the &#8216;tasks in progress&#8217; column, in this example 2 tasks are in progress.</li>
<li>Point 4 is visible by looking at the &#8216;user stories in progress&#8217; (us ip) and &#8216;tasks in progress&#8217; column, that shows how many user stories and tasks are in progress. This is naturally bound by the limited space on the board.</li>
</ul>
</div>
<h2>Wrapping up</h2>
<p>So we&#8217;ve had many different boards in the past and many retros discussing the use of the board. We started with Scrum, switched to kanban and increased the number of lanes. Finally we ending up with a board that supports the goals we discovered along the way and  now defined explicitly. It has two basic principles of kanban (pull &amp; wip) strongly embedded while giving the team visibility of what&#8217;s ahead.</p>
<p>
Perhaps you&#8217;ve had similar retrospectives or discussions? Do you have explicit goals for your board? I&#8217;m very much interested in your story regarding the development of your task board, so please share your experience!</p>
<div style="background-color: infobackground; z-index: 1000; position: absolute; height: auto; visibility: hidden; -webkit-transition-property: all; -webkit-transition-duration: 0.3s; font-size: medium; top: 1598px; left: 229px; width: 46px;">family</div>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/2011/09/23/the-task-board-retrospective/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>McLuhan, the iPad is the message</title>
		<link>http://machielgroeneveld.nl/2011/05/07/mcluhan-the-ipad-is-the-message/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2011/05/07/mcluhan-the-ipad-is-the-message/#comments</comments>
		<pubDate>Sat, 07 May 2011 16:36:50 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=175</guid>
		<description><![CDATA[Marshal McLuhan&#8216;s work is one of the cornerstones of &#8216;media theory&#8217;. His view on media as an extension of ourself and the effect they have on our society are profound. I was introduced to McLuhan by Mark Federman at Agile2008. Although it would take years of study to fathom the depth of McLuhans insights, one [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Marshall_McLuhan">Marshal McLuhan</a>&#8216;s work is one of the cornerstones of &#8216;media theory&#8217;. His view on media as an extension of ourself and the effect they have on our society are profound. I was introduced to McLuhan by Mark Federman at <a href="http://submissions.agile2008.org/node/4303">Agile2008</a>. Although it would take years of study to fathom the depth of McLuhans insights, one convenient tool to get more insight into any (new) medium is the quadrant with four questions. These questions help you understand the true meaning and effect of a medium. The focus here is on the medium itself, not the content, that&#8217;s why McLuhan is often quoted saying &#8216;the medium is the message&#8217;. The medium can have a far greater impact on society than the content, television being a good example of this.</p>
<p>When exploring a new medium, four interesting questions to ask are:</p>
<p>- What does it improve or <strong>enhance</strong>?<br />
- What does it neglect, displace or make <strong>obsolete</strong>?<br />
- What does it bring back from the <strong>past</strong> that has been neglected recently?<br />
- What does it <strong>overturn</strong>? (When pushed to its extremes, a technology fosters side effects that are opposite to the effects that were first expected, both positive and negative).</p>
<p>Now you could ask yourself these questions regarding the iPad, which is a new medium for conveying information and is quite visible an extension of its user. Using it as a knowledge base, navigating, helping us communicate with others it extends our natural abilities.</p>
<p>Back to the questions, let&#8217;s give them a try, perhaps your answers would be different, that would be a great start of a discussion of what the iPad actually means. Think sociological effects, not just purely functional. What helps is to image everyone having an iPad and/or using it for everything, what would be different in such a world? Answers can be both positive and negative.</p>
<p><strong>What does the iPad improve or enhance?</strong></p>
<ul>
<li>It increases the time spent behind a computer (in the park, in bed, on the train etc.)</li>
<li>It enhances people&#8217;s ability to interact with data and software, it helps computerize society</li>
</ul>
<p><strong>What does the iPad make obsolete?</strong></p>
<ul>
<li>Some people thought it would make the laptop or net-book obsolete. I&#8217;m not too sure about that, but you might say it makes the laptop less favorable for watching movies or pictures. But that&#8217;s is not a sociological effect in itself.</li>
<li>Books, encyclopedias, cook books, news papers.</li>
<li>It makes staying at home or at a desk obsolete (when consuming data)</li>
</ul>
<p><strong>What does the iPad bring back from the past?</strong></p>
<ul>
<li>The touch interface obviously brings back the tactile experience which other computers don&#8217;t have. Before the age of computers, dealing with information and entertainment was much more tactile, we had books and magazines and games were physical as well (board games). The iPad brings back interaction using our touch senses.</li>
<li>It brings back the book, but improved. Perhaps reading and engaging in stories will get an impulse.</li>
</ul>
<p><strong>What does the iPad overturn?</strong></p>
<ul>
<li>You could imagine that if everyone stopped using PCs and laptops and only iPads, users would consume only bite-sized data and though the iPad is an information-sharing device, if it&#8217;s the only thing you use, you might stop producing data. In effect limiting the information sharing.</li>
<li>Can&#8217;t think of more, this one is hard&#8230; <img src='http://machielgroeneveld.nl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Hopefully this has raised your interest in McLuhan and made you think a bit more about what sociological effects a new medium (like the iPad) has, often they have a far more profound impact on our society and way of thinking than we initially presume.</p>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/2011/05/07/mcluhan-the-ipad-is-the-message/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Front End Architecture</title>
		<link>http://machielgroeneveld.nl/2011/01/27/front-end-architecture/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2011/01/27/front-end-architecture/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 15:32:31 +0000</pubDate>
		<dc:creator>Machiel Groeneveld</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://machielgroeneveld.nl/?p=208</guid>
		<description><![CDATA[HTML/Java Workflow &#38; Architecture Currently I&#8217;m thinking about different ways to set up a good set up for creating/changing websites. When your team consists of HTML/CSS developers on one side that know about user interaction, graphics and layouts and Java developers on the other side that excel at making data available and dealing with the [...]]]></description>
			<content:encoded><![CDATA[<p>HTML/Java Workflow &amp; Architecture</p>
<p>Currently I&#8217;m thinking about different ways to set up a good set up for creating/changing websites. When your team consists of HTML/CSS developers on one side that know about user interaction, graphics and layouts and Java developers on the other side that excel at making data available and dealing with the complexities of 3rd party communications. The challenge is to set up the team and architecture for an effective workflow, letting everyone do what he/she does best.</p>
<p>The context is a company that has a lot of data and wants to make this data accessible through multiple channels and sites. The user experience is a very important, so tuning the websites on the HTML level is an ongoing activity. Expanding to new devices and websites is one of the (technical) objectives.</p>
<p>The way to set up the components and what abstractions to use is not obvious. After speaking to some peers in the industry, I&#8217;ve distilled three main options to choose from. Combinations are possible, but I&#8217;ll describe the simple case. I haven&#8217;t decided which is best, though and I might be overlooking some crucial things. My main goals for any solutions are:</p>
<ul>
<li>Zero round-trip while developing HTML/CSS/JS</li>
<li>Independence of HTML developer when creating new ways to display the same data</li>
<li>Smooth work-flow from concept to implementation.</li>
</ul>
<h2>JavaScript All the Way</h2>
<p>With this approach JavaScript takes care of all interactions of the website. A good example is the Google Start page, which contains very little HTML, but once you enter a search term, the content completely changes, using JavaScript<a href="http://machielgroeneveld.nl/wp-content/uploads/2011/01/Selection_003.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignleft" title="GoogleHome" src="http://machielgroeneveld.nl/wp-content/uploads/2011/01/Selection_003-300x91.png" alt="" width="300" height="91" /></a></p>
<p>The pre-rendered HTML is very minimal, providing the structure that you fill with JavaScript. The biggest advantage is, provided you can create a clean remote API for JavaScript to access, total <em>independence</em> of your HTML development. As long as you want to display the same data, new websites can be created with few changes required on the back-end. Since the HTML doesn&#8217;t have to be server generated, it can be plain HTML all the way. Although that simplifies things there are some downsides as well. Google being the biggest issue; the content generated by JavaScript is not parsed by Google, so your site will not do well in the search engines. Getting the data to your JavaScript means you&#8217;ll have to provide an easy http accessible API (using JSON or REST etc.), it might not be trivial to come up with a clean API, basically you&#8217;re adding a physical layer to your architecture.</p>
<p><a href="http://machielgroeneveld.nl/wp-content/uploads/2011/01/JS.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="size-medium wp-image-214 alignright" title="JS" src="http://machielgroeneveld.nl/wp-content/uploads/2011/01/JS-300x127.png" alt="" width="300" height="127" /></a></p>
<p><strong>Pros</strong></p>
<ul>
<li>Largely independent from back-end</li>
<li>Zero roundtrip when changing HTML</li>
<li>There is only one version of the HTML (no conversion to templates)</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Google cannot index content generated by JavaScript</li>
<li>Complex workflows that keep state are harder to maintain/debug in JavaScript</li>
<li>An extra layer of</li>
<li>Performance and security</li>
<li>Re-use is limited</li>
</ul>
<h2><strong>Server Side Scripting</strong></h2>
<p>Here you don&#8217;t let JavaScript fill your combo-boxes, but it&#8217;s a dynamic language like PHP/Python/Ruby/ASP that renders them (let&#8217;s assume PHP). The HTML is generated by a language that intrinsically supports a fast (save&amp;refresh) development cycle. Although these scripting languages are powerfull enough to build your entire application, you risk not separating the data from the presentation or trying to build things that are too complex (PHP-hell). So you will probably have your PHP access some (remote) API that handles the complex things. There is a bit more flexibility in terms of connecting your PHP to the back-end API and because the PHP is run on the server security is less of an issue. <a href="http://machielgroeneveld.nl/wp-content/uploads/2011/01/php1.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignright size-medium wp-image-220" title="php" src="http://machielgroeneveld.nl/wp-content/uploads/2011/01/php1-300x92.png" alt="" width="300" height="92" /></a></p>
<p><strong>Pros</strong></p>
<ul>
<li>HTML can be indexed by Google.</li>
<li>Short roundtrip when changing PHP</li>
<li>PHP code runs on a trusted server</li>
<li>Simple enough for HTML developers</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Risk of PHP layer to grow too big</li>
<li>Extra runtime environment needed (Apache)</li>
<li>HTML only works after PHP parsing</li>
</ul>
<h2>The Java World</h2>
<p><a href="http://machielgroeneveld.nl/wp-content/uploads/2011/01/java.png#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img class="alignright size-medium wp-image-221" title="java" src="http://machielgroeneveld.nl/wp-content/uploads/2011/01/java-300x128.png" alt="" width="300" height="128" /></a>This is (for me) the most common model. Some Java Web-framework handles the user request, invokes a controller and passes the result to some HTML-template engine which renders the Java objects into HTML. The real difference here is that you have direct access to Java objects from the HTML template, so when you can model and access your data in Java, you can use these objects directly in your HTML. For Java developers this is very natural. Your web application generates HTML, whilst the developer can work and reason about Java objects almost all the way, the HTML is considered the VIEW part of the framework. One issue with this, is when the HTML layer is doing more than just render the data. Integrating interactive behavior in your HTML is handled by some frameworks quite extensively but at the cost of proprietary abstractions of both JavaScript and the interactions between front and back end. Although this works, it seems to be mostly geared towards Java developers that don&#8217;t want to deal with real HTML and JavaScript. Good for Java developers, unnatural for HTML developers.</p>
<p><strong>Pros</strong></p>
<ul>
<li>Data access and HTML generation in one machine/JVM, easy and fast</li>
<li>Short development time for Java-heavy applications</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Extra channels and websites will need to be modeled in the server framework</li>
<li>Templates are not HTML, only work when run inside the Java framework</li>
<li>Longer development round-trip, but needs full Java set-up with war overlay</li>
</ul>
<h2>Wrapping up</h2>
<p>So what&#8217;s the best? Of course it depends. Did I miss any pros or cons? What do you use to get maximum productivity from both your back-end and front-end developers.</p>
<h3>References</h3>
<ul>
<li><a href="http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html">7 reasons I switched back to PHP after 2 years on Rails</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://machielgroeneveld.nl/2011/01/27/front-end-architecture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quality vs. Automated Software Testing</title>
		<link>http://machielgroeneveld.nl/2010/03/09/deming-vs-automated-software-testing/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2010/03/09/deming-vs-automated-software-testing/#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 [...]]]></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/2010/03/09/deming-vs-automated-software-testing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fitting Scrum to project organizations</title>
		<link>http://machielgroeneveld.nl/2009/11/27/dont-overscrum/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2009/11/27/dont-overscrum/#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 [...]]]></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 &#8216;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/2009/11/27/dont-overscrum/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dalende trend in ICT detachering</title>
		<link>http://machielgroeneveld.nl/2009/11/15/dalende-trend-in-ict-detachering/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2009/11/15/dalende-trend-in-ict-detachering/#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/2009/11/15/dalende-trend-in-ict-detachering/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>My First Hippo Steps</title>
		<link>http://machielgroeneveld.nl/2009/10/31/my-first-hippo-steps/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2009/10/31/my-first-hippo-steps/#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/2009/10/31/my-first-hippo-steps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Avoid Big solutions</title>
		<link>http://machielgroeneveld.nl/2009/10/22/big-solutions/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2009/10/22/big-solutions/#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 &#8216;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/2009/10/22/big-solutions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flowing through The Bottleneck</title>
		<link>http://machielgroeneveld.nl/2009/10/10/flowing-through-the-bottleneck/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://machielgroeneveld.nl/2009/10/10/flowing-through-the-bottleneck/#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/2009/10/10/flowing-through-the-bottleneck/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

