<?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>www.sanderhoogendoorn.com</title>
	<atom:link href="http://sanderhoogendoorn.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://sanderhoogendoorn.com/blog</link>
	<description>Imagination is more important than knowledge</description>
	<lastBuildDate>Wed, 15 May 2013 10:00:29 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Offshore Agile Software Development: Does It Work?</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1229&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=offshore-agile-software-development-does-it-work</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1229#comments</comments>
		<pubDate>Wed, 15 May 2013 10:00:29 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Offshore]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Waterfall]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1229</guid>
		<description><![CDATA[Due to the ever-rising demand for seasoned software developers in the nineties, offshore software development became a compelling alternative to in-house development for many organizations. Despite the cultural, language and time differences and the geographical distance involved, more and more &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1229">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><em>Due to the ever-rising demand for seasoned software developers in the nineties, offshore software development became a compelling alternative to in-house development for many organizations. Despite the cultural, language and time differences and the geographical distance involved, more and more projects were executed with offshore development and testing, benefiting from lower rates of cost and the high availability of people, and where necessary, the ability to have teams working around the clock.</em><br />
<h2><strong>Early offshore</strong></h2>
<p>Particularly during the early years of offshore software development, the majority of projects were executed using rather traditional, Waterfall-style approaches. Projects were characterized as fixed-price and fixed-date. The requirements and the design were compiled onshore, after which coding and testing was done in another part of the world, be it Eastern Europe, India or South America.
<p>The Waterfall model typically involves executing each of the activities in software development consecutively, and only once – requirements, analysis, design, code, test and deployment – to deliver a product based on the completion of each of these project milestones. Interestingly, this model has led to high failure rates in projects, even without offshoring some of the activities. At each milestone knowledge is lost and testing is executed very late – only when development is done – with exponentially rising costs of repairing bugs. Moreover, achieving completeness in requirements early on in a project is difficult and changes to requirements are costly.
<p>Oddly enough, even with these anomalies, and even with failing local projects, many organizations still ventured into offshore software development applying the Waterfall model. Not surprisingly, many of these projects failed to deliver on time or on budget and did not deliver the required functionality. Despite the hoped-for benefits of lower costs and high availability of skilled people, offshore projects add another level of complexity due to more complex control and coordination, and because of language, cultural and time zone discrepancies.<br />
<h2><strong>Is Agile more suited for offshore than Waterfall?</strong></h2>
<p>So with Agile approaches, such as Scrum and Kanban, reaching the peaks of their popularity, an interesting question is: can Agile approaches and techniques overcome some of the shortcomings of offshore Waterfall development?
<p>In short, Agile approaches are characterized by working in short iterations, where during each iteration a number of continuously re-prioritized work items are fully realized by a multi-disciplinary team, usually applying a similar life cycle per work item – requirements, analysis, design, code, test and deployment – as Waterfall uses over a whole project.
<p><img src="http://sanderhoogendoorn.com/blog/wp-content/image_thumb11.png">
<p>At the start of an Agile project the requirements are only identified, and not compiled into full detail. This list of requirements is known as the backlog, and is not designed to be complete. Rather, items from the backlog are elaborated on during iterations (also known as sprints). So all the real work is done during iterations. As a consequence, Agile teams are required to be multidisciplinary, and work together on a daily basis to implement functionality work item by work item. As such, co-location of teams, quite often at the client, works best in Agile.
<p>So is Agile <em>more</em> suited than Waterfall for offshore software development? Clearly there are huge benefits. Requirements, analysis and design needn’t be finalized until a work item is actually implemented. So there is no grand, fixed, inflexible design decided upfront. Testing and deployment also take place immediately after coding the individual work items, not only at the end of the project. The total life cycle of a work item is usually no longer than a couple of days, instead of the whole project duration. That is why Agile works well in domains where it is accepted that requirements are never complete and might change, which is the case in the vast majority of projects worldwide.
<p>So what happens when Agile approaches and techniques are applied to <em>offshore </em>software development to overcome Waterfall shortcomings? Apart from the apparent benefits, applying Agile to offshore also comes with consequences. Applying an Agile approach will involve close collaboration between all roles, whether on-site or offshore. It will also involve daily communication, and the ability to work on the same work item at the same time. Communication is therefore key in Agile projects, and as we all know, distance makes communication harder. Therefore offshore Agile teams need to be able to rely on other means of communication than on-site teams. Moreover, it is key that information is clear and&nbsp; unambiguous, which is difficult as this is exactly the bottleneck that Agile is trying to overcome, as work items are not elaborated on until implemented.
<p>But despite some of the difficulties involved in offshore Agile projects, particularly in highly complex domains or around regulatory sensitivities, Agile approaches have the potential to offer many benefits. In my opinion, it almost goes without saying that offshore Agile is going to be more effective to most organizations than offshore Waterfall, but only when key issues around communication, overheads and language issues are overcome.&nbsp; I will explore some of the key strategies for making offshore Agile software development work in my next post.<br />
<hr /> This post was also published on the ISD Connect website at:<br />
<h3><a href="http://www.idgconnect.com/blog-abstract/1680/offshore-agile-software-development-does-it-work" target="_blank">Offshore Agile Software Development: Does It Work?</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1229</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The changing interpretation of agile</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1224&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-changing-interpretation-of-agile</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1224#comments</comments>
		<pubDate>Sun, 28 Apr 2013 15:22:20 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1224</guid>
		<description><![CDATA[For as long as I can remember I have been evangelizing, promoting, practicing, coaching, and training agile. For me as a developer the goals for applying agile approaches and techniques are pretty clear. I want to make better software. Higher &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1224">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><em>For as long as I can remember I have been evangelizing, promoting, practicing, coaching, and training agile. For me as a developer the goals for applying agile approaches and techniques are pretty clear. I want to make better software. Higher quality, better suited for use, and possibly also faster. And from my own empirical evidence I can certainly state agile helps.</em></p>
<h2>Gone with the wind</h2>
<p>So you would say the current raging popularity of everything agile would bring greater joy to my personal life. Unfortunately it doesn’t. Agile has become the new magical keyword for improving just about anything thinkable. There’s an agile mindset. The word agile is dropped on a daily basis in advertisements. There’s agile cars, agile games, and even agile washing powder. And on the fly agile seems to inspire people, communities and even movements to change the world. Great.</p>
<p>Yes, I know agile is characterized in dictionaries by quickness, lightness, and ease of movement or even nimble. So yes, I totally agree agile can be applied to much more than software development. But to quote Clark Gable in Gone With The Wind: <em>Frankly</em>, <em>my dear, I don&#8217;t give a damn. </em>I don’t care much for changing the world, or even changing organizations. I want to write software. Better. Faster.</p>
<p><img src="http://25.media.tumblr.com/tumblr_lyejaiLetr1qa7bt6o1_500.jpg"></p>
<p>Let me give you some examples where agile is going. At a recent agile conference delegates put up a board of interesting books. It contained highly agile books, such as Your Brain At Work, Tribal Leadership and Fearless Change. Without any doubt very interesting and worthwhile books. But what happened to the classics? I didn’t spot Design Patterns, Framework Design Guidelines, Code Complete, Clean Code, or Patterns Of Enterprise Application Architecture? </p>
<p>These days, agile is used as a adapter for all kinds of coaching and personal improvement. From Getting Things Done through neuro-linguistic programming to gamification. There is even an agile game conference in the planning. Or what about personal energy management, product owner &#8220;light bulbs&#8221; or agile kitchens? All very nice, but very little to do with programming. As said, agile is becoming an accepted synonym for any form of personal development.</p>
<h2>Half-full or half-empty?</h2>
<p>And it’s getting worse. In many organizations I’ve noticed that agile is both used to illustrate failure of things that have absolutely nothing to do with agile, as well as an explanation for things that go well. Also having nothing to do with agile. Let me also give some examples of this interesting use of the word agile. </p>
<p>First of all, agile seems to become synonymous for anything that is done just-in-time. For instance, some account manager, barely making the deadline for submitting a proposal to a client, commented on the process stating: “Great, we did this really agile,” suggesting that delivering just-in-time is really agile. Nor the proposal, nor the way it was written had anything to do with agile whatsoever. At another occasion, two people showed up late for a meeting. The organizer of this meeting, which was neither a kick-off, a retrospective nor a stand-up meeting, just smiled and said: “Well, that’s agile, isn’t it?” Well, it isn’t. So agile also has become a synonym for things are run over a deadline. The glass can be half-full or half-empty, depending how you look at it. </p>
<p><img src="http://images.sodahead.com/polls/000054439/polls_glass_half_full_1210_839967_poll_xlarge.jpeg"></p>
<p>I suppose it is due to the liberal definition of agile that the word, and in its slipstream words such as Scrum, Kanban and Lean have become daily speech patterns. I am quite aware that we as software developers and testers have no right to claim the word agile for ourselves. And I for one certainly wouldn’t want to deprive anyone from having fun with it. Everybody is entitled to personal development, or to chasing his or her dream to change the world or even an organization, but sometimes I wish we could just go back to what we developers and testers do best: write code and test functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1224</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validating sending mail messages in smart use case unit tests</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1209&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=validating-sending-mail-messages-in-smart-use-case-unit-tests</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1209#comments</comments>
		<pubDate>Tue, 12 Feb 2013 16:33:16 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Adf.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Smart use cases]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1209</guid>
		<description><![CDATA[When building applications with the Adf framework, smart use cases are implemented in task classes. Quite regularly mail messages are sent from tasks. To do so we use the MailManager class. Using this class mail messages are usually build up &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1209">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>When building applications with the Adf framework, smart use cases are implemented in task classes. Quite regularly mail messages are sent from tasks. To do so we use the <strong>MailManager </strong>class. Using this class mail messages are usually build up as in the following code example.</p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/image113.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://sanderhoogendoorn.com/blog/wp-content/image_thumb41.png" width="571" height="109"></a></p>
<p>To send mail messages, the MailManager plugs in an implementation of the <strong>IMailProvider </strong>interface. Currently, Adf provides two mail providers, the obvious implementation <strong>SmtpMailProvider</strong>, and the <strong>DummyMailProvider</strong>, which creates the mail messages and dumps it in a specified directory.</p>
<p>Smart use cases, implemented in task classes, are always unit tested. Here, each of the public methods of the tasks are tested using the <strong>Adf.Test </strong>libraries from the framework. A number of test methods is usually implemented to test all possible scenario’s of going through the smart use cases. In the following code example, such as method is shown. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/image114.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://sanderhoogendoorn.com/blog/wp-content/image_thumb42.png" width="501" height="150"></a></p>
<p>In this example, the <strong>Init() </strong>method of the task is called. After it is called the test framework can perform any number of checks. In this example, all validations should succeed, and the <strong>Status </strong>property of the <strong>Account </strong>domain object should be set to <strong>Unverified</strong>. The last validation <strong>ViewIsActivated</strong> will check if the accompanying (web, Windows RT) page or Windows form is presented to the user. </p>
<p>Recently, we have added new features to also validate whether a task has sent the mail message it was supposed to send. To provide for this functionality, we’ve added a <strong>TestMailProvider </strong>to the <strong>Adf.Test </strong>libraries. In your test project, this mail provider needs to be plugged in to the <strong>MailManager</strong>, as follows in code (or in the <strong>app.config </strong>file).</p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/image115.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://sanderhoogendoorn.com/blog/wp-content/image_thumb43.png" width="500" height="133"></a></p>
<p>This will ensure that any mail messages being send by the tasks, is sent through the <strong>TestMailProvider</strong>. The test mail provider will, similar to the <strong>DummyMailProvider</strong>, place mail messages in a specified directory, but foremost it will also notify the <strong>TestManager </strong>that a message was sent.</p>
<p>Next, when unit testing the method that either sends, or doesn’t send the mail messages, you will be able to verify this, as in the following code example.</p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/image116.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://sanderhoogendoorn.com/blog/wp-content/image_thumb44.png" width="466" height="157"></a></p>
<p>You can use the <strong>MailIsSent </strong>or the <strong>MailIsNotSent </strong>methods for this means.</p>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1209</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding specific validation messages to value objects</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1189&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adding-specific-validation-messages</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1189#comments</comments>
		<pubDate>Wed, 19 Dec 2012 14:33:44 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[Adf.Net]]></category>
		<category><![CDATA[Validation]]></category>
		<category><![CDATA[Value objects]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1189</guid>
		<description><![CDATA[One of the requests we often get in projects that use the Adf.Net framework is to be able to get specific validation messages, especially when during persisting panels to domain objects, properties that have value objects as their type fail &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1189">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>One of the requests we often get in projects that use the Adf.Net framework is to be able to get specific validation messages, especially when during persisting panels to domain objects, properties that have value objects as their type fail to persist, usually during call such as below.</p>
<pre class="code"><span style="color: blue;">protected void </span>lbOpslaan_Click(<span style="color: blue;">object </span>sender, <span style="color: #2b91af;">EventArgs </span>e)
{
    <span style="color: #2b91af;">BindManager</span>.Persist(Persoonsgegevens, panelPersoonsgegevens);

    MyTask.OpslaanPersoonsgegevens();
}</pre>
<p>I have added a mechanism to Adf.Net that supports three levels of validation messages. When the <strong>ValueObjectPropertyParser </strong>is unable to create a valid instance of a value object, it will act as follows.</p>
<p>First it will look if a specific validation message is present at the property itself it tries to create. Use the following attribute <strong>ValidationMessageAttribute</strong> to define such as message.</p>
<pre class="code" style="height: 160px; width: 693px;">[<span style="color: #2b91af;">MaxLength</span>(15)]
[<span style="color: #2b91af;">ValidationMessage</span>(<span style="color: #a31515;">"ReseFasa.Persoonsgegevens.Telefoonnummer"</span>)]
<span style="color: blue;">public </span><span style="color: #2b91af;">PhoneNumber </span>Telefoonnummer
{
    <span style="color: blue;">get </span>{ <span style="color: blue;">return </span>Get&lt;<span style="color: #2b91af;">PhoneNumber</span>&gt;(<span style="color: #2b91af;">PersoonsgegevensDescriber</span>.Telefoonnummer); }
    <span style="color: blue;">set </span>{ Set(<span style="color: #2b91af;">PersoonsgegevensDescriber</span>.Telefoonnummer, <span style="color: blue;">value</span>); }
}</pre>
<p>The message defined will show during validation only if this specific property for this domain object fails to instantiate.</p>
<p>If such an attribute is not present, the parser will look at the type of the property. In this specific example it is <strong>PhoneNumber</strong>. At the class (or struct) you can now define a <strong>ValidationTypeMessageAttribute</strong> attribute as follows.</p>
<pre class="code">[<span style="color: #2b91af;">ValidationTypeMessage</span>(<span style="color: #a31515;">"ResaFasa.Telefoonnummer"</span>)]
<span style="color: blue;">public struct </span><span style="color: #2b91af;">PhoneNumber </span>: <span style="color: #2b91af;">IValueObject</span>, <span style="color: #2b91af;">IComparable </span>{</pre>
<p>This message will show for any property of this type in any domain object that fails to be instantiated. Except of course for those properties that have the <strong>ValidationMessageAttribute</strong> attribute defined.</p>
<p>If no such attribute is defined on the class or struct, the <strong>ValueObjectPropertyParser </strong>will display the default validation message, which is defined by the code <strong>Adf.Business.NotInstantiable</strong>.</p>
<p>Please note that, in any case, normal handling of validation takes place. The defined attributes should use always a code, where the actual message is stored in resource files. By default all three messages take two arguments that can be used as parameters in the message. The first argument <strong>{0}</strong> is set to the improper value, and the second argument <strong>{1}</strong> is set to the property that could not be instantiated, with the following result.</p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/image112.png" target="_blank"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" src="http://sanderhoogendoorn.com/blog/wp-content/image_thumb40.png" alt="image" width="569" height="232" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1189</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reaching post-conditions in tasks</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1185&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=reaching-post-conditions-in-tasks</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1185#comments</comments>
		<pubDate>Thu, 06 Dec 2012 10:21:42 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Adf.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Smart use cases]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1185</guid>
		<description><![CDATA[Implementing use cases in Adf.Net is covered by the task pattern. Each smart use case in the model is implemented as a descendant of the Task class in Adf.Net. The task pattern consists of three major parts: Starting the task, &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1185">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Implementing use cases in Adf.Net is covered by the task pattern. Each smart use case in the model is implemented as a descendant of the <strong>Task </strong>class in Adf.Net. </p>
<p>The task pattern consists of three major parts:</p>
<ul>
<li>Starting the task, either using a parameterized <strong>Init() </strong>method, or the default <strong>Start() </strong>method.
<li>After a task calls another task, and this second task is finished, control goes back to the calling task, using any of the specific <strong>ContinueFrom()</strong> methods, or the default <strong>Continue()</strong> method.
<li>When a task reaches any of the post-conditions of a task, the task needs to be ended, usually through the <strong>Ok() </strong>or <strong>Cancel()</strong> method.</li>
</ul>
<p>In this specific post I’ll look at reaching the post-conditions. In the pattern, the <strong>Task </strong>class itself acts as the layer super type and implements a number of method to end itself. A use case can have multiple post-conditions. Some of them are positive, some can be negative. And sometimes a specific case needs to be addressed. </p>
<p>When a reaches it positive post-condition, it is a best practices to end it using the <strong>Ok() </strong>method. This method takes a <strong>params object[] p</strong>, which allows you to pass back results from the task to the calling task, using the following signature.</p>
<pre class="code"><span style="color: blue">public virtual void </span>OK(<span style="color: blue">params object</span>[] p);</pre>
<p>A similar method <strong>Cancel() </strong>exists for task that end in a negative post-condition, usually because the user cancels the interaction:</p>
<pre class="code"><span style="color: blue">public virtual void </span>Cancel(<span style="color: blue">params object</span>[] p);<br /></pre>
<p>But, Adf.Net also supplies a similar method <strong>Error()</strong>, to allow tasks to finish with an error, possibly technical.</p>
<p>Under the covers, these three methods call on another method, which is called <strong>Finish()</strong>. This method takes care of passing back an instance of <strong>TaskResult</strong>. This result also gets posted back to the calling task, so it knows how the called task has ended. As in the following example, you could also use <strong>Finish() </strong>yourself.</p>
<pre class="code"><span style="color: blue">if </span>(persoon.IsNullOrEmpty())
{
    <span style="color: #2b91af">ValidationManager</span>.AddError(GEENPERSOONGESELECTEERD);
    Finish(<span style="color: #2b91af">TaskResult</span>.Error);
}</pre>
<p>Please note that the code above is equal to the following code.</p>
<pre class="code"><span style="color: blue">if </span>(persoon.IsNullOrEmpty())
{
    <span style="color: #2b91af">ValidationManager</span>.AddError(GEENPERSOONGESELECTEERD);
    Error();
}</pre>
<p>By default, <strong>TaskResult</strong> has the following values in Adf.Net: <strong>Ok</strong>, <strong>Cancel</strong>, <strong>Error</strong>.</p>
<p>However, as <strong>TaskResult </strong>is implemented using the descriptor pattern, additional project specific value can be added easily, by inheriting from <strong>TaskResult</strong>, and added the specific values. Thus you would be able to end your task in more project specific ways, such as in the code example below.</p>
<pre class="code"><span style="color: blue">if </span>(persoon.IsNullOrEmpty())
{
    <span style="color: #2b91af">ValidationManager</span>.AddError(GEENPERSOONGESELECTEERD);
    Finish(Dashboard8TaskResult.Aborted);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1185</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile business intelligence</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1173&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=agile-business-intelligence-2</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1173#comments</comments>
		<pubDate>Sun, 28 Oct 2012 13:00:26 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Business intelligence]]></category>
		<category><![CDATA[iteration]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Smart]]></category>
		<category><![CDATA[Smart estimation]]></category>
		<category><![CDATA[Smart use case points (SUCP)]]></category>
		<category><![CDATA[Smart use cases]]></category>
		<category><![CDATA[Software estimation]]></category>
		<category><![CDATA[sprint]]></category>
		<category><![CDATA[User stories]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1173</guid>
		<description><![CDATA[Het besparen van kosten is een veelgenoemde aanleiding voor Business Intelligence (BI) projecten. Zo wilde een bekende overheidsinstantie weten hoe effectief de bestrijding van uitkeringsfraude was. Het onderzoeken van mogelijke fraude kost de instantie geld, maar het vinden van fraudeurs &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1173">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><em>Het besparen van kosten is een veelgenoemde aanleiding voor Business Intelligence (BI) projecten. Zo wilde een bekende overheidsinstantie weten hoe effectief de bestrijding van uitkeringsfraude was. Het onderzoeken van mogelijke fraude kost de instantie geld, maar het vinden van fraudeurs levert echter direct geld op. En dus ging zoekt de instantie naar de optimale verhouding tussen het aantallen onderzoeken en het aantal opgespoorde fraudes. Kortgezegd wilde men met zo min mogelijk onderzoeken zoveel mogelijk fraudeurs vinden.</em> </p>
<p>Deze doelstelling is archetypisch voor BI-projecten. Hoewel de doelstellingen vaak concreet zijn te definiëren, is het realiseren ervan niet altijd evident. Welke rapportages moeten worden ontwikkeld? Wat staat daar op? Welke bronsystemen moeten worden geraadpleegd? Vaak wanneer het project eenmaal loopt, doen zich doorlopend nieuwe inzichten voor. Bijvoorbeeld over het ontbreken van benodigde informatie in bronsystemen. En anders doet de opdrachtgever wel inspiratie op voor nieuwe wensen en eisen uit feedback over opgeleverde rapportages en analyses. BI-projecten kenmerken zich vaak door onvolledige requirements en doorlopend voortschrijdend inzicht. </p>
<p>Op het gebied van aanpakken voor systeemontwikkeling hebben zich de laatste jaren enorme veranderingen voorgedaan. Steeds meer organisaties en projecten stappen over op een nieuwe generatie aanpakken, die voortschrijdend inzicht niet langer schuwen, maar juist omarmen. Ook kenmerkt deze nieuwe generatie aanpakken zich door multidisciplinaire samenwerking en het frequent in korte iteraties opleveren van software. In één woord: <i>agile</i>. De vraag is nu of en hoe deze aanpakken ook een positieve bijdrage kunnen leveren aan het uitvoeren van BI-projecten. </p>
<h2>Wat kenmerkt BI-projecten?</h2>
<p>De doelstellingen van BI-projecten zijn altijd direct business gerelateerd. Denk bijvoorbeeld aan het minimaliseren van verzekeringsfraude of het behouden van klanten. Tijdens een project worden analyses en rapportages gedefinieerd die ondersteunen bij het beheersen en optimaliseren van de bedrijfsprocessen van de opdrachtgever. Deze rapportages en analyses worden – meestal dagelijks – gevoed uit een datawarehouse. Kenmerkend voor dit type projecten is dat vaak lastig is vast te stellen welke concrete bijdrage deze analyses en rapportages uiteindelijk leveren. Neem voorbeeld de eerdergenoemde overheidsinstantie, waar niet op voorhand was uit te drukken hoeveel geld men kon besparen bij het vinden van de optimale verhouding tussen het aantal onderzoeken en het aantal gevonden fraudeurs. Uiteindelijk bleek in dit voorbeeld pas na afloop van het project dat de resultaten nog beter waren dan van te voren was geschat. </p>
<p>Hoewel vroegtijdig in projecten nog is vast te stellen welke analyses en rapportages benodigd zijn, is de exacte invulling hiervan nauwelijks concreet te formuleren. Wat wil de opdrachtgever nu echt zien in zijn rapporten? Neem als voorbeeld een rapportage over de verhouding tussen inkomende en uitgaande berichten bij een telecom-operator. Pas toen de opdrachtgever het rapport onder ogen kreeg, bleken er diverse soorten inkomende berichten te zijn, die ook weer gekoppeld zijn aan diverse soorten uitgaande berichten. Een typisch voorbeeld van voortschrijdend inzicht. </p>
<p>Een interessant fenomeen is ook het extractie-, transformatie- en laadproces (ETL). Hierbij worden in een aantal stappen de gegevens uit bronsystemen verzameld, geïntegreerd en geaggregeerd tot een formaat dat voor de rapportages en analyses benodigd is. In de meeste BI-projecten beslaat dit type werk circa tachtig procent van de ontwikkeltijd. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/clip_image0023.jpg"><img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://sanderhoogendoorn.com/blog/wp-content/clip_image002_thumb.jpg" width="436" height="291"></a> </p>
<p>Toch blijft dit werk meestal helaas onzichtbaar voor de opdrachtgever. Deze concentreert zich – terecht – vooral op de op te leveren rapportages en analyses. Maar doordat de bulk van het werk in een BI-project op ETL is gefocust, worden meestal ook de fasen van een dergelijk project rond ETL ingericht. Dat wil zeggen dat eerst alle extracties worden ontwikkeld, aansluitend de transformaties, om vervolgens alle gegevens te laden. Pas nadat dit is gelukt worden de rapportages en analyses gedefinieerd, zoals weergegeven in onderstaande afbeelding. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/clip_image0043.jpg"><img title="clip_image004" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image004" src="http://sanderhoogendoorn.com/blog/wp-content/clip_image004_thumb.jpg" width="375" height="250"></a> </p>
<p>Het gevolg hiervan is dat pas in deze laatste fase van het project iets wordt opgeleverd waarmee de opdrachtgever aan de slag kan. Dit heeft een belangrijk nadeel. Voor de opdrachtgever blijft het project lang onder water. Pas nadat veel tijd en geld is geïnvesteerd, kan de opdrachtgever feedback geven op de geproduceerde rapportages en analyses. Bovendien is de ETL dan al mind of meer volledig opgeleverd. Aanpassingen aan rapportages en analyses zijn nu lastig te realiseren. Ook is het niet uitgesloten dat als gevolg van deze feedback sommige stappen uit de ETL overbodig blijken. In dit geval is er zelfs werk voor niets uitgevoerd. Ten slotte komt het voor dat voor de gewenste rapportages en analyses gegevens nodig zijn die niet direct uit de bronsystemen zijn af te leiden. Aanvullende gegevens worden dan vaak handmatig toegevoegd tijdens de ETL. Vaak worden hiervoor gaandeweg het project kleine administratieve applicaties ontwikkeld. Nog los van het feit dat deze applicaties door de verkeerde ontwikkelaars worden ontwikkeld – BI-ontwikkelaars in plaats van softwareontwikkelaars – worden deze hiaten meestal pas laat in het BI-project ontdekt. Met alle gevolgen van dien. Zo uitgevoerd zijn veel BI-projecten duurder dan strikt noodzakelijk. </p>
<h2>Wat kenmerkt agile?</h2>
<p>In software development is afgelopen jaren een nieuwe generatie aan aanpakken ontstaan, die de best practices van eerdere generaties koppelen aan een sterk iteratief en coöperatief karakter. Deze aanpakken, zoals DSDM, extreme programming (XP), Scrum en Smart kenmerken zich in: </p>
<ul>
<li><i>Korte iteraties</i>. Project worden uitgevoerd in korte iteraties, variërend van twee weken tot een maand. Tijdens ieder van deze iteraties wordt een klein deel van de software geanalyseerd, ontworpen, gebouwd, getest en zelfs opgeleverd aan de opdrachtgever. Pas bij de start van een iteratie wordt vastgesteld welke functionaliteit tijdens de komende iteratie wordt gerealiseerd. Projecten verkorten zo de feedback lus met hun opdrachtgever. Dit verbetert de kwaliteit van de ontwikkelde software in hoog tempo. Dit in tegenstelling tot traditionele projecten, waar de software in een big bang wordt opgeleverd aan het eind van het project.
<li><i>Compacte eenheid van werk</i>. Om dit te kunnen bereiken hanteren projecten een eenduidige en kleine eenheid van werk. Er worden altijd meerdere workitems opgeleverd per iteratie. Individuele workitems leveren direct waarde opleveren voor de opdrachtgever.
<li><i>Snel en frequent opleveren van software</i>. Tijdens agile projecten wordt ook al tijdens de eerste iteraties workitems opgeleverd aan de opdrachtgever, al dan niet direct in productie. Dit zorgt ervoor dat mogelijke problemen, bijvoorbeeld rond architectuur of infrastructuur, al snel in het project boven water komen.
<li><i>Incorporeren voortschrijdend inzicht</i>. Anders dan in traditionele projecten, waar voortschrijdend inzicht zoveel mogelijk wordt uitgebannen, is het in agile projecten mogelijk en zelfs gebruikelijk nieuwe en wijzigende requirements direct mee te nemen. Dit kan doordat steeds bij de start van een nieuwe iteratie wordt vastgesteld welke workitems worden gerealiseerd. Nieuwe workitems kunnen nu al worden meegenomen, ten faveure over al eerder benoemde workitems.
<li><i>Nauwe samenwerking klant en opdrachtnemer</i>. Het snel en frequent opleveren van software in korte iteraties vraagt een intensieve samenwerking tussen opdrachtgever en opdrachtnemer. Er vindt bij voorkeur op dagelijkse basis overleg plaats, bijvoorbeeld om de nieuwe te realiseren workitems te analyseren.
<li><i>Geïntegreerde testen</i>. Omdat software frequent en al vroegtijdig wordt opgeleverd in projecten, is het testen van de workitems van cruciaal belang vanaf dag één in een project. </li>
</ul>
<h2><a name="_Toc332450299"><font color="#000000">Scrum</font></a></h2>
<p>Van alle agile aanpakken is Scrum verreweg de populairste. Niet zelden wordt Scrum met agile vereenzelvigd. De helderheid van de aanpak maakt Scrum een goed uitgangspunt voor projecten. </p>
<p>Een Scrum-project begint zodra de lijst met workitems is vastgesteld. Dit heet de product backlog. Meestal omvat deze een verzameling <i>user stories</i>. De backlog wordt vastgesteld door de vertegenwoordiger van de opdrachtgever, de <i>product owner</i>. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/clip_image006.gif"><img title="clip_image006" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image006" src="http://sanderhoogendoorn.com/blog/wp-content/clip_image006_thumb.gif" width="475" height="212"></a> </p>
<p>Iteraties, hier <i>sprints</i> genoemd, duren in de regel twee tot vier weken. Bij de start van een sprint wordt tijdens de sprint planning meeting door de product owner samen met het team de te realiseren user stories vastgesteld. Het team verdeelt deze in taken en schat de hoeveelheid werk hieraan in uren in. Op basis hiervan en op basis van de snelheid in vorige sprints en de samenstelling van het team in de komende iteratie wordt bepaald hoeveel stories er in de sprint passen. Deze stories worden op de <i>sprint backlog</i> geplaatst. Aan het einde van een sprint vindt de <i>sprint review meeting</i> plaats, waarin de gerealiseerde work items worden geëvalueerd. Aansluitend vindt de <i>retrospective</i> plaats, waarin het team de werkwijze evalueert en verbetert. </p>
<p>Scrum kent slechts een beperkt aantal rollen. Het werk wordt gedaan door het team, dat in de regel vijf tot negen personen telt en waarvan de individuele rollen niet zijn beschreven. De product owner vertegenwoordigt in het project de klant. Een Scrum Master coacht de product owner en het team. De voortgang in het project wordt bewaakt op een eenvoudig dashboard. </p>
<p>De eenvoud en populariteit van Scrum maken de aanpak een goed raamwerk voor startende projecten. De toegepaste terminologie uit de aanpak werkt aanstekelijk. Scrum is eenvoudig toe te passen en kan gemakkelijk waar nodig worden uitgebreid met technieken uit andere agile aanpakken. </p>
<h2><a name="_Toc332450301"><font color="#000000">Smart</font></a></h2>
<p>In onze ervaring kan Scrum voor BI-projecten goed worden gestructureerd met elementen uit andere agile aanpakken, in dit geval Smart. Deze van origine Nederlandse agile aanpak kent meerdere typen iteraties. Bij de start van een project wordt de backlog gevuld met work items die voorwaardelijk zijn om software te realiseren. Denk aan het vaststellen van stakeholders en doelstellingen, het modelleren van bedrijfsprocessen, rapportages en analyses in smart use cases, het maken van een schatting op basis van deze smart use cases, het opstellen van een base line architectuur, het inrichten van de ontwikkelomgeving en het maken van een projectplan. Deze workitems worden gerealiseerd tijdens de voorbereidende iteraties <i>Propose</i> en <i>Scope</i>. De iteratie <i>Propose</i> mondt uit in een eerste projectvoorstel. <i>Scope</i> eindigt met het opleveren van het projectplan. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/clip_image008.gif"><img title="clip_image008" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image008" src="http://sanderhoogendoorn.com/blog/wp-content/clip_image008_thumb.gif" width="484" height="63"></a> </p>
<p>Na deze inleidende iteraties wordt de backlog gevuld met de gemodelleerde smart use cases, die de standaard eenheid van werk zijn in Smart. De smart use cases worden gerealiseerd tijdens een of meerdere releases. Een release bestaat uit een reeks van <i>Realize</i> iteraties, gevolgd door een <i>Finalize</i> iteratie. Tijdens <i>Realise</i> iteraties worden de smart use cases gerealiseerd, getest en geaccepteerd. Iedere release wordt afgesloten door een <i>Finalize</i> iteratie, waarin de nadruk nog sterker ligt op testen en op het stabiliseren van de code. </p>
<p>Iedere iteratie heeft in Smart dezelfde opbouw. De iteratie start met een kick-off<i> Plan</i> en eindigt met de retrospective <i>Evaluate</i>. Daartussen worden de work items gerealiseerd tijdens <i>Build</i>. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/clip_image010.gif"><img title="clip_image010" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image010" src="http://sanderhoogendoorn.com/blog/wp-content/clip_image010_thumb.gif" width="482" height="127"></a> </p>
<p>In Smart telt het team meerdere rollen. De belangrijkste zijn projectsponsor, gebruiker, domeinexpert, ontwikkelaar, tester en coach. Smart doet het goed in langlopende, vaak wat complexere projecten zoals BI-projecten, waarin het meer structureren van rapportages en analyses in smart use cases beter past dan eerdergenoemde user stories. Smart use cases zijn direct gerelateerd aan de bedrijfsprocessen van de opdrachtgever. Bovendien worden ze gemodelleerd en geschat op basis van een reeks aan standaardtypen, zogenaamde stereotypes. Er zijn al stereotypes beschreven voor bijvoorbeeld stappen in ETL, rapportages en analyses. </p>
<h2>Snel en frequent opleveren</h2>
<p>Het snel en frequent opleveren van voor de opdrachtgever relevante software is een aspect van agile dat in BI bijzonder goed van pas komt. In plaats van de verticale fasering van traditionelere BI-projecten, kiezen we ervoor om het realiseren van analyses en rapporten juist horizontaal in te steken. Niet langer worden eerst alle extracties en aansluitend de transformaties en het laden van de gegevens opgeleverd om pas daarna de rapportages en analyses te ontwikkelen. </p>
<p>Liever ontwikkelen we per rapport of analyse. Hierbij kiest de opdrachtgever steeds welke rapporten of analyses de hoogste prioriteit hebben, en werkt het team uitsluitend aan de minimale set aan smart use cases die nodig zijn voor om deze te realiseren. Deze representeren de benodigde extracties en transformaties en natuurlijk het rapport zelf. Deze kanteling van werkzaamheden maakt directe feedback van de opdrachtgever mogelijk. Belangrijk bijkomend voordeel is dat de rapporten en analyses direct kunnen worden aangewend om de bedrijfsprocessen van de opdrachtgever te verbeteren. Soms al enkele weken na de start van het BI-project. Zo toont het project al op heel korte termijn benefits. </p>
<p>Zo wordt voortschrijdend inzicht nu eens niet uitgebannen, zoals traditionele, maar worden nieuwe inzichten direct meegenomen. Hoewel in principe tijdens een lopende iteratie de scope niet wijzigt, kunnen nieuwe requirements al tijdens een eerstvolgende iteratie op de rol worden gezet. Zodra de opdrachtgever de eerste versie van een rapportage of analyse onder ogen krijgt, formuleert hij direct zijn feedback, die dan vrijwel direct wordt geïmplementeerd – denk daarbij bijvoorbeeld aan het realiseren van data entry voor ontbrekende gegevens. </p>
<h2>Compacte eenheid van werk</h2>
<p>Kort gezegd is een BI-project uit te drukken in drie typen ontwikkelwerk: datamodellering en ETL, het definiëren van analyses en rapporten en het ontwikkelen van aanvullende data entry applicaties. In Smart is de smart use case de leidende eenheid van werk. Zowel voor het modelleren van bedrijfsprocessen en requirements, en voor het schatten, realiseren en testen van voor de gebruiker relevante functionaliteit. Voor het modelleren van smart use cases beschikken we over richtlijnen, die ertoe bijdragen dat smart use cases een lage granulariteit kennen en al tijdens <i>Propose </i>en <i>Scope</i> zijn te modelleren. Er is bovendien een groot aantal stereotypes beschreven die het modelleren, schatten en realiseren standaardiseren en vergemakkelijken. Voorbeelden hiervan zijn <b>manage</b> voor data entry, <b>search</b> voor het zoeken naar record of <b>file import</b>. </p>
<p>Hoewel afkomstig uit reguliere software development, blijken smart use cases ook prima aan te wenden voor agile BI-projecten. Wat betreft het definiëren van rapportages en het ontwikkelen van aanvullende data entry ligt dit voor de hand, omdat dergelijk werk niet wezenlijk verschilt van reguliere software development. Maar ook voor het vaststellen van analyses en zelfs voor het uitvoeren van ETL zijn use cases stereotypes vastgesteld, zoals <b>collect</b>, <b>integrate</b> en <b>aggregate</b>. </p>
<p>Smart use cases worden al vroeg in een agile BI-project gemodelleerd, tijdens <i>Propose</i> en <i>Scope</i>. Daarbij worden de smart use cases slechts geïdentificeerd en geschat. Details worden pas uitgewerkt tijdens latere iteraties. Aansluitend worden <i>Realize</i> en <i>Finalize</i> iteraties ingepland. Tijdens deze iteraties ligt de focus op het realiseren van individuele rapportages, op basis van de hiertoe benodigde smart use cases voor ETL, eventuele data entry en de definitie van het rapport. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/clip_image0123.jpg"><img title="clip_image012" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image012" src="http://sanderhoogendoorn.com/blog/wp-content/clip_image012_thumb.jpg" width="429" height="272"></a> </p>
<p>De benodigde smart use cases worden zo snel mogelijk gerealiseerd en met de opdrachtgever afgestemd. Bijkomend voordeel is dat de onderliggende dataflows, die nu zijn uitgedrukt in smart use cases, goed individueel te testen zijn, en zelfs is door het modelleren van de use cases hergebruik van dataflows snel geïdentificeerd. </p>
<p>In BI-projecten is het snel en frequent opleveren van nieuwe rapportages en analyses van groot belang voor de opdrachtgever. Immers, ieder nieuwe rapportage kan direct worden benut in de praktijk en levert zo direct toegevoegde waarde aan het optimaliseren van de bedrijfsprocessen van de opdrachtgever. Daarnaast hebben BI-projecten veel baat bij het voortschrijdend inzicht dat ontstaat dankzij de korte iteraties in agile projecten. Beter dan dit uit te bannen, zoals traditioneel wordt getracht, is het om juist effectief gebruik te maken van deze inzichten en feedback. </p>
<h2>Dashboards en burn-down-charts</h2>
<p>Om agile projecten te beheersen en de voortgang te bewaken wordt in de regel gebruikt gemaakt van een tweetal pragmatische gereedschappen; een agile dashboard of taskboard en een <i>burn-down-chart</i>. Alle te realiseren workitems doorlopen een levenscyclus, die de stappen uit het realiseren ervan beschrijft, doorgaans in enkele dagen tijd. Voor smart use cases telt deze levenscyclus stappen als <i>New</i>, <i>In Iteration</i>, <i>Working</i>, <i>Testing, Rework</i> en <i>Accepted</i>. Doorgaans breiden projecten deze cyclus uit naar gelang de projectspecifieke werkwijze dit verlangt. De stappen in de levenscyclus van workitems of smart use cases vormen de kolommen op het dashboard of taskboard van een agile project. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/clip_image014.gif"><img title="clip_image014" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image014" src="http://sanderhoogendoorn.com/blog/wp-content/clip_image014_thumb.gif" width="441" height="215"></a> </p>
<p>De meeste agile projecten gebruiken voor dergelijke dashboards post-its aan de muur, of een online gereedschap. In een oogopslag is zo, ook voor de opdrachtgever, te zien wat de voortgang van de smart use cases is. </p>
<p>Omdat de omvang van smart use cases worden geschat in punten, is bij ieder statuswijziging snel na te gaan hoeveel werk nog nodig is om de onder handen zijnde rapportages en smart use cases te voltooien. Zodra een smart use cases is geaccepteerd, krijgt het team de bijbehorende punten. In agile BI-projecten is het daarbij belangrijk dat ook de “back end” smart use cases die stappen uit de ETL of data entry representeren door de opdrachtgever worden geaccepteerd. Dit kan bijvoorbeeld gebeuren met de opdrachtgever de resultaten van dergelijke use cases in de reporting tool te demonstreren. </p>
<p>Een burn-down-chart toont een dagelijkse momentopname van deze punten, uitgezet in de tijd. Met een eenvoudige extrapolatie is nu de verwachte einddatum van het project te calculeren. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/clip_image016.jpg"><img title="clip_image016" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image016" src="http://sanderhoogendoorn.com/blog/wp-content/clip_image016_thumb.jpg" width="403" height="247"></a> </p>
<p>In agile BI-projecten is het overigens niet alleen zeer zinvol een burn-down-chart te gebruiken voor het gehele project, maar ook om per te realiseren rapport en analyses deze voortgang te projecteren. Juist omdat de rapportages individueel worden opgeleverd, leveren deze laatstgenoemde burn-down-charts de opdrachtgever directe informatie over wanneer het nieuwe rapport is in te zetten in het besturen van zijn bedrijfsprocessen. </p>
<h2>Snel resultaat</h2>
<p>Agile aanpakken zoals Scrum en Smart spelen bijzonder goed in op de snel wijzigende en uitbreidende wensen en eisen van opdrachtgevers aan BI-projecten. Daarbij wordt in korte iteraties aan het “goed genoeg” opleveren van individuele rapporten en analyses gewerkt. Zo heeft de opdrachtgever al veel eerder profijt van zijn BI-project, en kan voortschrijdend inzicht sneller en goedkoper leiden tot een optimaal eindresultaat. Het toepassen van smart use cases biedt BI-projecten daarnaast een gestructureerde, maar vooral pragmatische manier om met eenzelfde eenheid van schatten, realiseren en testen te opereren, die bovendien direct te relateren is aan de bedrijfsprocessen van de opdrachtgever. De pragmatische gereedschappen die in agile projecten worden gebruikt om de voortgang te meten, zoals agile dashboards en burn-down-charts per rapport, bieden bovendien direct inzicht in de realisatie van de rapportages en analyses. Agile BI biedt daardoor snel resultaat met snel groeiende tevredenheid van de klant. En daar was het allemaal om te doen toch? </p>
<hr />
<p>Dit artikel verschijnt in het themanummer Agile Datawarehousing van maandblad Informatie</p>
<p>Sander Hoogendoorn <br /><i>Principal Technology Officer en Agile Thoughtleader Capgemini, auteur van de boeken <b>Dit Is Agile</b> (agile, Scrum, Smart) en <b>Pragmatisch Modelleren met UML</b> (smart use cases).</i></p>
<p>Sandra Wennemers <br /><i>Principal Consultant en Data Warehouse Architect Capgemini</i><i></i> </p>
<p>Zie ook <a href="http://www.smartusecase.com">www.smartusecase.com</a> en <a href="http://www.ditisagile.nl">www.ditisagile.nl</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1173</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Waterfall Dentist Anti-Pattern</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1131&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-waterfall-dentist-anti-pattern</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1131#comments</comments>
		<pubDate>Wed, 03 Oct 2012 15:34:19 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Anti-patterns]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[RUP]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Smart]]></category>
		<category><![CDATA[Waterfall]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1131</guid>
		<description><![CDATA[Believe it or not, but I have a confession to make. I’m currently in a pure waterfall project. It’s my first in many, many years and despite the fact that I love the technology, I don’t like our way or &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1131">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://sanderhoogendoorn.com/blog/?p=1131" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div>
<p><em>Believe it or not, but I have a confession to make. I’m currently in a pure waterfall project. It’s my first in many, many years and despite the fact that I love the technology, I don’t like our way or working it a bit.</em> </p>
<p>During the first phase of this project we are trying to deliver twenty functional work items. All of these twenty work items are analyzed first, then reviewed. After all review comments have been processed, all work items are designed. And again reviewed. After all review comments have been processed again, the developers start constructing them. And once they finish the testers have a go at the software produced. </p>
<p>Yes, I know this is efficient nor effective. And yes, the testers find lots of defects that could have easily been prevented using an iterative approach where we jointly work on a single work item, and only after it’s finished move on to the next. But we just don’t. And the delivery date is nearing. As a result, at the delivery date we will likely deliver twenty half-baked work items, instead of delivering maybe ten or twelve complete work items. It’s a choice.</p>
<h2>End of discussion</h2>
<p>You could say that the discussions about the chosen approach I have with the project manager are vivid. At the very least. “No, we’re not going to do agile,” he clearly states. “I don’t care if we call it agile or not,” I respond, “But the way we are working now is simply inefficient.” Personally I really don’t care if projects are tagged as agile, Scrum, Smart, RUP or even waterfall. I just dislike inefficient processes. “This approach is easy to explain to the client,” the project manager continues, “So we are going to stick to it. End of discussion.”</p>
<p>And then coming out of my girlfriends’ apartment building this morning I saw this car in the parking lot. It occurred to me immediately. We are waterfall dentists. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/2012-08-18-12.42.59.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2012-08-18 12.42.59" border="0" alt="2012-08-18 12.42.59" src="http://sanderhoogendoorn.com/blog/wp-content/2012-08-18-12.42.59_thumb.jpg" width="556" height="314"></a></p>
<p>Imaging you’re a young dentist, fresh out of dentistry school, and you are starting a new practice. Why on earth you would name it The Waterfall I don’t know, but twenty new patients are hurdling up to be treated. Being The waterfall dentist you use an appropriate approach. During the first week you examine all twenty patients. During the second week you commence to the first part of their treatment: drilling holes. Then in the third week, all twenty patients come back and have the holes filled. In the fourth week all patients return again for a last check-up. Just testing if all holes are filled properly. Finally, in the fifth week you get to send twenty bills to twenty happy patients. Project done. Next project.</p>
<h2>Good bookkeeping and new patients</h2>
<p>Doesn’t that sound good? This approach resembles my current project in great detail. So why is it, although this model is easy to explain to patients, no dentist in the world would even slightly consider to apply it? Well, first of all, your patients don’t like to walk around with unfilled holes in their mouths for a least a week. Second, your patients will have to come in to your office four times, and you will have to do pretty good bookkeeping to remember each patients details when they return. If you would have filled a patients tooth right after you’ve drilled a hole, this need for documentation and good memory wouldn’t have been necessary. Moreover, what if a <em>new</em> patient comes in during the second or third week with a terrible toothache? You would have to decline him saying: “Sorry, I don’t take additional work now,” advising the new patient to come back after all current patients are serviced. It’s the vicious change request. And what if you become ill during? Your whole schedule will certainly slide. As a result, none of the patients will have been fully serviced at the end of the scheduled period, leaving them in uncertainty about when you will deliver. Basically, you will loose your patients as fast as they hurdled up. And you won’t be able to send any bills. </p>
<p>I could probably spent another two posts in explaining why the waterfall model isn’t applied by dentist anywhere in the world. But I won’t. </p>
<h2>We just might</h2>
<p>Dear project managers, despite the fact that the waterfall model is so easy to explain to clients, that doesn’t make it any more effective or efficient. Armed with <em>The Waterfall Dentist Anti-Pattern</em>, you can explain iterative, or agile, approaches to your clients just as easy. In fact you can even service your clients better, as they may send in new urgent patients during the project, and you will be able to service those patients early. And even though you may turn ill during the project, servicing the patients one by one, rather than in a returning batch, you can actually fully service a large number of them within the designated timebox, instead of having serviced all of them half when the deadline approaches. I would much rather be able to send bills to fifteen out of twenty patients, then not being able to bill at all.</p>
<p>So where’s my current project standing? Well, just like The waterfall dentist <em>might </em>actually serve twenty patients during the current phase, we <em>might </em>actually deliver all twenty work items. But I wouldn’t bet my gold teeth on it.</p>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1131</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Illustrating the Dit Is Agile book</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1118&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=illustrating-the-dit-is-agile-book</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1118#comments</comments>
		<pubDate>Thu, 09 Aug 2012 13:42:56 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1118</guid>
		<description><![CDATA[This month I hope to round off the work on my new book Dit Is Agile (in Dutch). Last reviews are coming in, and I’m very happy with the results of my hand-drawn illustration for this new book. The idea &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1118">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://sanderhoogendoorn.com/blog/?p=1118" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div>
<p>This month I hope to round off the work on my new book Dit Is Agile (in Dutch). Last reviews are coming in, and I’m very happy with the results of my hand-drawn illustration for this new book. </p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/2012-08-07-17.35.41.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2012-08-07 17.35.41" border="0" alt="2012-08-07 17.35.41" src="http://sanderhoogendoorn.com/blog/wp-content/2012-08-07-17.35.41_thumb.jpg" width="567" height="319"></a></p>
<p>The idea of drawing the illustrations by hand instead of using PowerPoint or Visio is working out fine, and also allows me to add some cartoons to the book as well.</p>
<p><a href="http://sanderhoogendoorn.com/blog/wp-content/2012-08-08-13.42.53.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2012-08-08 13.42.53" border="0" alt="2012-08-08 13.42.53" src="http://sanderhoogendoorn.com/blog/wp-content/2012-08-08-13.42.53_thumb.jpg" width="569" height="320"></a></p>
<p>I hope and trust the book will be in shops soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1118</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What could the Dutch football learn from agile?</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1102&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-could-the-dutch-football-learn-from-agile</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1102#comments</comments>
		<pubDate>Sun, 24 Jun 2012 20:54:41 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Anti-patterns]]></category>
		<category><![CDATA[Project management]]></category>
		<category><![CDATA[Waterfall]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1102</guid>
		<description><![CDATA[After a series of very disappointing games the Dutch national football team was eliminated during the preliminary rounds of the European Championships. Comments weren’t mild. The most heard comments largely focused on the lack of team spirit and mental fitness. &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1102">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://sanderhoogendoorn.com/blog/?p=1102" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div>
<p><em>After a series of very disappointing games the Dutch national football team was eliminated during the preliminary rounds of the European Championships. Comments weren’t mild. The most heard comments largely focused on the lack of team spirit and mental fitness. Not uncommon to Dutch national football teams.</em></p>
<p>Earlier this week an interesting broadcast of the Dutch sports program Studio Sport included a discussion between some football players and the successful Dutch field hockey coach Mark Lammers. The latter stated that teams perform much better if the players share responsibilities. The Dutch football players at the table responded to this statement that this might work well in a modern game such as field hockey, as one the players said that he even saw it working in his daughters field hockey team, but that football is by nature a very conservative game, with lots of high profile media attention and that in this game the players should just execute the coaches orders.</p>
<p>I couldn’t help but watching this from an agile view. Clearly Mark Lammers would do well managing an agile software development project. Even though responsible for the team as a whole, he insist on giving the players the liberty to collaborate. Pretty similar to how agile project managers guide their project teams. Funny enough the Dutch football players ridiculed his ideas, and repeated that the players should just follow orders. That the game would become total chaos otherwise. Having seen the Dutch team playing, chaos was a actually a word that came to mind. And following up the coaches orders wasn’t part of it. </p>
<p>It’s actually the very same mockery agile has received from traditional managers over the years. Yes this agile stuff might work in small projects (such as the one football players daughters hockey game) or in fancy mobile projects (field hockey is a modern game), it doesn’t work in large, complex, high profile projects. Software development is a highly conservative game. It should not be bothered by this letting-the-players-share-the-responsibilities-in-the-team mumbo jumbo. Football players just execute their individual tasks. Just as analysts, developers and testers do in important software development projects.</p>
<p><img src="http://c15019356.r56.cf2.rackcdn.com/2012/06/Wesley-Sneijder.jpg" width="472" height="317"></p>
<p>Lammers had a good argument. Wouldn’t they agree that if players had influence and saying in what would be the best task, or how to execute it in the best way, they would simply run harder and even collaborate better as a team? The football players looked at him like they saw water burning. Lammers just couldn’t get through to them. Similar to the many discussions I’ve had about agile with traditional managers. It is the team that does the job. Not the individual players. </p>
<p>Doesn’t it just amaze you who unhappy highly appreciated players like Robin van Persie, Klaas Jan Huntelaar, or Wesley Sneijder with their respective tasks, and hence didn’t make it as a team? Wouldn’t that be similar to having Erich Gamma, James Gosling, Scott Guthrie and Anders Hejlsberg as the team of programmers in a project, and than have the project managers handing them out individual tasks, and denying them any influence in the project? </p>
<p>Much to my demise, one of my current projects is actually a waterfall project. Although I am one of the most seasoned guys (resources to the project manager) on the team, and have the role of software architect, the project manager insists on defining individual tasks that I should perform. There’s a whole list. I even book hours on individual posts per task. The horror.</p>
<p>So even though I’m in the role of overlooking the technology in the project, I’m actually constructing individual parts of the framework and the application. Solo. Now to me that is not a very motivating situation. Collaboration isn’t stimulated. So there’s little between the members in the team. In my opinion the project is running in a highly sub-optimal mode, where everybody delivers individual tasks, and then throwing the result over the wall to the next person. The project could be executed much more efficiently if we could operate as a team. With shared responsibilities. Not as a disjoint set of qualified individuals.</p>
<p>Back to the Dutch national football team during these European Championships. Wouldn’t you agree that this is actually a very good description of the whole thing? A bunch of highly qualified individuals all executing individual tasks that didn’t like to do? Wesley Sneijder clearly didn’t like his role as a left winger. And neither did Arjen Robben like his role. Hence they executed them without flair, without efficiency, and most of all without operating as a team. They were executing individual tasks, and throwing the result over the wall to the next person.</p>
<p>And still, at the end of the television debate, the field hockey coach was unable to convince the conservative football players. They clearly totally missed what he was talking about. Even when the question was posed whether the players are subordinate to the coaches tactics and plan, of whether it might be better to form a team that best fits the players qualities, they chose to stick to the plan. To put it in the words of the agile manifesto: they valued following a plan over individuals and interactions. </p>
<p><img src="http://thesoccerroom.com/wp-content/uploads/2012/06/van-bommel.jpg" width="446" height="358"></p>
<p>If only the next Dutch football team would learn from agile. And if only traditional project managers would learn from their kids field hockey teams, the Dutch team might be the next world champion. And our projects might actually succeed.</p>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1102</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Agile anti-patterns. Yes you agile projects can and will fail too</title>
		<link>http://sanderhoogendoorn.com/blog/?p=1100&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=agile-anti-patterns-yes-you-agile-projects-can-and-will-fail-too</link>
		<comments>http://sanderhoogendoorn.com/blog/?p=1100#comments</comments>
		<pubDate>Tue, 08 May 2012 15:08:25 +0000</pubDate>
		<dc:creator>shoogend</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Smart]]></category>
		<category><![CDATA[Smart use cases]]></category>
		<category><![CDATA[Software architecture]]></category>
		<category><![CDATA[Software estimation]]></category>
		<category><![CDATA[User stories]]></category>

		<guid isPermaLink="false">http://sanderhoogendoorn.com/blog/?p=1100</guid>
		<description><![CDATA[Over the years I have noticed a lot of agile anti-patterns during projects. Wrongly used agile approaches, dogmatic use of agile approaches, agile-in-name-only. Recently I have presented a talk at a number of agile and software development conferences that demonstrates &#8230; <a href="http://sanderhoogendoorn.com/blog/?p=1100">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div class="wlWriterHeaderFooter" style="float:none; margin:0px; padding:4px 0px 4px 0px;"><iframe src="http://www.facebook.com/widgets/like.php?href=http://sanderhoogendoorn.com/blog/?p=1100" scrolling="no" frameborder="0" style="border:none; width:450px; height:80px"></iframe></div>
<p>Over the years I have noticed a lot of agile anti-patterns during projects. Wrongly used agile approaches, dogmatic use of agile approaches, agile-in-name-only. Recently I have presented a talk at a number of agile and software development conferences that demonstrates patterns of agile misuse. These conferences include Agile Open Holland (Dieren), Camp Digital (Manchester), GIDS (Bangalore), ACCU (Oxford) and Jazoon (Zurich). Anyway, here’s the slide deck. Enjoy.</p>
<div style="width: 425px" id="__ss_12849698"><strong style="margin: 12px 0px 4px; display: block"><a title="Agile Anti-Patterns. Yes your agile projects can and will fail too." href="http://www.slideshare.net/aahoogendoorn/agile-antipatterns-yes-your-agile-projects-can-and-will-fail-too" target="_blank">Agile Anti-Patterns. Yes your agile projects can and will fail too.</a></strong> <iframe style="width: 559px; height: 390px" height="355" marginheight="0" src="http://www.slideshare.net/slideshow/embed_code/12849698" frameborder="0" width="425" marginwidth="0" scrolling="no"></iframe>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/thecroaker/death-by-powerpoint" target="_blank">PowerPoint</a> from <a href="http://www.slideshare.net/aahoogendoorn" target="_blank">Sander Hoogendoorn</a> </div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://sanderhoogendoorn.com/blog/?feed=rss2&#038;p=1100</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
