<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xebia Blog &#187; Serge Beaumont</title>
	<atom:link href="http://blog.xebia.com/author/sbeaumont/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 01 Feb 2012 00:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Dealing with emergencies in Agile teams</title>
		<link>http://blog.xebia.com/2011/02/28/dealing-with-emergencies-in-agile-teams/</link>
		<comments>http://blog.xebia.com/2011/02/28/dealing-with-emergencies-in-agile-teams/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 08:49:01 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[emergencies]]></category>

	<!-- AutoMeta Start -->
	<category>emergencies</category>
	<category>buffer</category>
	<category>emergency</category>
	<category>triage</category>
	<category>absorb</category>
	<category>emergencies</category>
	<category>buffer</category>
	<category>emergency</category>
	<category>triage</category>
	<category>absorb</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=6220</guid>
		<description><![CDATA[Every Agile team has to deal with whatever they&#8217;ve put out in the wild next to their &#8220;regular&#8221; work. How to handle the &#8211; by definition &#8211; unknown load of production emergencies when you&#8217;re trying to achieve a stable pace? You can deal with emergencies by performing triage to either reject, defer or accept. You [...]]]></description>
			<content:encoded><![CDATA[<p>Every Agile team has to deal with whatever they&#8217;ve put out in the wild next to their &#8220;regular&#8221; work. How to handle the &#8211; by definition &#8211; unknown load of production emergencies when you&#8217;re trying to achieve a stable pace? You can deal with emergencies by performing triage to either reject, defer or accept. You can set up a buffer to absorb some of the uncertainty, and finally you should make sure that you take the time to reduce the number of emergencies by building quality in. If you find you are mostly doing maintenance, you can consider doing Kanban.<br />
<span id="more-6220"></span></p>
<h3>The Context</h3>
<p>In ye olden days of waterfall projects I never had to deal with that horror of horrors, <em>maintenance</em>. I&#8217;d be part of a team building something new, and you could keep going on until the end of the project. It was the maintenance department that would have to deal with the nonsense I had created. Ah, those were the days&#8230; all the fun without the hangover afterwards <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>But Agile teams, or in fact any team that starts delivering early and often (in my later waterfall days I&#8217;d already started to figure out that maintenance pretty much starts after the first two weeks&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) deliver long before it&#8217;s even possible to hand the project over &#8211; if at all. The nature of frequent delivery means that the team has to deal with all issues that arise themselves. The first reason is because they are the ones who can do it, the second is that you want to integrate fixes into the team&#8217;s work anyway: they still need to deliver new versions of that same software&#8230;</p>
<p>In my consultancy work I&#8217;ve seen this issue come up with <em>every single Agile team</em> I&#8217;ve known, so this is not a unique situation for a small number of teams. <em>All</em> Agile teams have learn how to deal with this issue!</p>
<h3>The Problem</h3>
<p><img src="http://blog.xebia.com/wp-content/uploads/2011/02/Scrum-AaarghEmergency.jpeg" alt="People running in with emergencies" title="Scrum-AaarghEmergency" width="571" height="200" class="aligncenter size-full wp-image-6224" /></p>
<p>In a Scrum team, the problem will generally surface after one or more Sprints where a number of &#8220;production incidents&#8221; or similar unplanned mayhem took up so much of the team&#8217;s time that they did not achieve their planned Sprint goal. The result is that a team has a hard time planning for the next Sprints. The first problem is that they do not know their &#8220;real&#8221; Velocity, the second is that they have to somehow factor in the &#8211; by definition unpredictable &#8211; production incidents.
	</p>
<p>But watch out, there is a pitfall hidden in the above paragraph. <em>Predictability is not the end goal in Agile!</em> Predictability is important to know when a release is shipped, and to know how to pace the team. But I&#8217;ve seen too many cases where teams try to &#8220;predict harder&#8221; when they should be <em>adapting better</em>. When dealing with the unpredictable, the focus should be on adaptation first, not on more planning beforehand. That would be a return to The Way Of The Waterfall&#8230;</p>
<h3>The Goal</h3>
<p>So there we have it: the goal is <em>to be able to absorb a reasonable amount of uncertainty</em>, striking a balance between robustness and speed.</p>
<h3>The Solutions</h3>
<p>Before I present some solutions, let me state this right away: if the amount work of unplanned production incidents is significant compared to the &#8220;regular&#8221; work, there is no way you can achieve sufficient stability. You&#8217;ll need to fix the root causes of all those production issues first. More on that later.
	</p>
<h3>Solution 1: Perform Triage &#8211; and Reject</h3>
<p>	<img src="http://blog.xebia.com/wp-content/uploads/2011/02/Scrum-DealingWithIncidents-1.jpeg" alt="" title="Scrum-DealingWithIncidents 1" width="170" height="150" class="aligncenter size-full wp-image-6225" /></p>
<p>The first thing to check is if you want to fix that production issue at all. This is not as silly as it might seem at first. There are so many cases where a production emergency is not an emergency at all, and should not even have been brought in in the first place! Some examples of &#8220;noncidents&#8221;:</p>
<ul>
<li>Sales storms in with &#8220;the deal of the century&#8221;: &#8220;If we get feature X in NOW, we can win over customer X!&#8221;. In my experience this is always due to an uneducated and undisciplined Sales department. The root cause here is that Sales promised things they shouldn&#8217;t have, and they need to save their own skin now. It is ALWAYS possible to wait two weeks for a new feature.</li>
<li>Some stakeholders &#8220;upgrade&#8221; normal requests to production emergencies in an attempt to bypass the negotiations around the backlog. &#8220;It&#8217;s a blocking issue that I can&#8217;t get that feature!&#8221;. &#8220;Oh? Did the system crash? Is something not working?&#8221;. &#8220;Well&#8230; no, but it&#8217;s a real blocker for my work!&#8221;. That stakeholder may have a genuine need, but that does not make it a production emergency.</li>
</ul>
<p>So solution 1 is: <strong>a strong Product Owner who performs triage on all production issues</strong>. If it&#8217;s a real production issue then by all means fix it. But I can guarantee that you&#8217;ll find a good number of issues that should not be emergencies at all&#8230; <em>BTW, a Product Owner performing triage in this way is what James Coplien calls a Firewall in his organizational patterns book.</em></p>
<h3>Solution 2: Perform Triage &#8211; and Defer the fix until at least the next Sprint</h3>
<p>	<img src="http://blog.xebia.com/wp-content/uploads/2011/02/Scrum-DealingWithIncidents-3.jpeg" alt="" title="Scrum-DealingWithIncidents 3" width="181" height="150" class="aligncenter size-full wp-image-6227" /></p>
<p>&#8220;We found this really big problem! We need it fixed right now!&#8221;. &#8220;Sure, we&#8217;ll get right on it. How long has this issue been in the system?&#8221;. &#8220;Well, for over a year, but we just found out about it!&#8221;. &#8220;It&#8217;s been in there for a year? &#8230;And you can&#8217;t wait two more weeks for a fix?&#8221;</p>
<p>Solution 2 is an extension of Solution 1. An emergency might indeed be important to fix, but there&#8217;s an important criterion to an emergency: <strong>it&#8217;s only an emergency if it must be fixed in the current Sprint</strong>. If you can defer the problem to next Sprint, <em>there is no problem</em>! The team can pick it up as part of their regular process, plan it, build it, and deliver at the end of next Sprint. Again this is a Product Owner responsibility: next to the decision to reject, a good Product Owner will make sure that everything that can be deferred will be.</p>
<h3>Solution 3: Reserve a buffer to deal with unexpected issues</h3>
<p><img src="http://blog.xebia.com/wp-content/uploads/2011/02/Scrum-DealingWithIncidents.jpeg" alt="" title="Scrum-DealingWithIncidents" width="235" height="150" class="alignright size-full wp-image-6230" /></p>
<p>If you&#8217;ve done Solutions 1 and 2, whatever you&#8217;re left with should be real issues that you have to fix as soon as possible. The best way I know to deal with this is to <strong>reserve a buffer of time or story points that is left unplanned</strong>. This works especially well if the historical workload of any issues coming up is reasonably stable. You do not know what you&#8217;ll be doing, but you know how much effort it will take.</p>
<p>Watch out though, using a buffer can blow up in your face! The first danger is the size of the buffer. If the buffer is a significant percentage of the Sprint, say more that 1/5 of your velocity, then you&#8217;ll end up with a big hole in your planning process. So follow <em>Buffer Rule 1: the buffer is not for backlog items</em>. Try to keep the buffer as small as possible.</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2011/02/Scrum-DealingWithIncidents-2.jpeg" alt="" title="Scrum-DealingWithIncidents 2" width="176" height="150" class="alignright size-full wp-image-6226" /></p>
<p>The second danger with using buffers is what I already discussed in Solution 1: the moment your stakeholder smell a workaround in the regular process, you can be sure they&#8217;ll dive onto it. A buffer really, really needs to be protected from unintended use. So perform good triage!</p>
<p>The third danger is buffer overflow. Just like in a computer this leads to blowing up the process. If the buffer is used, you&#8217;ll need to track how much of the buffer has been used, otherwise you&#8217;ll be in for a surprise at the end of the Sprint.</p>
<h3>Solution 4: Fix root causes, improve quality</h3>
<p>This solution is presented as number 4 because the first three are in logical order when you&#8217;re trying to control the damage, but in the end you&#8217;ll want to do the most important thing of all: <strong>fix issues so they stay fixed, build in quality so that you don&#8217;t have emergencies at all!</strong>. Now this is something we should be doing anyway, and is not unique for Agile projects: you want to do this in any project! But there is an extra Buffer Rule that is relevant in this respect (Credit goes to Jeff Sutherland on this one, I learned this rule when we do CSM trainings). <em>Buffer Rule 2: If you overflow the buffer, abort the Sprint</em>. If you have such issues that you can not even keep emergency work limited to a small buffer, you have no business trying to make progress building in features. Abort, use the Sprint to fix underlying root causes, and try again next Sprint. Coincidentally, Buffer Rule 2 also works wonders for all those stakeholders trying to &#8220;upgrade&#8221; their own agenda: &#8220;do you really want that issue fixed now? The team estimates that this is two points of work, and this would overflow the buffer. We would have to abort the Sprint, and you also would not get those other user stories you asked for! Oh&#8230; um. Well, I guess it isn&#8217;t <em>that</em> much of a problem&#8230;&#8221; (And it wasn&#8217;t&#8230; Real story!).</p>
<h3>Extra: Size the team right</h3>
<p><img src="http://blog.xebia.com/wp-content/uploads/2011/02/Scrum-DealingWithIncidents-5.jpeg" alt="" title="Scrum-DealingWithIncidents 5" width="173" height="150" class="aligncenter size-full wp-image-6229" /></p>
<p>Team size is not a central focus in dealing with emergencies, but it is a factor to be aware of. A small team performs better because it has less overhead, but it is less robust against losing members. A small team is less robust against things like illness or something that pulls a team member away like&#8230; production emergencies maybe?. On a 10 person team losing one person &#8220;only&#8221; means a hit of about 10% in productivity (this is a simplified calculation of course, this assumes all team members are totally replaceable on a moments notice), in a three person team losing that same person would already mean a whopping 33%! The sweet spot tends to be around 7-9 people. Small enough to reduce overhead, large enough to absorb some production loss.</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2011/02/Scrum-DealingWithIncidents-4.jpeg" alt="" title="Scrum-DealingWithIncidents 4" width="335" height="150" class="aligncenter size-full wp-image-6228" /></p>
<h3>And finally&#8230; consider using Kanban instead of Scrum</h3>
<p>If you find that your team is doing more maintenance than &#8220;new stuff&#8221;, you might consider using Kanban instead. This is because the granularity of Kanban is stories, not Sprints. If there is a production emengency the is already an intrinsic shorter wait for it to be picked up because of this. Kanban is about flow, while Scrum is about iterations. The two styles are close enough that I&#8217;ve seen a Scrum team transition into &#8220;flow mode&#8221; when they scaled down and only did maintenance, and went back to Scrum when a new release was planned, and they scaled up again.</p>
<h3>In Conclusion</h3>
<p>Every Agile team has to deal with whatever they&#8217;ve put out in the wild next to their &#8220;regular&#8221; work. You can deal with emergencies by performing triage to either reject, defer or accept. You can set up a buffer to absorb some of the uncertainty, and finally you should make sure that you take the time to reduce the number of emergencies by building quality in. If you find you are mostly doing maintenance, you can consider doing Kanban.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/02/28/dealing-with-emergencies-in-agile-teams/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F02%2F28%2Fdealing-with-emergencies-in-agile-teams%2F&amp;title=Dealing%20with%20emergencies%20in%20Agile%20teams" id="wpa2a_2"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/02/28/dealing-with-emergencies-in-agile-teams/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Fixing the Cause-Effect Trap in User Stories</title>
		<link>http://blog.xebia.com/2010/04/01/fixing-the-cause-effect-trap-in-user-stories/</link>
		<comments>http://blog.xebia.com/2010/04/01/fixing-the-cause-effect-trap-in-user-stories/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 02:05:27 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[ACT]]></category>
		<category><![CDATA[user stories]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=4346</guid>
		<description><![CDATA[If you write user stories, it is very likely that you have been using the &#8220;As a&#8230; I want&#8230; So That&#8230;&#8221; stanza. What you might also have found is that it is hard to fill the &#8220;So That&#8221; clause with something that makes sense. &#8220;As A User I Want a button So That I can [...]]]></description>
			<content:encoded><![CDATA[<p><em>If you write user stories, it is very likely that you have been using the &#8220;As a&#8230; I want&#8230; So That&#8230;&#8221; stanza. What you might also have found is that it is hard to fill the &#8220;So That&#8221; clause with something that makes sense. &#8220;As A User I Want a button So That I can go to the next screen&#8221;&#8230; that is pretty naff, isn&#8217;t it? So how do you fix it? <strong>Ask &#8220;Why&#8221; several times!</strong></em><br />
<span id="more-4346"></span><br />
The &#8220;As A&#8230; I Want&#8230; So That&#8230;&#8221; user story stanza is a very nice tool. It helps you put a lot of information in a very compact form, which is great for summarizing a user story, for instance as a descriptive one-line title in an electronic tool. But there is a trap in this stanza that I have seen just about everyone struggle with when using it, leading to all kinds of suggestions, mainly by changing the stanza around (&#8220;In Order To&#8230; As A&#8230; I Want&#8230;&#8221;). But those suggestions don&#8217;t fix the root cause of the problem. Let&#8217;s start with identifying the real problem.</p>
<h3>The real problem: the Cause-Effect Trap</h3>
<p>In the &#8220;As A&#8230; I Want&#8230; So That&#8230;&#8221; stanza you answer the questions &#8220;Who?&#8221;, &#8220;What?&#8221; and &#8220;Why?&#8221; respectively. So our button example becomes:</p>
<blockquote><ul>
<li>Who wants it? The User.</li>
<li>What does he want? He wants a button.</li>
<li><strong>Why</strong> does he want it? He wants to go to the next screen.</li>
</ul>
</blockquote>
<p>The &#8220;Why?&#8221; question is the interesting one here. The answer &#8220;he wants to go to the next screen&#8221; is a perfectly valid answer, but the problem is that this is not something that makes sense as business value, which is what you would like to have in the &#8220;So That&#8221; clause. What happened is that <strong>with this first &#8220;Why?&#8221; you have only stated a cause-effect relationship</strong>: when you press the button (cause) you go to the next screen (effect). This is what I call the Cause-Effect Trap.</p>
<h3>How do we fix the Cause-Effect Trap?</h3>
<p>The trick to fixing the Cause-Effect Trap is to realize that <strong>there is a chain of Why&#8217;s that you need to answer before you get to the right level</strong>. The first &#8220;Why?&#8221; you ask in the &#8220;So That&#8221; clause is just that, only the first in a chain. Let&#8217;s fix our user story.</p>
<p>The first thing we see is that that the answer to &#8220;Why?&#8221; is a &#8220;What&#8221; in its own right, but at a higher level. So the first fix is to <strong>move the &#8220;So That&#8221; clause to the &#8220;I Want&#8221; clause, and answer the next &#8220;Why?&#8221;</strong> in the &#8220;So That&#8221; clause.</p>
<p><em><strong>As A</strong> User <strong>I Want</strong> to go to the next screen <strong>So That</strong> I can shortcut from screen 1 to screen 9</em></p>
<p>Hmm, a shortcut? Why, I wonder? Let&#8217;s do the fix again:</p>
<p><em><strong>As A</strong> User <strong>I Want</strong> to shortcut from screen 1 to screen 9 <strong>So That</strong> I can save time on 90% of the cases in the screen workflow</em></p>
<p>Ah, so apparently screens 2 to 8 aren&#8217;t needed in 90% of the cases, and this saves time. Why, I wonder? (See the pattern? <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p><em><strong>As A</strong> User <strong>I Want</strong> to save time in 90% of the cases in the screen workflow <strong>So That</strong> I can improve handling time in my helpdesk</em></p>
<p>Ah, so there is someone who wants to improve a business process. Apparently it takes a long time to plough through screens 2 to 8 while it isn&#8217;t needed&#8230; Now, that sounds more like business value! But now the &#8220;As A&#8221; clause does not feel right. Who wants this business value? Who is being referred to in &#8220;my helpdesk&#8221;?</p>
<p><em><strong>As A</strong> Helpdesk Manager <strong>I want</strong> to save time in 90% of the cases in the screen workflow <strong>So That</strong> I can improve handling time in my helpdesk</em></p>
<p>Now that looks better. Let&#8217;s take this back to the team&#8230; They will likely respond with: &#8220;save time in 90% of the cases? That&#8217;s too vague for us. Can you be more specific?&#8221;. Okay, let&#8217;s backtrack down the Why Chain to something more concrete.</p>
<p><em><strong>As A</strong> Helpdesk Manager <strong>I Want</strong> to shortcut from screen 1 to screen 9 <strong>So That</strong> I can improve handling time in my helpdesk</em></p>
<p>And there we have it: a fixed user story!</p>
<h3>What have we learned?</h3>
<p><strong>Lesson 1</strong>: You can fix a user story by <strong>going through the Why Chain</strong>, replacing &#8220;I Want&#8221; with &#8220;So That&#8221; as you go along. (In effect you&#8217;ve made the stanza go: As A&#8230; I Want&#8230; So That&#8230; So That&#8230; So That&#8230; So That&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p><strong>Lesson 2</strong>: The &#8220;As A&#8221; clause is more closely related to the &#8220;So That&#8221; than the &#8220;I Want&#8221;. This is logical, since <strong>a stakeholder is not interested in features, but in the business value that feature provides</strong>. A feature is just a means to an end.</p>
<p><strong>Lesson 3</strong>: Put the highest statement in the &#8220;I Want&#8221; clause where you&#8217;re still making a statement about the product. An extra &#8211; and huge! &#8211; advantage is that <strong>you will have considerably widened the solution space for the team, enabling the team to come up with better solutions</strong>: there are a lot more options in &#8220;providing a shortcut&#8221; than there are in &#8220;a button&#8221;. Square button or round? Green or Red?</p>
<p><strong>Lesson 4</strong>: Look at that that &#8220;improve handling time&#8221; bit&#8230; Wait! Could it be true? Do we actually have a basis for <strong>measurable business value</strong>? So That I can improve the average handling time <strong>by 20% (current: 5 minutes 20 seconds)</strong>. That would be a great to help the Product Owner prioritize!</p>
<h3>Serge&#8217;s Three Step Process For Fixing User Stories</h3>
<p>So here&#8217;s my <strong>3-step, fail-safe, make-you-a-millionaire-in-a-week plan to fix user stories</strong> <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> :</p>
<blockquote>
<ol>
<li>Use the Why Chain: Ask &#8220;Why?&#8221; until you&#8217;re talking business. Put that in the &#8220;So That&#8221; clause.</li>
<li>Fix the &#8220;As A&#8221; clause to reflect the correct stakeholder.</li>
<li>Fill the &#8220;I Want&#8221; with the highest level statement that says something about the product.</li>
</ol>
</blockquote>
<p>&#8230;and there you go. Killer user stories are yours! Happy fixing!</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/04/01/fixing-the-cause-effect-trap-in-user-stories/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F04%2F01%2Ffixing-the-cause-effect-trap-in-user-stories%2F&amp;title=Fixing%20the%20Cause-Effect%20Trap%20in%20User%20Stories" id="wpa2a_4"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/04/01/fixing-the-cause-effect-trap-in-user-stories/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8220;Committing&#8221; to a Sprint and failing is a GOOD thing!</title>
		<link>http://blog.xebia.com/2010/03/24/commiting-to-a-sprint-and-failing-is-a-good-thing/</link>
		<comments>http://blog.xebia.com/2010/03/24/commiting-to-a-sprint-and-failing-is-a-good-thing/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 15:49:17 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[commitment]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=4269</guid>
		<description><![CDATA[What does it mean when a Scrum team &#8220;commits to a Sprint&#8221;? There is a subtlety in the English language that leads to misinterpretation and misuse of the verb &#8220;to commit&#8221;. I have seen too many cases where a team is held accountable (&#8220;bad team, bad!&#8221;) because they did not achieve their Sprint goal in [...]]]></description>
			<content:encoded><![CDATA[<p>What does it mean when a Scrum team &#8220;commits to a Sprint&#8221;? There is a subtlety in the English language that leads to misinterpretation and misuse of the verb &#8220;to commit&#8221;. I have seen too many cases where a team is held accountable (&#8220;bad team, bad!&#8221;) because they did not achieve their Sprint goal in some way. And it will be accompanied by the accusation: &#8220;&#8230;but you <em>committed</em> to the Sprint, didn&#8217;t you?&#8221;. As a coach, this is the moment I step in to explain what &#8220;to commit&#8221; really means, and that you <em>want</em> to fail every now and then: succeeding every time is a failure mode all of its own.<br />
<span id="more-4269"></span></p>
<h3>The meaning of &#8220;to commit&#8221;</h3>
<p>The Apple Thesaurus gives five meanings to the verb &#8220;to commit&#8221;:</p>
<blockquote><p>
<strong>commit</strong><br />
<em>verb</em></p>
<ol>
<li>he <em>committed</em> a murder: CARRY OUT, do, perpetrate, engage in, enact, execute, effect, accomplish; be responsible for; (informal) pull off.</li>
<li>she was <em>committed</em> to their care: ENTRUST, consign, assign, deliver, give, hand over, relinquish; formal commend.</li>
<li>they <em>committed</em> themselves to the project: PLEDGE, devote, apply, give, dedicate.</li>
<li>the judge <em>committed</em> him to prison: CONSIGN, send, deliver, confine.</li>
<li>her husband had her <em>committed</em>: HOSPITALIZE, confine, institutionalize, put away; certify.</li>
</ol>
</blockquote>
<p>See all the different nuances in that one word? <strong>The different interpretations are what trip us up</strong>. Certainly, one of the meanings is &#8220;to pledge&#8221;, which is the one that is referred to when a team is held accountable, but what about &#8220;committing&#8221; a transaction in a database? Did the database just solemnly pledge to keep your data? No, that meaning is similar to the expression &#8220;committing something to memory&#8221;, closer to the &#8220;carry out&#8221; or &#8220;entrust&#8221; meaning of the word.</p>
<p>Another meaning of &#8220;to commit&#8221;, or specifically &#8220;committed&#8221; (thanks to Erik Gibson for helping clarify this one) is when you&#8217;re at a <strong>point of no return</strong>. For instance, when you&#8217;re running and you want to jump over a chair there is a point before which you can still slow down and stop before the chair, and after which your momentum forces you to carry on with the jump or else crash into that chair. At that point you are committed.</p>
<h3>Commit <em>what</em> to <em>whom</em>?</h3>
<p>In our context, the first true meaning of &#8220;to commit&#8221; is about <strong>fixing the scope of a Sprint</strong>. During Sprint Planning I the Scrum Team and the Product Owner select (or more formally: negotiate) the scope of the next Sprint. Since that scope should not change during the Sprint you&#8217;re at a point of no return here. The moment of commitment fixes the scope for that Sprint, just like in a database transaction. Note that this is a commitment that applies to everyone: nobody should change the scope from that point onwards, whether they are Team members, Product Owners, managers, or stakeholders. <em>Everybody</em> is committed.</p>
<p>The second true meaning of &#8220;to commit&#8221; is that the team pledges to <strong><em>each other</em></strong> that they will strive to reach the goal. Self-organization is one of the cornerstones of an Agile team, and self-organization builds on intrinsic motivation (or self-motivation). When team members commit, they are saying that they are intrinsically motivated to self-organize and contribute to the team. They commit primarily to the <em>team process</em>, not the <em>result</em>.</p>
<h3>Commitment, confidence and the Fist of Five</h3>
<p>Team members may not commit (in the &#8220;team pledge&#8221; sense) because there is something wrong with the team dynamics, or because that team member has some personal issue. Although important to look out for, I&#8217;ll not discuss it here: that is something for a soft-skills post. The other main reason &#8211; which I will discuss &#8211; deals with confidence. <strong>An unattainable goal kills intrinsic motivation</strong>, so it is important to know if a team thinks they have a reasonable chance to reach the Sprint goal. Ambitious is fine, unobtainable is not.</p>
<p>So how do you find out if a team has the necessary confidence to commit (in the &#8220;team pledge&#8221; sense)? A nice and easy tool is the Fist of Five. Before the chosen scope is fixed, the team is asked to <strong>&#8220;do a Fist of Five&#8221;</strong> if they think the Sprint goal can be achieved. Every team member then holds up a number of fingers corresponding to their <strong>confidence level</strong>:</p>
<blockquote>
<ul>
<li><em>1 finger</em>: Not a snowball&#8217;s chance in hell!</li>
<li><em>2 fingers</em>: I don&#8217;t think it&#8217;s possible&#8230;</li>
<li><em>3 fingers</em>: There&#8217;s a 50/50 chance that we&#8217;ll make it.</li>
<li><em>4 fingers</em>: We have a reasonable chance of making it (80%).</li>
<li><em>5 fingers</em>: It&#8217;s a sure thing!</li>
</ul>
</blockquote>
<p>When you see only 1&#8242;s and 2&#8242;s, you can be pretty sure that the team will emotionally detach: they don&#8217;t believe it can be done. When you see mostly 4&#8242;s, you&#8217;re in a very good position.</p>
<p>But&#8230; should you be going for mostly 5&#8242;s, all the time? Doesn&#8217;t that mean top-confidence, and a super-super team? Maybe, but it&#8217;s not the best place to be: which leads into my final point, the value of potential failure.</p>
<h3>Failure is <em>good</em></h3>
<p>If you&#8217;ve been around me for any stretch of time, you are almost certain to have heard a mantra I constantly repeat: <strong>Agile does not solve your problems, it just makes them painfully clear</strong>. The Scrum framework&#8217;s most important &#8211; nay, main &#8211; goal is to surface problems, impediments, waste and other forms of organizational insanity, so that you have targets for improvement. Jeff Sutherland talks about &#8220;hyper-productivity&#8221; a lot, but this is one term on which I don&#8217;t agree with him. I&#8217;m in the Lean camp on this one. We&#8217;re mostly in a state of <strong>hyper-improductivity</strong>, and what Jeff calls &#8220;the hyper-productive state&#8221; is what I consider the normal state, after removing all the waste that blocks our natural capability for greatness (cue dramatic tear and handkerchief).</p>
<p>From my viewpoint <strong>you want to put just enough pressure on the system to induce controlled failure</strong>. Controlled failure means that you don&#8217;t fail a Sprint outright, but for instance that you fail to achieve &#8220;Done&#8221; on one user story of the five the team committed to at the beginning of the Sprint. Those failures lead to improvements of all kinds: in the product, the process, the team, the organization&#8230; And that is why I think all 5&#8242;s, and never failing a Sprint is a bad thing. <strong>If you can&#8217;t fail, you can&#8217;t learn</strong>, it&#8217;s that simple.</p>
<h3>Conclusion</h3>
<p>The word &#8220;commitment&#8221; is a word that is used incorrectly in many cases. It is not about accountability and holding a team in judgement after a Sprint. Commitment is about fixing scope, and a pledge team members make to each other to support self-organization. Finally, the use of commitment should not lead to &#8220;a sure thing&#8221;, because otherwise you&#8217;ll never achieve the greatest gift Scrum can give you: the chance to learn.</p>
<p>May all your days be filled with failure! <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/03/24/commiting-to-a-sprint-and-failing-is-a-good-thing/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F03%2F24%2Fcommiting-to-a-sprint-and-failing-is-a-good-thing%2F&amp;title=%26%238220%3BCommitting%26%238221%3B%20to%20a%20Sprint%20and%20failing%20is%20a%20GOOD%20thing%21" id="wpa2a_6"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/03/24/commiting-to-a-sprint-and-failing-is-a-good-thing/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>The READY Kanban: the Product Owners&#8217; Scrum Board</title>
		<link>http://blog.xebia.com/2009/09/12/the-ready-kanban-the-product-owners-scrum-board/</link>
		<comments>http://blog.xebia.com/2009/09/12/the-ready-kanban-the-product-owners-scrum-board/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 23:24:14 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[product owner]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=2488</guid>
		<description><![CDATA[In my previous posts about the definition of READY and Flow to Ready, Iterate to Done I have tried to shed some light on the Big Black Hole of Scrum: the Product Owner. This is number three in the series. In my previous blog post I presented the stages that a backlog item flows through [...]]]></description>
			<content:encoded><![CDATA[<p><em>In my previous posts about <a href="http://blog.xebia.com/2009/06/19/the-definition-of-ready/">the definition of READY</a> and <a href="http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done/">Flow to Ready, Iterate to Done</a> I have tried to shed some light on the Big Black Hole of Scrum: the Product Owner. This is number three in the series.</em></p>
<p>In <a href="http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done/">my previous blog post</a> I presented the stages that a backlog item flows through before it gets to <a href="ttp://blog.xebia.com/2009/06/19/the-definition-of-ready/">Ready</a>. But those were the ideas behind it: in this blog post I&#8217;ll show how I&#8217;ve implemented them in practice. I&#8217;ll show you two interesting examples.</p>
<p><span id="more-2488"></span></p>
<p><strong>The basic Ready Kanban has three columns: New, Preparing and Ready</strong> (see the explanation in the <a href="http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done/">previous post of the series</a>). You <strong>can add the fourth &#8220;In Sprint&#8221;</strong> if you want to show what&#8217;s currently in the Sprint, but that&#8217;s only really needed if it&#8217;s not hanging close to the Scrum Board: otherwise the Scrum Board effectively functions as the In Sprint column. It&#8217;s good to have<strong> a visual cue in the Preparing column to show the limit on work in progress</strong>, like a fixed number of slots for user story cards.</p>
<h3>Rob&#8217;s READY Kanban</h3>
<p>This board was created by Rob Buster, one of the Product Owners at bol.com. As you can see his board has four columns since this board is hanging close to his desk, which is on a different floor from the team floor.</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/09/IMG_0772-284x300.jpg" alt="Ready Kanban 1" title="Ready Kanban 1" width="284" height="300" class="aligncenter size-medium wp-image-3163" /></p>
<p>Some things to note on his board:</p>
<ul>
<li>he added a <strong>&#8220;Poker Ready&#8221; section</strong>, where he can collect a number of user stories that can be estimated in one go in a poker planning session. This is a very good idea and will probably end up on many Ready Kanbans. Even so, I specifically do not prescribe it in my generic format, since it&#8217;s up to the work dynamic between a Team and a PO if they want to do this one at a time or in batches.</li>
<li>the <strong>pink hearts</strong> were added by a colleague in the same room who found the large brown paper ugly&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Rob uses blue stickies to <strong>partition his Ready buffer into Sprints</strong>. Again a very good idea, since it clearly shows the currently expected set of user stories to be picked up in the next sprint. It also allows physical shuffling of user stories to fill up the Sprints to the team&#8217;s velocity.</li>
</ul>
<h3>The first Ready Kanban</h3>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/09/Afb0009-225x300.jpg" alt="The first Ready Kanban" title="The first Ready Kanban" width="225" height="300" class="aligncenter size-medium wp-image-3165" /></p>
<p>This was the <strong>first Ready Kanban ever</strong> to be put up. I initially filled it with the top of the backlog that was in preparation: the top five in the &#8220;Preparing&#8221; state, and the next 10 in the &#8220;Top 10 New&#8221; state. Note that it&#8217;s hanging in its logical place: on the left side of the Scrum board, in line with the overall left-to-right flow of user stories.</p>
<p>This is that same board a few days later (I&#8217;ve fudged out the titles):</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2009/09/Afb0018-250x300.jpg" alt="Ready Kanban 2, some days later" title="Ready Kanban 2, some days later" width="250" height="300" class="aligncenter size-medium wp-image-3166" /></p>
<p>Many interesting things had happened here:</p>
<ul>
<li>The analysts, who were performing all the getting-to-Ready work, <strong>started showing up frequently </strong>in the team room. Just like a Scrum board does for a team, it became their rallying point to <strong>discuss coordination, status and progress</strong>.</li>
<li>The <strong>New buffer started drying up</strong>. With the improving speed of the team, many items on the old &#8220;change requests&#8221; list were reevaluated and found to be outdated or obsolete. It clearly pointed at a need to get the dialog with the business up to speed to get their requests. I had not expected this to happen, I thought that this buffer would always be full. It turns out that there is a subtle effect going on here: putting something in New implies a subtle promotion, and this <strong>leads to a simple triage</strong> being done on the user story. You could say that it functions as a &#8220;bullshit filter&#8221; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</li>
<li>The top card in the Preparing column was stuck there while the ones below it moved. It <strong>became clear that there was an impediment</strong> in getting that user story ready, and  extra effort and focus went into resolving the decisions to be made by the business.</li>
<li>The <strong>Ready buffer was not filling rapidly enough</strong>. The level of the Ready buffer is a really good way to show if the velocity of the PO in sync with that of the Team. It works so well in this regard that the team members saw that it would not really be that useful to keep pounding away at functionality if the work would dry up. So <strong>they started to help the PO role</strong> to get user stories Ready. Now <em>that</em> is what I call self-organization!</li>
</ul>
<h3>Conclusion</h3>
<p>All in all, <strong>I am REALLY happy with the results</strong> I&#8217;ve seen when I applied this board. All of a sudden the PO&#8217;s have their information radiator, they can coordinate with others, stuck user stories are clearly visible, and now there is a basis for measuring the performance of the PO role. We can make a trend graph showing the level of the Ready Buffer (the PO&#8217;s version of the burndown&#8230;), we can measure average completion time of a user story (in line with Lean&#8217;s &#8220;takt time&#8221;), and the PO can bring some sanity back by limiting the work in progress in the Preparing state.</p>
<p>So <strong>please spread the word</strong> and make sure as many PO&#8217;s as possible know about the Ready Kanban: the PO role is by far the hardest of all roles in Scrum, and I know from experience that all help is welcome&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em>What&#8217;s up next? I hope I don&#8217;t take as long as last time, but I&#8217;ll show you how I implemented the Ready Kanban in JIRA. When you have a distributed PO role (or any distributed situation for that matter), you&#8217;ll need support by tooling to bridge the gap&#8230;</em></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/09/12/the-ready-kanban-the-product-owners-scrum-board/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F09%2F12%2Fthe-ready-kanban-the-product-owners-scrum-board%2F&amp;title=The%20READY%20Kanban%3A%20the%20Product%20Owners%26%238217%3B%20Scrum%20Board" id="wpa2a_8"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/09/12/the-ready-kanban-the-product-owners-scrum-board/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flow to READY, Iterate to DONE</title>
		<link>http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done/</link>
		<comments>http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 19:05:08 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[product owner]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=2407</guid>
		<description><![CDATA[In a previous blog post I introduced the definition of READY, and I wanted to do another &#8220;context&#8221; blog post before starting on this one: on the difference between flowing (&#8220;kanban&#8221;) and iterating. However, I had much more to say on the subject than I expected, so the thing kept expanding&#8230; I&#8217;ll gather my thoughts [...]]]></description>
			<content:encoded><![CDATA[<p><em>In a previous blog post <a href="http://blog.xebia.com/2009/06/19/the-definition-of-ready/">I introduced the definition of READY</a>, and I wanted to do another &#8220;context&#8221; blog post before starting on this one: on the difference between flowing (&#8220;kanban&#8221;) and iterating. However, I had much more to say on the subject than I expected, so the thing kept expanding&#8230; I&#8217;ll gather my thoughts and publish that one later. So for the purpose of this blog post just bear with me: I find that <strong>a Product Owner&#8217;s job is best done in a flow style</strong>. And since my dear ex-colleague Lars Vonk told me he was waiting for this post, I&#8217;ll just explain the how here. Lars, here you go&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </em></p>
<p><em>Update: the third of the series is also done. See <a href="http://blog.xebia.com/2009/09/12/the-ready-kanban-the-product-owners-scrum-board/">here</a>.</em></p>
<p>Not all backlog items are equal. A backlog item starts out as a rough sketch &#8211; usually just the As a.. I want&#8230; So That&#8230; stanza &#8211; and needs to be fleshed out to the extent that it can be picked up by the team in a Sprint. Just like a team has a basic workflow getting stuff to Done, the same applies for the Product Owner role. <strong>Scrum does not have any specific support for a Product Owner</strong>: somehow the Product Backlog just &#8220;happens&#8221;. In this post I&#8217;ll try to fill that gap with respect to the process that a Product Owner can follow.</p>
<p>I&#8217;ll explain a <strong>partitioning</strong> of the backlog that maps onto a flow, the <strong>nature</strong> of those partitions and <strong>how you proceed</strong> through them to get enough stuff Ready for the team to pick up in the next Sprint.</p>
<p><span id="more-2407"></span></p>
<h3>Flow to READY</h3>
<p><center><img src="http://blog.xebia.com/wp-content/uploads/2009/07/serge-beaumont-business-ownership-in-an-agile-environment-focus-value-flow018-300x225.png" alt="The Product Owner flows, the Team iterates" title="The Product Owner flows, the Team iterates" width="300" height="225" align="center" class="size-medium wp-image-2431" /></center></p>
<p>The overall flow of work through a Scrum team is that the Product Owner role picks up new stuff, gets it READY, and the Team role picks it up to get it to DONE. Note that I explicitly use the word &#8220;role&#8221; here: team members have a role to play in supporting the Product Owner role to get backlog items to READY.</p>
<h3>Partitioning the backlog</h3>
<p><center><img src="http://blog.xebia.com/wp-content/uploads/2009/07/serge-beaumont-business-ownership-in-an-agile-environment-focus-value-flow019-300x225.png" alt="The Backlog partitioned into flow parts: In Sprint, READY, Preparing, New." title="The Backlog partitioned into flow parts" width="300" height="225" class="size-medium wp-image-2454" /></center></p>
<p>A backlog can roughly be partitioned in four areas based on the overall flow:</p>
<ol>
<li>items that are currently <strong>in the Sprint</strong>, </li>
<li>items that are <strong>Ready</strong>, </li>
<li>items that you&#8217;re <strong>preparing</strong> to Ready, and</li>
<li>the rest: <strong>new</strong> stuff.</li>
</ol>
<p>Of course this is an idealized view of things. In practice the lines are blurred somewhat because the mapping of priority on the workflow steps is not always as clean as you’d like. New items might show up really high in priority, putting it in between the READY items. On the other hand this way of viewing the backlog could be used to enforce the prioritization: something that’s READY could by definition be prioritized higher than something that’s not.</p>
<h3>From partitioning to flow</h3>
<p>If we take these flow steps and put them side by side, we get the following:</p>
<p><center><img src="http://blog.xebia.com/wp-content/uploads/2009/07/serge-beaumont-business-ownership-in-an-agile-environment-focus-value-flow020-300x225.png" alt="READY Kanban" title="READY Kanban" width="300" height="225" class="size-medium wp-image-2460" /></center></p>
<p>The fact that I&#8217;ve used one color for &#8220;New&#8221; and &#8220;Ready&#8221;, and another for &#8220;Preparing&#8221; and &#8220;In Sprint&#8221; is not a coincidence:<strong> &#8220;New&#8221; and &#8220;Ready&#8221; are <em>prioritized buffers</em>, &#8220;Preparing&#8221; and &#8220;In Sprint&#8221; are <em>Work-In-Progress</em></strong>. Let&#8217;s go through the flow step-by-step.</p>
<h3>Prioritized buffer: New</h3>
<p>Backlog items in the <strong>New</strong> state are the ones you haven&#8217;t started working on yet, at least not to the extent that you&#8217;re getting them to READY. Even so, in practice I&#8217;ve seen that <strong>it&#8217;s wise to perform a minimal triage on these items</strong>: if you have every mad idea on there, you&#8217;ll quickly be inundated in an avalanche of items. Stakeholders tend to say &#8220;I&#8217;ve got a thousand ideas!&#8221;, but many of them are just that: ideas. Only a small fraction are actually realistic or useful to implement. This initial triage should be kept simple, but it does put some discipline with stakeholders putting in their requirements. Don&#8217;t be too worried about stakeholders complaining, in general a stakeholder will appreciate knowing what they need to do to get their requirements in <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . To be put on the backlog as New, <strong>a stakeholder should provide the following</strong>:</p>
<ul>
<li>a story <em>solely in terms of the <strong>business experience</strong></em> that describes what they experience and what they need <strong>without referring to how the product would support it</strong></li>
<li><strong>user story stanza</strong> (As a.. I want&#8230; So that&#8230;)</li>
<li>a (rough) <strong>valuation of benefit</strong></li>
<li>a rough <strong>indication of size</strong> (i.e. cost): small, medium, large. (Note that this is best guesstimated by a team member or the product owner after a chat with the stakeholder: they have more knowledge of the product)</li>
</ul>
<p>The <strong>business urgency gives you a rough prioritization</strong>, which enables you to decide which items to pull in first.</p>
<h3>Work-In-Progress: Preparing</h3>
<p>This step is the big one as far as the Product Owner is concerned: it&#8217;s <strong>where the core Product Owner work gets done</strong>.</p>
<p>The Product Owner is the single point of contact for all stakeholders, and this is of course intentional. There needs to be a single focal point for all requirements and prioritization, otherwise it will fall back to the team role and the Product Owner role is all but useless. An unfortunate side effect for our poor Product Owner is that<strong> they constantly get bombarded with requirements and pressure from all stakeholders</strong>. The result is that a Product Owner is stretched thin trying to deal with it all. I&#8217;ve found that this is where the flow/kanban style really shines: <strong>explicitly limiting work in progress is one of the best tools to bringing some sanity in the Product Owner&#8217;s life</strong>.</p>
<p><strong>The Product Owner pulls items into the Preparing step according to capacity</strong>. Just like a team pulls in work to capacity and does not change it until the Sprint is over, a Product Owner should pull in a number of items (I&#8217;ve seen two per person in the Product Owner role a lot, don&#8217;t know yet if that&#8217;s a general thing, though), work on them until they&#8217;re Ready, and only pull in new items when a &#8220;free slot&#8221; opens up in the preparing step.</p>
<p><strong>The Product Owner does not need to (and in most cases can&#8217;t) provide all information, but is responsible for making sure that someone does</strong>, so that <a href="http://blog.xebia.com/2009/06/19/the-definition-of-ready/">the backlog item will get to Ready</a>. This means that a Product Owner will talk with stakeholders to ask them for more information, with the Team to provide an estimation of implementation complexity, and anybody else who is needed to provide clarity and information. This is quite a job, and in larger organizations it&#8217;s not unusual to see multiple people (often analists) supporting this role.</p>
<p>Because of the explicit step in the flow <strong>it is now possible to measure Product Owner performance</strong>. The equivalent of velocity in the flow style is <strong>cycle time: the average time needed to bring a backlog item from New to Ready</strong>. A backlog item that is stuck will be easier to recognize, since it will remain in the Preparing step longer than is usual. It also helps to plan Product Owner capacity. Comparing the cycle time with the a number of backlog items that is consumed per Sprint by the team helps to determine if the Product Owner is going fast enough to keep up.</p>
<p><strong>A Product Owner&#8217;s speed is not measured in a backlog item&#8217;s story points but in number of backlog items</strong> because the amount of work for each item is roughly the same: every item needs its questions answered regardless of the size. Large backlog items may be more work, but in most cases they will have to be broken up into sizes that are manageable by the team. This translates into more backlog items for (originally) large ones, so large items are factored in this way.</p>
<p>When a backlog item is Ready it can be moved into the Ready buffer.</p>
<h3>Prioritized buffer: The Ready Buffer</h3>
<p>I have found it very useful to think of the list of Ready items as a <strong>buffer</strong>. A Product Owner&#8217;s productivity needs to be such that this <strong>buffer is full enough when the next Sprint starts</strong>. Tracking the size of the buffer (in story points, since now the capacity of the Team is the relevant one) is a very good way to see if the Product Owner is getting into trouble. You could use a burn-down chart, a burn-up chart, or simply <strong>a continuous trend line of buffer size</strong>, but I find it a great help that a Product Owner has access to the same type of trend information that is available to Teams when they use burn-down charts.</p>
<p>There are <strong>two levels of Ready: each backlog item needs to be Ready, but the backlog needs to be Ready</strong> as well, just before the next Sprint. Backlog-Ready means that the Ready buffer is <strong>full enough for an iterations&#8217; worth of work, and some extra work as &#8220;spare change&#8221;</strong> in case of renegotiation, last minute decisions, insights or priority shifts. In practice going for 1.5 to 2 iterations&#8217; worth is a good target. The reverse is also true: if the buffer is really full, more than two Sprints&#8217; worth of Ready items, you&#8217;re likely wasting work since reality will change before you get round to the later items in the buffer (items become &#8220;unready&#8221;), forcing extra work. In that case you it&#8217;s better to increase the Team capacity or use the free time for some crystal ball gazing or market research <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<h3>Work-In-Progress: In Sprint</h3>
<p>Of course this step is relatively easy to describe, this is where all the usual Scrum stuff enters the picture <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . As a Product Owner you&#8217;ll track which items are In Sprint, but your work is not entirely done. In an analogy of a quote on design: &#8220;a good design does not depend on one big decision, but on hundreds of little ones&#8221;, <strong>a Team will need you around to unblock them with decisions</strong>. During a Sprint a Team will come up with alternatives for details of the implementation. Often these alternatives have an impact on the end result: they might have an easy option but it will not be exactly what was asked, or a team might find a part of the implementation is harder to do than expected. In that case you need to be around to help them forward.</p>
<h3>Summary</h3>
<p>The backlog can be partitioned in four parts that you can connect with a flow. Since this blog post is getting long enough as it is I&#8217;ll write another one on how you support this process with a Kanban board and electronic tools.</p>
<p>Update: I&#8217;ve written the third post of the series: you can find it <a href="http://blog.xebia.com/2009/09/12/the-ready-kanban-the-product-owners-scrum-board/">here</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F07%2F04%2Fflow-to-ready-iterate-to-done%2F&amp;title=Flow%20to%20READY%2C%20Iterate%20to%20DONE" id="wpa2a_10"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Landmark reached: 20000 unique visitors per month</title>
		<link>http://blog.xebia.com/2009/07/04/landmark-reached-20000-unique-visitors-per-month/</link>
		<comments>http://blog.xebia.com/2009/07/04/landmark-reached-20000-unique-visitors-per-month/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 13:19:59 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Java]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=2405</guid>
		<description><![CDATA[It kind of snuck up on us, but when we recently checked the blog visitor statistics, we found that we had gone over 20000 unique visitors per month in april! So to all of you who&#8217;ve stayed with us through the past years, to all the Xebians and ex-Xebians who have been contributing posts, and [...]]]></description>
			<content:encoded><![CDATA[<p>It kind of snuck up on us, but when we recently checked the blog visitor statistics, we found that we had gone over 20000 unique visitors per month in april! So to all of you who&#8217;ve stayed with us through the past years, to all the Xebians and ex-Xebians who have been contributing posts, and to all who commented on the blog: a big thank you. We hope we can keep offering the content that will push us to, let&#8217;s say, 50000! <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/07/04/landmark-reached-20000-unique-visitors-per-month/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F07%2F04%2Flandmark-reached-20000-unique-visitors-per-month%2F&amp;title=Landmark%20reached%3A%2020000%20unique%20visitors%20per%20month" id="wpa2a_12"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/07/04/landmark-reached-20000-unique-visitors-per-month/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Definition of READY</title>
		<link>http://blog.xebia.com/2009/06/19/the-definition-of-ready/</link>
		<comments>http://blog.xebia.com/2009/06/19/the-definition-of-ready/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 11:04:34 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[product owner]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=2045</guid>
		<description><![CDATA[Yesterday I gave a presentation on the Integrating Agile conference on the answers I have found in what I consider to be the Big Black Hole of Scrum: the Product Owner role. Based on the feedback I want to blog about this subject, and unblacken the hole a bit&#8230; Edit: the link to the second [...]]]></description>
			<content:encoded><![CDATA[<p><em>Yesterday I gave a presentation on the Integrating Agile conference on the answers I have found in what I consider to be the Big Black Hole of Scrum: the Product Owner role. Based on the feedback I want to blog about this subject, and unblacken the hole a bit&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </em></p>
<p><em>Edit: the link to the second post in the series turns out to be buried too much at the bottom, so I&#8217;m adding it at the top: See <a href="http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done"/>Flow to Ready, Iterate to Done</a></em></p>
<h3>The Definition of Ready</h3>
<p>I give CSM trainings with Jeff Sutherland, and about half a year ago he had put something in his material called &#8220;the dynamic model of Scrum&#8221;. The essential feature was the addition of a READY state opposite the DONE state. The idea here is that <strong>a team needs to be in a stable, known situation to be able to perform well</strong>. It immediately struck a chord with me: I had seen so <strong>many teams thrash because the Product Owner could not give them a clear objective</strong>, the READY state was exactly the goal to work to. But what was it really, and how do you get there? By now I think I&#8217;ve got some good answers to these questions.</p>
<p><span id="more-2045"></span></p>
<p><center><br />
<img src="http://blog.xebia.com/wp-content/uploads/2009/06/serge-beaumont-business-ownership-in-an-agile-environment-focus-value-flow010-300x225.png" alt="The two Scrum states, READY and DONE" title="Serge Beaumont - The two Scrum states" width="300" height="225" class="size-medium wp-image-2055" /><br/><em>Here&#8217;s a picture from my Scrum course material to illustrate the concept&#8230;</em></center></p>
<h3>What does the READY state do?</h3>
<p>In a self-organizing team setting a clear destination it very important: <strong>self-organization does not exist if you have nothing to organize TO</strong>. The READY state prevents team thrashing by ensuring that the preconditions for a good Sprint execution have been met.</p>
<h3>Defining READY</h3>
<p>READY is defined by the <strong>Definition of READY</strong>. It is similar to the Definition of DONE, but with the following differences. Whereas with the Definition of DONE the &#8220;supplier&#8221; is the Team and the &#8220;client&#8221; is the Product Owner, it&#8217;s the other way around with the <strong>Definition of READY: the Team is the &#8220;client&#8221; and the Product Owner is the &#8220;supplier&#8221;</strong>. Even though I will detail the Definition of READY later, in the end it boils down to one statement: <strong>READY is when the team says: &#8220;Ah, we get it&#8221;</strong>.</p>
<p>Even though you can put any precondition in the Definition of READY, the need for a good backlog overshadows all other considerations, so you&#8217;ll definitely need to address two items: readiness of User Stories, and readiness of the Backlog.</p>
<h3>When is a User Story READY?</h3>
<p>I have found that a User Story is ready when you have answered three questions: <strong>Why?, What? and How?</strong>, it has been <strong>estimated</strong> and it is <strong>small</strong> enough.</p>
<ul>
<li><strong>Why?</strong>: What are the stakeholders trying to achieve? What are their goals? What is the business context? What is the <strong>Quantified Value</strong>?</li>
<li><strong>What?</strong>: What is the <strong>Outcome Vision</strong>? What is the end result of the user story?</li>
<li><strong>How?</strong>: What is the <strong>Implementation Strategy</strong>? What is the associated cost (story points)? Is the story small enough (story points vs. team velocity)?</li>
</ul>
<p>Note that with answering these question <strong>I do not want to imply that you need a whole lot of documentation or artifacts</strong>. Again, it&#8217;s whatever the team says it needs. If the back of a napkin suffices, go for it. If the team needs more, provide that. Note that <strong>the detail level needed must be determined per user story</strong>. Some will be business as usual, and you may suffice with a simple &#8220;I want one of those, but this time in green&#8221;. Others could for instance be related to a new process in the Intensive Care ward of a hospital. You might just need a tad more there&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>I use the term &#8220;implementation <strong>strategy</strong>&#8221; to further clarify the level of detail needed. Fully specifying the How? would lead you back to waterfall, but you can&#8217;t make a points estimation if the team does not have a rough idea of how they&#8217;ll tackle the user story. So<strong> you go as far with specifying the implementation as is needed for a points estimation</strong>. Note that this is a natural side effect of planning poker sessions, so the easiest is to capture the outcome of that discussion along with the estimation. And I really advise that you do it, I&#8217;ve seen too many cases where the team wonders why they gave that user story 5 points, just two days after the planning poker session&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>In the end a User Story is READY if a <strong>team can implement</strong> it, and a <strong>Product Owner can prioritize</strong> it.</p>
<h3>When is the Backlog READY?</h3>
<p>The backlog is READY when about <strong>1,5-2 Sprint&#8217;s worth of User Stories</strong> at the top of the backlog is READY, and those user stories are sufficiently small to allow good team flow.</p>
<h3>And finally, follow this mantra</h3>
<p><strong>Don&#8217;t let anything that&#8217;s not READY into your Sprint, and let nothing escape that&#8217;s not DONE.</strong></p>
<p>Okay, now you know how to define READY. In a <a href="http://blog.xebia.com/2009/07/04/flow-to-ready-iterate-to-done/">next post</a> I&#8217;ll tell how how to get there&#8230;</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/06/19/the-definition-of-ready/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F06%2F19%2Fthe-definition-of-ready%2F&amp;title=The%20Definition%20of%20READY" id="wpa2a_14"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/06/19/the-definition-of-ready/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Do you worry about crappy code? Then face reality and grow up.</title>
		<link>http://blog.xebia.com/2009/04/24/do-you-worry-about-crappy-code-then-face-reality-and-grow-up/</link>
		<comments>http://blog.xebia.com/2009/04/24/do-you-worry-about-crappy-code-then-face-reality-and-grow-up/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 11:37:33 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Scrum]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=1510</guid>
		<description><![CDATA[My colleague Age pointed me at a blog post by Uncle Bob about a presentation where a Mr. Josuttis presented the inevitability of crappy code because &#8220;businesses will do whatever it takes to cut costs and increase revenue, and therefore businesses will drive software quality inexorably downward&#8221;. Uncle Bob proceeds to go against that argument, [...]]]></description>
			<content:encoded><![CDATA[<p>My colleague Age pointed me at <a href="http://blog.objectmentor.com/articles/2009/04/23/crap-code-inevitable-rumblings-from-accu">a blog post by Uncle Bob</a> about a presentation where a Mr. Josuttis presented the inevitability of crappy code because &#8220;businesses will do whatever it takes to cut costs and increase revenue, and therefore businesses will drive software quality inexorably downward&#8221;. Uncle Bob proceeds to go against that argument, but I find it to be a technocratic (DSLs and produce better code) and ultimately unsatisfying answer. My answer to the problem?</p>
<p>Face reality, grow up.</p>
<p><span id="more-1510"></span></p>
<p>The main complaint is something along the lines of: &#8220;the business does understand the need for quality and make wrong decisions, trading in necessary quality for features&#8221;. So&#8230; it&#8217;s &#8220;their&#8221; fault, right? If only &#8220;they&#8221; would &#8220;take you seriously&#8221; and &#8220;just listen&#8221;? Well, what about making that happen instead of whining about it?</p>
<p><strong>Fact of life: resources are finite.</strong></p>
<p>Quality is a multi-headed beast where hundreds of trade-offs need to be made in design, architecture and features against the available resources. In any organization there is a finite amount of resources to go around. There are always more ideas, initiatives, problems and risks that need to be addressed than you have time and money. Every organization needs to make hard choices to allocate that finite amount for maximum effect. Everybody who has a stake of any kind has to justify the need for a slice of those resources: where in the rule book does it say that IT professionals are exempt from this responsibility? </p>
<p>There are many ways to achieve quality, and it is irresponsible and unprofessional not to take constraints into account.</p>
<p><strong>Fact of life: &#8220;they&#8221; are not evil.</strong></p>
<p>Funny enough, &#8220;they&#8221; is made up of people too. They live, eat and sleep, have hopes and dreams and love. The problem is not that &#8220;they don&#8217;t care about quality&#8221;, the problem is that &#8220;they&#8221; are not given a way to make an informed trade-off. In my experience quality is not unfairly pushed to the side when the value of quality can be clearly weighed against other needs. And if some quality is traded off, there at least is a valid business reason for it. </p>
<p><strong>Fact of life: proving the business value of quality is YOUR responsibility: you are the only one who CAN.</strong></p>
<p>It is not realistic to expect somebody who does not have the required expertise to judge the business value of quality based only on deep technical details. Therefore it is a responsibility of IT professionals to fill in that gap and translate those deep details into the business value it provides. This does not mean that you need to be a business expert all of a sudden: in practice it&#8217;s dead easy to just ask &#8220;Why?&#8221; a number of times until you&#8217;re at a level that is relevant and understandable to &#8220;them&#8221;.</p>
<p>&#8220;WHY do you need to upgrade component X?&#8221;.<br />
- &#8220;Because it will improve its maintainability for that type of changes we see coming up&#8221;.<br />
&#8220;WHY is maintainability good?&#8221;.<br />
- &#8220;Because it will shorten our time to market by about a third&#8221;<br />
- &#8220;Because it will reduce the effort required to implement that change by about 20% or so.&#8221;.</p>
<p>On a side note, this is the way to fix the &#8211; in my experience unfailing &#8211; trap of the bad &#8220;so that&#8221; clause in the &#8220;As a&#8230; I want&#8230; So that&#8230;&#8221; stanza. &#8220;I want a button so that I can go to the next screen&#8221; is cause and effect, not business value. The trick to fixing this is the same: ask &#8220;Why?&#8221; until you arrive at a level that allows you to compare user stories based on real business metrics. You can also use old &#8220;so that&#8221; clauses as the new &#8220;I want&#8221; so the team has more freedom: &#8220;I want to be able to go to the next screen so that&#8230;&#8221;. Stop doing that if it becomes to vague for the team, though.</p>
<p><strong>Fact of life: to be taken seriously means to act responsibly.</strong></p>
<p>When will you let go of a child&#8217;s hand in a busy street? When you trust that they are responsible enough not to run in front of a car. The analogy in an organization is that your opinion will be taken seriously if you are trusted to make a responsible trade-off between quality and other needs. </p>
<p><strong>In Summary</strong></p>
<p>So in summary this is what it takes to prevent crappy code:</p>
<p>- stop the &#8220;us-them&#8221; thinking. You are part of the business too, &#8220;they&#8221; are not evil.<br />
- translate deep details into business value by answering a chain of &#8220;Why?&#8221; questions.<br />
- make responsible trade-offs to be taken seriously and influence decisions<br />
- AND ONLY THEN start implementing your favorite DSL.</p>
<p>I have not seen Mr. Josuttis&#8217; presentation, so I am very aware that I do not know all the nuances in his opinion and story. So my answer is not so much to Mr. Josuttis as it is to the many IT professionals I&#8217;ve heard whining about &#8220;them&#8221;. Stop whining, grow up and do something about it.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/04/24/do-you-worry-about-crappy-code-then-face-reality-and-grow-up/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F04%2F24%2Fdo-you-worry-about-crappy-code-then-face-reality-and-grow-up%2F&amp;title=Do%20you%20worry%20about%20crappy%20code%3F%20Then%20face%20reality%20and%20grow%20up." id="wpa2a_16"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/04/24/do-you-worry-about-crappy-code-then-face-reality-and-grow-up/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>The Task Burn Down Trap: everything finished, nothing done</title>
		<link>http://blog.xebia.com/2008/09/19/the-task-burn-down-trap-everything-finished-nothing-done/</link>
		<comments>http://blog.xebia.com/2008/09/19/the-task-burn-down-trap-everything-finished-nothing-done/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 11:36:14 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=756</guid>
		<description><![CDATA[In the past three projects I&#8217;ve been involved in (one as team member, two as agile coach) I&#8217;ve seen that the usual Sprint burn down based on tasks leads to a dangerous trap: you might end up with nothing done. In two cases we had nearly zero velocity for a Sprint, while the tasks were [...]]]></description>
			<content:encoded><![CDATA[<p>In the past three projects I&#8217;ve been involved in (one as team member, two as agile coach) I&#8217;ve seen that the usual Sprint burn down based on tasks leads to a dangerous trap: you might end up with nothing done. In two cases we had nearly zero velocity for a Sprint, while the tasks were 90% done&#8230; Luckily there&#8217;s a fix: <strong>burn down user stories</strong>, and <strong>toploading</strong>.</p>
<p><span id="more-756"></span></p>
<p><strong>Work != Results</strong></p>
<p>The first problem with a burn down based on tasks is that it is based on activities, not end results. The underlying assumption is that when you&#8217;ve done all the activities, the end result will have been achieved. This assumption is wrong.</p>
<p>Let&#8217;s look at a burn-down chart. Looks pretty close to the ideal line, doesn&#8217;t it? If you would base your progress report on this, you&#8217;d be telling your environment that everything is going well.</p>
<p><a href='http://blog.xebia.com/wp-content/uploads/2008/09/hours-burndown.png'><img src="http://blog.xebia.com/wp-content/uploads/2008/09/hours-burndown-300x232.png" alt="A Task Burndown Chart" title="Task Burndown Chart" width="300" height="232" class="alignright size-medium wp-image-757" /></a></p>
<p>Now let&#8217;s look at the task board. Do you notice how a lot is done, but nothing is finished? All stories have work in progress or still to do, but none of the stories has every task done. Note that even having everything done is no guarantee: all the work might still not have lead to a real &#8220;Done&#8221;.</p>
<p><a href='http://blog.xebia.com/wp-content/uploads/2008/09/task-board-no-toploading.png'><img src="http://blog.xebia.com/wp-content/uploads/2008/09/task-board-no-toploading-300x228.png" alt="A Task Board with everything In Progress" title="A Task Board with everything In Progress" width="300" height="228" class="alignright size-medium wp-image-758" /></a></p>
<p>If this is your task board at the end of a sprint, you have some serious explaining to do. So how do we prevent falling into this trap?</p>
<p><strong>The Fix</strong></p>
<p><strong>Inspect: User Story Burndown</strong></p>
<p>First we need to add a burn down line that shows the progress of results. Since user stories describe an end result, they are the logical choice. If we would have tracked the progress of user story completion, the graph for the above situation would have been completely flat. Having this line on the board would have alerted the team of the trap: nothing was really getting done!</p>
<p><a href='http://blog.xebia.com/wp-content/uploads/2008/09/user-story-burndown-flat.png'><img src="http://blog.xebia.com/wp-content/uploads/2008/09/user-story-burndown-flat-300x229.png" alt="User Story Burndown - Flat line" title="User Story Burndown - Flat line" width="300" height="229" class="alignright size-medium wp-image-759" /></a></p>
<p><em>The root cause of this problem is that there is too much work in progress at one time.</em></p>
<p><strong>Adapt: Toploading</strong></p>
<p>Jeff Sutherland once told me that one of the characteristics of hyperproductive teams is that they prioritize their work within the Sprint to achieve better speed. This inspired me to introduce something I&#8217;ve dubbed <strong>Toploading</strong>. Toploading can be defined as follows:</p>
<p><em>Given an ordered list of user stories, <strong>you&#8217;re either working on the top item, or else you&#8217;d better have a good reason not to</strong>. You don&#8217;t proceed with another story until your current story is done.</em></p>
<p>The ideal case is that the whole team is tackling the top item (it&#8217;s not called Scrum for nothing <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ), but of course in many cases that&#8217;s not practical. So there are some valid reasons not to be working on the top item:</p>
<ul>
<li>The top item is maximally loaded: adding any more people does not help or will even hurt progress</li>
<li>Your expertise and knowledge are totally useless for that story. Note that you could still could participate so you can learn, or that your help is needed a bit later on.</li>
</ul>
<p>If you can&#8217;t work on the top item, you should be working on the next highest item, and all the same rules apply.</p>
<p>Even with the valid reasons not to be at the top, for each and every team member there is one rule that is absolute:</p>
<p><strong>Each team member should be working as high up on the list as they can.</strong></p>
<p>With Toploading and the User Story Burn Down in place you have some good tools to avoid the Task Burn Down Trap!</p>
<p><strong>Inspect again</strong></p>
<p>If you use Toploading, you should see your User Story Burn Down do the following:</p>
<p><a href='http://blog.xebia.com/wp-content/uploads/2008/09/user-story-burn-down-descending.png'><img src="http://blog.xebia.com/wp-content/uploads/2008/09/user-story-burn-down-descending-300x229.png" alt="User Story Burn Down - Descending" title="User Story Burn Down - Descending" width="300" height="229" class="alignright size-medium wp-image-760" /></a></p>
<p>The User Story Burn Down shows a different trend to a Task Burn Down in two ways:</p>
<ul>
<li>User Stories are by definition coarser than Tasks, so the line will be &#8220;blockier&#8221; than you&#8217;ll see with the more fine-grained Tasks.</li>
<li>A User Story Burn Down tends to be flatter in the beginning. Again this has everything to do with the coarser granularity. Although it&#8217;s good to go for fine-grained User Stories, don&#8217;t get hung up on precisely following the ideal line.
</ul>
<p>A Task Board with a team doing Toploading also has a characteristic flow to it. You could imagine a snow plower coming in from the top and moving the tasks from left to right as it comes down:</p>
<p><a href='http://blog.xebia.com/wp-content/uploads/2008/09/task-board-toploading-applied002.png'><img src="http://blog.xebia.com/wp-content/uploads/2008/09/task-board-toploading-applied002-300x225.png" alt="Task Board - With Toploading applied" title="Task Board - With Toploading applied" width="300" height="225" class="alignright size-medium wp-image-761" /></a></p>
<p>This is another way to see if you&#8217;re really being effective, instead of just moving any old task across.</p>
<p><strong>So should I throw away the Task Burn Down?</strong></p>
<p>No! Don&#8217;t throw away the Task Burn Down! You should be using <i>both</i>. The Task Burn Down gives you information that the User Story Burn Down does not. A flattening of the Task Burn Down can show that lots of team capacity is gone because everybody is off fixing production bugs all the time, or because somebody is ill. It&#8217;s the combination of the two Burn Down Charts that gives you the most information.</p>
<p><strong>Conclusion</strong></p>
<p>The User Story Burn Down and Toploading should help you achieve maximum effectivity and to avoid the Task Burn Down Trap. May your Sprints be Hyperproductive!</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2008/09/19/the-task-burn-down-trap-everything-finished-nothing-done/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2008%2F09%2F19%2Fthe-task-burn-down-trap-everything-finished-nothing-done%2F&amp;title=The%20Task%20Burn%20Down%20Trap%3A%20everything%20finished%2C%20nothing%20done" id="wpa2a_18"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2008/09/19/the-task-burn-down-trap-everything-finished-nothing-done/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wicket, JBoss, JAAS, LDAP</title>
		<link>http://blog.xebia.com/2008/05/08/wicket-jboss-jaas-ldap/</link>
		<comments>http://blog.xebia.com/2008/05/08/wicket-jboss-jaas-ldap/#comments</comments>
		<pubDate>Thu, 08 May 2008 12:23:14 +0000</pubDate>
		<dc:creator>Serge Beaumont</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Security]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=551</guid>
		<description><![CDATA[Call me old-skool, but I don&#8217;t like pulling in huge frameworks like Acegi for some simple authentication and authorization stuff. This post will show you how I connected Wicket security to an LDAP through JAAS. This leverages the LDAP configuration and access on the appserver level and keeps the application clean. This was done on [...]]]></description>
			<content:encoded><![CDATA[<p>Call me old-skool, but I don&#8217;t like pulling in huge frameworks like Acegi for some simple authentication and authorization stuff. This post will show you how I connected Wicket security to an LDAP through JAAS. This leverages the LDAP configuration and access on the appserver level and keeps the application clean. This was done on JBoss, so YMMV on another server, but this post should help you along when you need to tweak the solution.</p>
<p>Caveat: this solution does NOT get you logged in as far as the appserver is concerned, so you&#8217;ll not be able to use container calls like isUserInRole(). If you find out how, let me know. For our purposes we didn&#8217;t need it, but it&#8217;s nice to know anyway.</p>
<p><span id="more-551"></span></p>
<h3>Step one: Set up the LDAP server</h3>
<p>Download OpenLDAP and install it. You&#8217;ll need to tweak the slapd.conf a bit. Things to set are the suffix, rootdn (this user will be used by JBoss to connect), rootpw, and optionally the directory.</p>
<pre>
(..snip..)

#######################################################################
# ldbm database definitions
#######################################################################

database	bdb
suffix		"<strong>dc=example,dc=com</strong>"
rootdn        	"<strong>cn=Manager,dc=example,dc=com</strong>"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw       	<strong>secret</strong>
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory	<strong>/my/custom/openldap/data/directory</strong>
# Indices to maintain
index	objectClass	eq

(..snip..)
</pre>
<p>When you run OpenLDAP, it can be handy to use a port higher than 1024 (don&#8217;t need root privileges) and reference your custom slapd.conf file:</p>
<pre lang="bash">
/path/to/slapd -h "ldap://127.0.0.1:10389" -f /path/to/my/custom/slapd.conf
</pre>
<p>You&#8217;ll need to have the necessary user and group entries in the LDAP. I&#8217;ve attached the <a href='http://blog.xebia.com/wp-content/uploads/2008/05/ldap-setupldif.txt'>ldap-setup.ldif</a> file that has a structure that corresponds to the configuration we&#8217;ll set up in JBoss.</p>
<h3>Step Two: Connect JBoss to the LDAP</h3>
<p>JBoss uses the LdapLoginModule to work with an LDAP. You need to set up an application-policy in the login-config.xml that can be found in the JBOSS_HOME/server/default/conf directory. This will allow JBoss to log in to the LDAP server, and tells it what the structure of your LDAP is so the username, password and roles can be found.</p>
<p>I&#8217;ve attached a <a href='http://blog.xebia.com/wp-content/uploads/2008/05/jboss-login-config-snippetxml.txt'>JBoss login-config.xml snippet</a>.</p>
<pre lang="xml">
<policy>
	<application-policy name = "mysecuritydomain">
		[..snip..]
	</application-policy>

	[...etcetera...]
</policy>
</pre>
<p>After setting this up you will be able to connect to the LDAP in your code through JAAS. The connection with your configuration is through the application policy name that is passed to the LoginContext() constructor (see later).</p>
<h3>Step 3: The JAAS connector code</h3>
<p>This code has been integrated into the Wicket security model, but it could be used anywhere. It checks the username/password and retrieves the user&#8217;s roles through JAAS.</p>
<p>I&#8217;ve attached the class that does this and commented it (<a href='http://blog.xebia.com/wp-content/uploads/2008/05/jaasbasedsessionjava.txt'>JAASBasedSession.java</a>), but overall it does the following:</p>
<ul>
<li>Create a handler for callbacks from JAAS. This handler knows the username/password.</li>
<li>Create a LoginContext using the name of your application-policy.</li>
<li>Call login(), which will lead to callbacks.</li>
<li>Retrieve and parse the subject information to get the roles that the user is authorized for.</li>
<li>Put the roles where Wicket can get at them.</li>
</ul>
<h3>Step 4: Integration with Wicket</h3>
<p>The Wicket model depends on the retrieval of role names that a user is authorized for. Instead of subclassing from WebApplication, you subclass from AuthenticatedWebApplication. You will have two more methods to implement. One returns the class of the login page, the other returns the class of the AuthenticatedWebSession subclass that will be used by the framework. The AuthenticatedWebSession subclass is the one with the JAAS connector code, and it is queried by Wicket to retrieve the logged in user&#8217;s roles.</p>
<pre lang="java">
package com.example.myapplication.ui;

[..snip..]
import org.apache.wicket.authentication.AuthenticatedWebApplication;
import org.apache.wicket.authentication.AuthenticatedWebSession;
[..snip..]

public class MyWicketApplication extends AuthenticatedWebApplication {

	[...other stuff...]

    @Override
    protected void init() {
        super.init();

		[...other stuff...]

        // setting page that Wicket will display if user has no rights to access a page
        getApplicationSettings().setAccessDeniedPage(LoginPage.class);

        mountBookmarkablePage("/login", LoginPage.class);
    }

    protected Class<? extends AuthenticatedWebSession> getWebSessionClass() {
        return JAASBasedSession.class;
    }

    protected Class<? extends WebPage> getSignInPageClass() {
        return LoginPage.class;
    }

	[...other stuff...]
}
</pre>
<p>The commented <a href='http://blog.xebia.com/wp-content/uploads/2008/05/jaasbasedsessionjava.txt'>JAASBasedSession.java</a> is attached. The <a href='http://blog.xebia.com/wp-content/uploads/2008/05/loginpagejava.txt'>LoginPage.java</a> I&#8217;ve attached is likely not the most elegant way to log into Wicket. It works, but refactoring it is a bit lower on my to-do list.</p>
<h3>Step 5: Annotate your secure pages</h3>
<p>Wicket has annotations that check if the user has the roles required for that page. These role names map to the roles as they have been set in the LDAP.</p>
<pre lang="java">
package com.example.myapplication.admin.ui;

import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.markup.html.WebPage;

// The AuthorizeInstantiation annotation enforces security based on the roles that have been
// set in the Session and are retrieved with the getRoles() method. In this case both
// admin roles are authorized to use the page. For a single role you don't need the curly braces.

@AuthorizeInstantiation({"TechnicalAdmin","FunctionalAdmin"})
public class AdministrationPage extends WebPage {

	[..snip..]

}
</pre>
<h3>Step 6: World domination!</h3>
<p>By now you should have a complete setup. You can authenticate and authorize your Wicket application, while keeping your application free of the specifics of the LDAP setup. All that rests is teaching your users not to use &#8220;secret&#8221; as their password&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2008/05/08/wicket-jboss-jaas-ldap/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2008%2F05%2F08%2Fwicket-jboss-jaas-ldap%2F&amp;title=Wicket%2C%20JBoss%2C%20JAAS%2C%20LDAP" id="wpa2a_20"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2008/05/08/wicket-jboss-jaas-ldap/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/author/sbeaumont/feed/ ) in 0.94428 seconds, on Feb 9th, 2012 at 4:32 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 5:32 pm UTC -->
