<?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>Gojko Adzic &#187; articles</title>
	<atom:link href="http://gojko.net/category/articles/feed/" rel="self" type="application/rss+xml" />
	<link>http://gojko.net</link>
	<description>Building software that matters</description>
	<lastBuildDate>Tue, 22 May 2012 19:12:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Effect Mapping Handbook (beta): Your feedback wanted</title>
		<link>http://gojko.net/2012/05/22/effect-mapping-handbook-beta-your-feedback-wanted/</link>
		<comments>http://gojko.net/2012/05/22/effect-mapping-handbook-beta-your-feedback-wanted/#comments</comments>
		<pubDate>Tue, 22 May 2012 15:49:27 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[effect-mapping]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2765</guid>
		<description><![CDATA[Here is a beta version of a new book I&#8217;m working on: The Effect Mapping Handbook. Effect Mapping is simple yet incredibly effective collaborative project planning technique, that helps teams align their activities with overall business objectives and make better roadmap decisions. Effect Mapping isn&#8217;t the first or the last...]]></description>
			<content:encoded><![CDATA[<p><img src="http://gojko.net/wp-content/uploads/2012/05/delivering_value-300x300.png" alt="" title="delivering_value" width="300" height="300" class="alignleft size-medium wp-image-2766" /> Here is a beta version of a new book I&#8217;m working on: <a href="http://gojko.s3.amazonaws.com/em_public_20120522.pdf?AWSAccessKeyId=1X67X2N8SN9A2283RSR2&#038;Expires=1346341610&#038;Signature=KqgEGTG/ZWWWrYMiyek1oCyxgSQ%3D">The Effect Mapping Handbook</a>. </p>
<p>Effect Mapping is simple yet incredibly effective collaborative project planning technique, that helps teams align their activities with overall business objectives and make better roadmap decisions. Effect Mapping isn&#8217;t the first or the last solution in its space, but it is important because it fits nicely into several ongoing trends in software product management and release planning, including goal-oriented requirements engineering, frequent iterative delivery from agile, limiting work in progress from lean software methods, build-measure-learn lean-startup style cycles, ideation, co-designing and experimentation from design thinking.  </p>
<p>By helping organisations create better plans and manage their project objectives and road-maps more effectively, Effect Mapping helps to reduce waste, cut costs by preventing scope-creep, provides focus for projects, enhances collaboration and ensures that the right business outcomes are achieved. </p>
<p>The handbook is a reference guide explaining key aspects of Effect Mapping, key steps to take when facilitating Effect Mapping workshops and how this process fits into the wider software delivery pipeline.</p>
<p>This is a beta version &#8211; ugly but most of the content I wanted to put in is there. I&#8217;d love your feedback. You can provide feedback by filling in <a href="http://form.jotformpro.com/form/21424795891968">this form</a>. If you&#8217;re interested in the topic, <a href="https://groups.google.com/group/effect-mapping">join the discussion list</a> as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2012/05/22/effect-mapping-handbook-beta-your-feedback-wanted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redefining software quality</title>
		<link>http://gojko.net/2012/05/08/redefining-software-quality/</link>
		<comments>http://gojko.net/2012/05/08/redefining-software-quality/#comments</comments>
		<pubDate>Tue, 08 May 2012 12:56:30 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[popular]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2734</guid>
		<description><![CDATA[A lot of my consulting work lately has been around helping teams see software quality more holistically &#8211; that it&#8217;s not something only testers (or only developers) should be concerned about. Doing that I&#8217;ve started formulating an idea that isn&#8217;t fully baked yet &#8211; but it helped me explain things...]]></description>
			<content:encoded><![CDATA[<p>A lot of my consulting work lately has been around helping teams see software quality more holistically &#8211; that it&#8217;s not something only testers (or only developers) should be concerned about. Doing that I&#8217;ve started formulating an idea that isn&#8217;t fully baked yet &#8211; but it helped me explain things better &#8211; and I&#8217;d love your comments on this.</p>
<p>A lot of the confusion about software quality is that it means different things to different people, and the best definitions so far are zen-like, eg Weinberg&#8217;s &#8216;value to someone (who matters)&#8217;. They don&#8217;t describe things like technical code quality, which I intuitively know matters but doesn&#8217;t directly provide value. </p>
<p>Laking a holistic definition of quality, teams measure things like bug trends, code coverage etc. What gets measured gets optimised, so we end up overly optimising things beyond the point that it makes sense.  Air and food are a necessity, but more air and food than we need do not really improve the quality of life. Similar to that, technical correctness and performance are necessary but going beyond a certain point gives us diminishing returns. As with any local optimisation, there is a potential that we can hurt the whole pipeline by working on the wrong thing. As I was explaining this comparison to a client, it hit me that it might be worth trying to build a parallel between Abraham Maslow&#8217;s hierarchy of needs and software quality. <span id="more-2734"></span></p>
<p><img src="http://gojko.net/wp-content/uploads/2012/05/maslow_human-300x225.jpg" alt="" title="maslow_human" width="300" height="225" class="alignleft size-medium wp-image-2739" /> The famous Maslow&#8217;s pyramid lists human needs as a stack from physiological &#8211; necessary for basic functions (such as food, water), safety (personal security, health, financial security), love and belonging (friendship, intimacy), esteem (competence, respect) to self-actualisation (fulfilling potential). The premise of the hierarchy of needs is that when a lower level need is lacking, we disregard higher level needs. For example, when a person doesn&#8217;t have enough food, intimacy and respect, food is the most pressing thing. Another premise is that satisfying needs on the lower levels of the pyramid bring diminishing returns after some point. Our quality of life improves by satisfying higher level needs more. Eating more food than I really need brings obesity. More airport security than needed becomes a hassle. The key idea of the pyramid model is that once the basics are satisfied, we should work towards satisfying higher level goals.</p>
<p>Maybe software quality isn&#8217;t as simple as a zen-like sentence, and maybe <a href="http://gojko.net/2011/05/17/bug-statistics-are-a-waste-of-time/">measuring bugs</a> actually does provide some value. Maybe we should stop trying to make it simple and instead model quality on different levels. I tried modelling this with a client &#8211; and this is their particular case &#8211; but it might apply to others as well. </p>
<p><img src="http://gojko.net/wp-content/uploads/2012/05/maslow_sw_1-300x225.png" alt="" title="maslow_sw_1" width="300" height="225" class="alignright size-medium wp-image-2738" />The lowest level of quality are physiological needs &#8211; if these things aren&#8217;t satisfied, software is completely useless. For this particular situation, we identified two things: that the software has to be deployable and it has to satisfy the minimum functionality so that &#8220;it works&#8221;. Activities such as TDD, functional testing (automated + manual), post-deployment testing and similar help us prove that this category of needs is satisfied. Measuring bug counts, code coverage and so on also works on this level. And similar to the human physiological needs, enough is enough and after some point there is no more value to be gained. Newer versions of Microsoft Office have thousands of features that nobody ever uses, because even Word 95 had enough. Investing in more features, developing, testing, maintaining them, is an overkill.</p>
<p><img src="http://gojko.net/wp-content/uploads/2012/05/maslow_sw_2-300x225.png" alt="" title="maslow_sw_2" width="300" height="225" class="alignleft size-medium wp-image-2738" />Once the software &#8220;works&#8221;, the second thing we need from it is to &#8220;work well&#8221;. Looking at parallels between human security needs and what we need from software, this is where a lot of what people typically call non-functionals goes in. Performance, reliability, security etc. Activities such as architectural design and performance optimisations come into this level, and performance testing, penetration analysis, stress tests etc might prove that we have satisfied enough. And similar to human security needs, enough is enough. Recent examples of Apple Itunes store security questions demonstrate that more features than needed in this space piss people off, or waste money. Building a system that can handle millions of concurrent users when in the next year or so we&#8217;ll only have thousands is a horrible waste of time. I lost a lot of my own money on this a few years ago &#8211; we goldplated a system architecturally instead of shipping more stuff that makes money. </p>
<p><img src="http://gojko.net/wp-content/uploads/2012/05/maslow_sw_3-300x225.png" alt="" title="maslow_sw_3" width="300" height="225" class="alignright size-medium wp-image-2738" />Providing the software performs well and is secure enough, the next level above is love and belonging &#8211; and now we cross over to the users of the software. Case in point is Twitter. Famous for its fail whale, twitter&#8217;s second-level qualities are often just good enough, but that hasn&#8217;t stopped them from building a huge community of loyal users. Activities such as user interaction design, graphical design, community engagement and similar support software in fulfilling the needs on the level of love/belonging. Usability testing proves it. Of course, different types of software need different levels of this. In-house admin software requires a lot less love because people are forced to use it. On the other hand, user devotion and interaction can make or break consumer products.</p>
<p>So far this is nothing revolutionary. If I look back at most of my client engagements, these three levels are where most of the investment in specifications, development and testing was, and roughly proportional to the levels as well. Most of the investment goes in building in functionality and testing it. Performance and things like that are sometimes planned for, often reactively built in, and tested less frequently. I rarely worked with teams that were serious about usability and invested a lot of time or money designing for it and testing it. The pyramid model told this concrete client that I worked with that maybe they should start shifting their investments a bit. But the real surprise came out when we started looking at the top two levels.</p>
<p>Usability on its own can be an overkill. No doubt about it. In <a href="http://www.amazon.com/gp/product/0061766089/ref=as_li_ss_tl?ie=UTF8&#038;tag=swingwiki-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0061766089">Change by Design: How Design Thinking Transforms Organizations and Inspires Innovation</a><img src="http://www.assoc-amazon.com/e/ir?t=swingwiki-20&#038;l=as2&#038;o=1&#038;a=0061766089" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />, Tim Brown presents Nokia Ovi as a key success story to showcase design thiking.</p>
<blockquote><p>Barely a year later, Nokia announced Ovi, a new service offering that<br />
could be accessed through any of its multimedia devices. Design<br />
thinking had enabled Nokia not only to explore new possibilities but<br />
also to convince itself that these possibilities were sufficiently<br />
compelling to move away from its strongly entrenched and previously<br />
successful approach. The timing was right. Today Ovi is one of the<br />
operating business divisions of the company, and Nokia &#8211; a technology<br />
leader &#8211; has reinvented itself as a service provider.</p></blockquote>
<p>Oh, the irony. If ever there was a IT equivalent of harakiri, this was it. Nokia &#8211; a technology<br />
leader &#8211; has &#8220;reinvented itself as a service provider&#8221; but nobody wants their service. Don&#8217;t get me wrong, I am not saying that user interaction design is bad, or that design thinking is wrong &#8211; just that it&#8217;s not the end. It is a need to be satisfied, but brings diminishing returns after a point. There are two more levels on the pyramid above it.</p>
<p><img src="http://gojko.net/wp-content/uploads/2012/05/maslow_sw_4-300x225.png" alt="" title="maslow_sw_3" width="300" height="225" class="alignleft size-medium wp-image-2738" />The key thing missing from the Nokia Ovi story is the fulfilment of the potential. Usability marks potential, and if nobody is using it do we care? The level above usability is usefulness. I did a study with a client recently and looking at the log files we determined that roughly 60% of the features aren&#8217;t used enough to justify investment in further maintenance. Maybe instead of investing a lot of money in functional testing we can invest in measuring the usefulness of software? One team I interviewed for<br />
<a href="http://www.amazon.com/gp/product/1617290084/ref=as_li_ss_tl?ie=UTF8&#038;tag=swingwiki-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1617290084">Specification by Example: How Successful Teams Deliver the Right Software</a><img src="http://www.assoc-amazon.com/e/ir?t=swingwiki-20&#038;l=as2&#038;o=1&#038;a=1617290084" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> use automated tests as a target for development, but then disable most tests after they pass the first time. Instead, they protect against problems by delivering in small batches and measuring production use. They define quality more at the fourth level than the first level, which enables them to be much more productive. If the indicators expected by the business users aren&#8217;t there, the feature is taken out. Think of this as a business-bug. </p>
<p><img src="http://gojko.net/wp-content/uploads/2012/05/maslov_sw_5-300x225.png" alt="" title="maslov_sw_5" width="300" height="225" class="alignright size-medium wp-image-2740" /> Finally, the fact that someone uses a feature doesn&#8217;t necessarily mean that the feature was right for the business in the first place. There is one more level above &#8211; corresponding to self-actualisation. Does the software achieve what it was originally intended to? Does it save money, earn money or protect money? Or whatever the key business goals were originally. If not, then it doesn&#8217;t really matter that people use it, that it is usable or performant or that all unit tests pass. This is the space where activities such as  <a href="http://gojko.net/effect-map">Effect Mapping</a> and <a href="http://www.infoq.com/articles/feature-injection-success">Feature Injection</a> come in, along with the ideas of <a href="http://www.amazon.com/gp/product/0307887898/ref=as_li_ss_tl?ie=UTF8&#038;tag=swingwiki-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0307887898">Build-Measure-Learn cycles and Actionable Metrics from The Lean Startup</a><img src="http://www.assoc-amazon.com/e/ir?t=swingwiki-20&#038;l=as2&#038;o=1&#038;a=0307887898" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> to prove them.</p>
<p>The top level is really where &#8220;more is better&#8221;, with perhaps a gradual transition to &#8220;good enough is good enough&#8221; on the two levels below, with the lowest two levels definitely falling into the &#8220;good enough&#8221; category. Yet from what I see most software teams invest, build and test only at the lowest two levels, gold-plating things without a way to explain why that is bad. Breaking things down in a visual model such as the one with the five levels of the pyramid here helped me get one team to start thinking better about what they really want to achieve. Your turn next!</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2012/05/08/redefining-software-quality/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>Splitting user stories: the hamburger method</title>
		<link>http://gojko.net/2012/01/23/splitting-user-stories-the-hamburger-method/</link>
		<comments>http://gojko.net/2012/01/23/splitting-user-stories-the-hamburger-method/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 17:04:16 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[splitting]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2699</guid>
		<description><![CDATA[Problems: Story is too big to split and estimate; business users don&#8217;t accept any breakdown proposed by the delivery team; team is inexperienced and thinks about technical splitting only;new project starts and no simple starting stories can be foundSolution: User Story Hamburger I&#8217;ve evolved a new technique for splitting user...]]></description>
			<content:encoded><![CDATA[<p><img src="http://gojko.net/wp-content/uploads/2012/01/hamdp-300x225.jpg" alt="" title="hamdp" width="300" height="225" class="alignleft size-medium wp-image-2701" /><i>Problems</i>: Story is too big to split and estimate; business users don&#8217;t accept any breakdown proposed by the delivery team; team is inexperienced and thinks about technical splitting only;new project starts and no simple starting stories can be found<br /><i>Solution</i>: User Story Hamburger<br clear="all" /><span id="more-2699"></span></p>
<p>I&#8217;ve evolved a new technique for splitting user stories over the last few months <del>shamelessly stealing</del> repurposing <a href="http://www.agileproductdesign.com/presentations/user_story_mapping/index.html" target="_blank">Jeff Patton&#8217;s User Story Mapping</a> and ideas described by Craig Larman and Bas Vodde in <a href="http://www.amazon.com/gp/product/0321636406/ref=as_li_ss_tl?ie=UTF8&#038;tag=swingwiki-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0321636406" target="_blank">Practices for Scaling Lean &#038; Agile Development</a>. I think it works particularly well in situations where a team cannot find a good way to break things down and is insisting on technical divisions. It has the visual playful aspect similar to innovation games and it&#8217;s easy to remember. I call it the User Story Hamburger. </p>
<p>Inexperienced teams often can&#8217;t get their heads around splitting stories into smaller stories that still deliver business value. But they will happily break a story down into technical workflow or component tasks. I like the idea of User Story Maps which show the big picture under a breakdown of a business workflow. We can do the same on a much lower level, for tasks making up a user story, keeping the team in their comfort zone. Then we use this breakdown to identify different levels of quality for each step, and create vertical slices to identify smaller deliverables. Here is how to create the hamburger:</p>
<h2>Step 1: Identify tasks</h2>
<p><img src="http://gojko.net/wp-content/uploads/2012/01/hamburger_step_1-282x300.png" alt="" title="hamburger_step_1" width="282" height="300" class="alignright size-medium wp-image-2706" />  As a group, identify technical steps that would be involved in implementing a story on a high level. Breaking it down into technical/component workflow is OK. The tasks become layers in a hamburger bun &#8211; meat, lettuce, tomato, cheese &#8211; throw in some bacon for fun as well. </p>
<p>For example, if we&#8217;re working on a story to contact dormant customers by e-mail, the steps might be: query db for dormant customers; send e-mail to customers; retrieve delivery report; remove bounced addresses from the system; mark non-bounced as &#8216;recently contacted&#8217;. </p>
<h2>Step 2: Identify options for tasks</h2>
<p>Split the team into several small groups and ask them to define quality for each task, or what would make a particular task good. Then they should write down several options on different levels of quality on post-it notes. </p>
<p>For example, speed of execution and accuracy of results might be a measure of quality for database query for dormant customers. Two possible options could be to make a slow and relatively inaccurate query on all customers compared with overnight transaction reports, which won&#8217;t pick up intraday changes. Another option to increase accuracy would be to have a nightly job making customers dormant and remove the dormant mark on every transaction, which would enable us to be 100% accurate and faster. The first option would work only if we send e-mails once a month, the second would work at any time.</p>
<p>Another example might be the volume we can send,  the content personalisation and spam-regulation compliance for sending e-mail. We have an option of sending things manually, slow and low-volume. Second option is to use an automated process and send generic e-mails, with a manual unsubscribe process. A third option would be to use an automated process and send personalised e-mails, with manual unsubscribing. The fourth option would be to send personalised e-mail automatically and enable people to unsubscribe automatically. Yet another option would be integrating with a third party service that does all that.</p>
<h2>Step 3: Combine results</h2>
<p>Create a single hamburger on a big board. Ask representatives from each team to bring post-it notes and fill in the layers of your hamburger, briefly introducing what each note it. Identify duplicates and throw them away. Align task options from left to right based on the level of quality.</p>
<p><img src="http://gojko.net/wp-content/uploads/2012/01/hamburger_step_2.png" alt="" title="hamburger_step_2" width="500" class="aligncenter size-medium wp-image-2711" /></p>
<h2>Step 4: Trim the hamburger</h2>
<p>As a group, go through tasks and compare the lowest quality options with things next to them, based on how difficult it would roughly be to implement each option. Mark that information on the post-its. It might be worth breaking things down into relatively same-size technical tasks to do some simple comparisons. Think about throwing away lower quality items that would take more or less the same to implement as a higher quality option.</p>
<p>Also decide what is the maximum needed level of quality for each task. For example, intra-day bounced e-mail removal won&#8217;t really bring much more value than overnight bounced e-mail removal. Take items over the line out &#8211; that&#8217;s what will be left in the box after you eat the hamburger.</p>
<p><img src="http://gojko.net/wp-content/uploads/2012/01/hamburger_step_3.png" alt="" title="hamburger_step_3" width="500" class="aligncenter size-full wp-image-2714" /></p>
<h2>Step 5: Take the first bite</h2>
<p>Now that you have a hamburger, decide how deep you&#8217;ll take the first bite. Discuss what is the minimum acceptable level of quality for each step. For example, manual sending might not be acceptable at all, because of the low volume. But sending e-mail once a month might be acceptable. If the lowest quality option is more-less the same size as the higher quality one, you might go deeper straight away. For example, sending generic e-mail with manual unsubscribing might be more or less the same effort as integrating with Mailchimp. On the other hand, a fast realtime update of customer activity might be much more difficult than  a on-demand slow database query. For some steps, eg removing bounced addresses, doing nothing might be a valid level of quality initially.</p>
<p><img src="http://gojko.net/wp-content/uploads/2012/01/hamburger_step_4.png" alt="" title="hamburger_step_4" width="500"  class="aligncenter size-full wp-image-2715" /></p>
<h2>Step 6: Take another bite&#8230; and continue</h2>
<p>From there on, any further bite should provide more quality, regardless of what you add. Eg implementing initial bounced e-mail removal enhances the quality. So does more frequent e-mail sending. Use complexity comparisons between tasks to decide how deep you want to take further bites.</p>
<p>This method works very nicely because it is visual, and it gets people thinking about alternatives while still staying in their comfort zone. It also works nicely with &#8216;bite-size chunks&#8217; analogies. And you can easily explain why releasing just a technical task doesn&#8217;t make sense because no sane person would eat only the lettuce. On a final note, make sure not to do this while people are hungry.</p>
<p>If this sounds interesting, you can practice many other collaborative techniques for delivering the right software iteratively at <a href="http://sbelondon-hamburger.eventbrite.com"> my upcoming two day workshop in London in mid-March</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2012/01/23/splitting-user-stories-the-hamburger-method/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Feature Injection article is online</title>
		<link>http://gojko.net/2011/12/14/feature-injection-article-is-online/</link>
		<comments>http://gojko.net/2011/12/14/feature-injection-article-is-online/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 18:20:24 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[feature injection]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2688</guid>
		<description><![CDATA[InfoQ just published an article on Feature Injection by Chris Matts that I&#8217;ve also contributed to. This article is a high level introduction of Feature Injection and related techniques. We explain the key elements of the framework and support them with a realistic example. For more info, see click here.]]></description>
			<content:encoded><![CDATA[<p>InfoQ just published an article on Feature Injection by Chris Matts that I&#8217;ve also contributed to. This article is a high level introduction of Feature Injection and related techniques. We explain the key elements of the framework and support them with a realistic example. </p>
<p>For more info, see <a href="http://www.infoq.com/articles/feature-injection-success">click here</a>.  </p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2011/12/14/feature-injection-article-is-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dan North at Oredev: Embrace Uncertainty</title>
		<link>http://gojko.net/2011/11/10/dan-north-at-oredev-embrace-uncertainty/</link>
		<comments>http://gojko.net/2011/11/10/dan-north-at-oredev-embrace-uncertainty/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 13:51:28 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[oredev]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2660</guid>
		<description><![CDATA[As usual, Dan North did a fantastic keynote today at Oredev. Amazon should really start paying his salary &#8212; I ended up buying several books while he was still talking. North&#8217;s central idea was that patterns for effective software delivery derive from embracing uncertainty and that the delivery landscape changes...]]></description>
			<content:encoded><![CDATA[<p><img src="http://gojko.net/wp-content/uploads/2011/11/uncertainty-300x225.png" alt="" title="uncertainty" width="300" height="225" class="alignleft size-medium wp-image-2661" />As usual, <a href="http://dannorth.net/"  target="_blank" >Dan North</a> did a fantastic keynote today at Oredev. Amazon should really start paying his salary &mdash; I ended up buying several books while he was still talking. North&#8217;s central idea was that patterns for effective software delivery derive from embracing uncertainty and that the delivery landscape changes significantly once we understand that. <span id="more-2660"></span></p>
<p>North started by repeating the key ideas from his Oredev 2007 keynote, &ldquo;Fear leads to risk, risk leads to process, process leads to hate… and suffering and Gantt charts&rdquo;. Many elements of delivery processes in organisations are there to address risks because people are afraid of uncertainty.  &ldquo;We are terrified of uncertainty &#8211; we would rather be wrong than uncertain,&rdquo; said North. Many of this process elements are wasteful and counter-productive, because uncertainty is a fact of life and more structure in a process does not address that properly. As an example, North mentioned the pointlessness of rigour in requirements and long term planning, citing a <a target="_blank" href="http://www.infoq.com/articles/the-curse-of-the-change-control-mechanism">recent research</a> which states that requirements have a half-life of only a few months today (the time it takes for half of the written requirements to become obsolete).</p>
<p>Dealing with uncertainty is at the core of the ideas promoted by the agile manifesto, but according to North that was widely misunderstood and many teams focused on practices expecting them to eliminate uncertainty. The original <a target="_blank"  href="http://www.amazon.com/gp/product/0321278658/ref=as_li_ss_tl?ie=UTF8&#038;tag=swingwiki-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399369&#038;creativeASIN=0321278658">XP book</a> has a tag line <i>Embrace Change</i>, which suggests that people should prepare for change but teams tried to predict where the change will happen and plan for it. According to North, uncertainty isn&#8217;t just about expecting change, it&#8217;s assuming that some unexpected bad things will happen during the project and that we can&#8217;t even know about them when we start. We can&#8217;t plan for them &mdash; if we could they wouldn&#8217;t be unexpected. &ldquo;Embrace change was wrongly named…,&rdquo; said North, &ldquo;your ability to survive is directly related to handling the unexpected. Embrace uncertainty; expect the unexpectable and anticipate ignorance.&rdquo;</p>
<p>As a potential technique to deal with uncertainty, he suggested <a href="http://dannorth.net/2010/08/30/introducing-deliberate-discovery/"  target="_blank" >Deliberate Discovery</a>: if we know that some unexpected bad things will happen, we can optimise the delivery process for discovery instead of optimise it for structure. &ldquo;The premise is assuming this will happen, what would you do differently?&rdquo; asked North, adding that &ldquo;we can actively reduce ignorance &#8211; instead of saying &lsquo;I want to do estimation&rsquo;, get people in the room and do stuff that is likely to produce the learning.&rdquo;</p>
<p>He called the strategy double-loop learning &mdash; not just aim to improve the process, but learn to improve how we improve the delivery process.</p>
<p>He also suggested <a target="_blank" href="http://www.jrothman.com/Papers/rolling-wave-planning.html">rolling wave planning</a> as a way to embrace uncertainty of scope: &ldquo;Get started and get data.&rdquo;</p>
<p>For embracing uncertainty of technology, he suggested not splitting the deliverables in spikes and features any more and imposing rigour in testing and delivery on features. He said: &ldquo;For features we have certain rules. spikes are hacks to learn and promise to throw the code away. what if you didn&#8217;t choose? what if i&#8217;m always going to start code by sketching. When it stats taking shape, stabilise it, make it testable, introduce rigour.&rdquo; </p>
<p>For embracing the uncertainty of effort, he suggested investigating <a target="_blank"   href="http://www.amazon.com/gp/product/1578518660/ref=as_li_ss_tl?ie=UTF8&#038;tag=swingwiki-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399369&#038;creativeASIN=1578518660">Beyond Budgeting</a>, summarising it as &ldquo;Measure stuff, spend money as if it&#8217;s your own.&rdquo;</p>
<p>For embracing uncertainty of structure, North suggested using <a target="_blank"   href="http://www.infoq.com/articles/real-options-enhance-agility">Real Options</a>. He said: &ldquo;Structure is an illusion of control, you can&#8217;t predict the future, so you can relax a bit. Use options, which have value and expire, commit deliberately and never commit early unless you know why.&rdquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2011/11/10/dan-north-at-oredev-embrace-uncertainty/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

