<?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>Richard Lawrence &#187; agile</title>
	<atom:link href="http://www.richardlawrence.info/tag/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.richardlawrence.info</link>
	<description>On making software teams happier and more productive</description>
	<lastBuildDate>Fri, 27 Jan 2012 18:41:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>New Story Splitting Resource</title>
		<link>http://www.richardlawrence.info/2012/01/27/new-story-splitting-resource/</link>
		<comments>http://www.richardlawrence.info/2012/01/27/new-story-splitting-resource/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 18:41:27 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[product management]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=421</guid>
		<description><![CDATA[More than two years after I originally published it, &#8220;Patterns for Splitting User Stories&#8221; remains one of the most visited posts on my blog. Splitting user stories continues to be one of the areas where the teams I work with most often need coaching. To support the teams I coach, I&#8217;ve created a flow chart [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2011/05/04/another-story-splitting-pattern-maybe/' rel='bookmark' title='Permanent Link: Another Story Splitting Pattern (Maybe)'>Another Story Splitting Pattern (Maybe)</a></li>
<li><a href='http://www.richardlawrence.info/2009/10/28/patterns-for-splitting-user-stories/' rel='bookmark' title='Permanent Link: Patterns for Splitting User Stories'>Patterns for Splitting User Stories</a></li>
<li><a href='http://www.richardlawrence.info/2008/10/30/free-agile-product-management-seminar-nov-11-denver/' rel='bookmark' title='Permanent Link: Free Agile Product Management Seminar &#8211; Nov 11, Denver'>Free Agile Product Management Seminar &#8211; Nov 11, Denver</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>More than two years after I originally published it, <a href="/2009/10/28/patterns-for-splitting-user-stories/">&#8220;Patterns for Splitting User Stories&#8221;</a> remains one of the most visited posts on my blog. Splitting user stories continues to be one of the areas where the teams I work with most often need coaching. </p>
<p>To support the teams I coach, I&#8217;ve created a flow chart that goes through the questions I&#8217;ll ask when I&#8217;m helping a team split their stories.<span id="more-421"></span> I was going to keep this resource for my coaching clients, but I&#8217;ve decided to share it here for free. Click the thumbnail below to download the full-size PDF version.</p>
<p><a href='http://www.richardlawrence.info/wp-content/uploads/2012/01/Story-Splitting-Flowchart.pdf'><img src="http://www.richardlawrence.info/wp-content/uploads/2012/01/Story-Splitting-Flowchart-Thumbnail.png" alt="" title="&quot;How to Split a User Story&quot; Flowchart" width="669" height="438" class="aligncenter size-full wp-image-422" /></a></p>
<p>Let me know in the comments if you find this useful. If you can share them, I&#8217;d love to see examples of how you&#8217;ve used it, what the stories looked like before and after splitting.</p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2011/05/04/another-story-splitting-pattern-maybe/' rel='bookmark' title='Permanent Link: Another Story Splitting Pattern (Maybe)'>Another Story Splitting Pattern (Maybe)</a></li>
<li><a href='http://www.richardlawrence.info/2009/10/28/patterns-for-splitting-user-stories/' rel='bookmark' title='Permanent Link: Patterns for Splitting User Stories'>Patterns for Splitting User Stories</a></li>
<li><a href='http://www.richardlawrence.info/2008/10/30/free-agile-product-management-seminar-nov-11-denver/' rel='bookmark' title='Permanent Link: Free Agile Product Management Seminar &#8211; Nov 11, Denver'>Free Agile Product Management Seminar &#8211; Nov 11, Denver</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2012/01/27/new-story-splitting-resource/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Coaching Surgeons, Cyclists, and Software Teams</title>
		<link>http://www.richardlawrence.info/2012/01/11/coaching-surgeons-cyclists-and-software-teams/</link>
		<comments>http://www.richardlawrence.info/2012/01/11/coaching-surgeons-cyclists-and-software-teams/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 17:26:56 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[coaching]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=411</guid>
		<description><![CDATA[Atul Gawande is a surgeon and author who has written some excellent books and New Yorker articles reflecting on the state of modern medicine. Recently, his writing has gone beyond medicine in interesting ways. As he looks for lessons for medicine from other disciplines, he ends up with things to teach both medical professionals and [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2007/10/10/refactoring-things-other-than-software/' rel='bookmark' title='Permanent Link: Refactoring Things Other Than Software'>Refactoring Things Other Than Software</a></li>
<li><a href='http://www.richardlawrence.info/2008/10/14/how-to-invest-less-and-make-more-from-your-software-projects/' rel='bookmark' title='Permanent Link: How to Invest Less and Make More From Your Software Projects'>How to Invest Less and Make More From Your Software Projects</a></li>
<li><a href='http://www.richardlawrence.info/2008/12/11/ui-sketches-for-distributed-teams/' rel='bookmark' title='Permanent Link: UI Sketches for Distributed Teams'>UI Sketches for Distributed Teams</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Atul Gawande is a surgeon and author who has written some excellent books and New Yorker articles reflecting on the state of modern medicine. Recently, his writing has gone beyond medicine in interesting ways. As he looks for lessons for medicine from other disciplines, he ends up with things to teach both medical professionals and skilled knowledge workers more generally. His book <a href="http://amzn.com/0805091742"><em>The Checklist Manifesto</em></a> manages to be a riveting 224 pages on what ought to be one of the least interesting topics possible: the checklist.</p>
<p>So I was intrigued to see a link to <a href="http://www.newyorker.com/reporting/2011/10/03/111003fa_fact_gawande?mbid=social_retweet&#038;currentPage=all">a New Yorker article from Dr. Gawande on my own specialty, coaching</a>. It&#8217;s as good as I might have hoped.<span id="more-411"></span> Noticing that his own performance as a surgeon seems to have plateaued, he wonders whether a brief experience with a tennis coach might apply to surgery:</p>
<blockquote><p>
One July day a couple of years ago, when I was at a medical meeting in Nantucket, I had an afternoon free and went looking for someone to hit with. I found a local tennis club and asked if there was anyone who wanted to play. There wasn’t. I saw that there was a ball machine, and I asked the club pro if I could use it to practice ground strokes. He told me that it was for members only. But I could pay for a lesson and hit with him.</p>
<p>He was in his early twenties, a recent graduate who’d played on his college team. We hit back and forth for a while. He went easy on me at first, and then started running me around. I served a few points, and the tennis coach in him came out. You know, he said, you could get more power from your serve.</p>
<p>I was dubious. My serve had always been the best part of my game. But I listened. He had me pay attention to my feet as I served, and I gradually recognized that my legs weren’t really underneath me when I swung my racquet up into the air. My right leg dragged a few inches behind my body, reducing my power. With a few minutes of tinkering, he’d added at least ten miles an hour to my serve. I was serving harder than I ever had in my life.</p>
<p>Not long afterward, I watched Rafael Nadal play a tournament match on the Tennis Channel. The camera flashed to his coach, and the obvious struck me as interesting: even Rafael Nadal has a coach. Nearly every élite tennis player in the world does. Professional athletes use coaches to make sure they are as good as they can be.</p>
<p>But doctors don’t. I’d paid to have a kid just out of college look at my serve. So why did I find it inconceivable to pay someone to come into my operating room and coach me on my surgical technique?
</p></blockquote>
<p>The rest of the article wanders through a history of coaching; interesting examples from sports, music, and education; and describes his own experience engaging a coach. He concludes,</p>
<blockquote><p>
There was a moment in sports when employing a coach was unimaginable—and then came a time when not doing so was unimaginable. We care about results in sports, and if we care half as much about results in schools and in hospitals we may reach the same conclusion.
</p></blockquote>
<p>I value coaching enough to spend my own money on it. I&#8217;ve hired a mountain bike coach, <a href="http://www.leelikesbikes.com/">Lee McCormack</a>, to help me prepare for this summer&#8217;s <a href="http://trestlebikepark.com/enduro.html">Trestle All Mountain Enduro race</a>. It&#8217;ll be my first downhill race. I don&#8217;t expect to win, but I want to get a result I can be happy about and enjoy the experience.</p>
<p>I used to do cross-country mountain bike races, and I have a pretty good idea how to train for an event. I have Lee&#8217;s books. I could probably do this on my own. But I know from my own experience as a software development coach how much faster a good coach can help you improve.</p>
<p><div class="wp-caption alignright" style="width: 320px">
	<a href="http://www.leelikesbikes.com/testing-my-pump-track.html"><img alt="Lee McCormack on his backyard pump track" src="http://www.leelikesbikes.com/wp-content/pump13.jpg" title="Lee McCormack on his backyard pump track" width="320" /></a>
	<p class="wp-caption-text">Lee McCormack on his backyard pump track</p>
</div>I started working with Lee yesterday morning. We spent a couple hours working on basic pumping and cornering skills on his pump track and practicing seated and standing pedaling on the roads around his house in the Boulder foothills. Lee would demonstrate a technique. I&#8217;d try it. He&#8217;d give me feedback. I&#8217;d try it again. He&#8217;d modify the exercise to focus on whatever I was struggling with, and I&#8217;d ride a bit more. </p>
<p>After just two hours of coaching—working on things I would have said I already knew how to do—I could see a marked improvement in my skills. And I had a nice list of things to practice on my own.</p>
<p>This brings me back around to software development. Our world today runs on software. But most software teams struggle to deliver anywhere near as quickly and reliably as they could. A software profession living up to its potential would transform the world. <strong>So, to paraphrase Gawande: If we care half as much about results in software development as we do in sports, how is it imaginable that so few teams engage a coach? How is it imaginable that so many teams with access to coaching fail to make the most of it?</strong></p>
<p>What about your team? Do you have a coach? If so, do you make the most of the coaching you have available to you? </p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2007/10/10/refactoring-things-other-than-software/' rel='bookmark' title='Permanent Link: Refactoring Things Other Than Software'>Refactoring Things Other Than Software</a></li>
<li><a href='http://www.richardlawrence.info/2008/10/14/how-to-invest-less-and-make-more-from-your-software-projects/' rel='bookmark' title='Permanent Link: How to Invest Less and Make More From Your Software Projects'>How to Invest Less and Make More From Your Software Projects</a></li>
<li><a href='http://www.richardlawrence.info/2008/12/11/ui-sketches-for-distributed-teams/' rel='bookmark' title='Permanent Link: UI Sketches for Distributed Teams'>UI Sketches for Distributed Teams</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2012/01/11/coaching-surgeons-cyclists-and-software-teams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a Useful Task Board</title>
		<link>http://www.richardlawrence.info/2011/11/21/building-a-useful-task-board/</link>
		<comments>http://www.richardlawrence.info/2011/11/21/building-a-useful-task-board/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 16:42:55 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=388</guid>
		<description><![CDATA[The task board is a simple, yet powerful, tool for Scrum teams. As a coach, I can tell a lot about a team just by looking at their task board in the middle of a sprint. If your Scrum team is in the same location, I can&#8217;t think of a good reason why you wouldn&#8217;t [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2009/02/07/7-tips-for-a-more-effective-daily-scrum/' rel='bookmark' title='Permanent Link: 7 Tips for a More Effective Daily Scrum'>7 Tips for a More Effective Daily Scrum</a></li>
<li><a href='http://www.richardlawrence.info/2008/07/11/one-word-can-change-your-daily-scrum/' rel='bookmark' title='Permanent Link: One Word Can Change Your Daily Scrum'>One Word Can Change Your Daily Scrum</a></li>
<li><a href='http://www.richardlawrence.info/2009/04/24/how-to-give-a-great-sprint-demo/' rel='bookmark' title='Permanent Link: How to Give a Great Sprint Demo'>How to Give a Great Sprint Demo</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>The task board is a simple, yet powerful, tool for Scrum teams. As a coach, I can tell a lot about a team just by looking at their task board in the middle of a sprint. If your Scrum team is in the same location, I can&#8217;t think of a good reason why you wouldn&#8217;t want to build and use a task board.</p>
<p>Here&#8217;s how to build a basic task board, various ways to enhance it to convey more information, and some analysis of the many things you can learn from this simple tool.<span id="more-388"></span></p>
<h2>Supplies Required</h2>
<ul>
<li>A black or blue poster marker</li>
<li>A black fine tip marker</li>
<li><a href="http://amzn.com/B0002DOF7E">3 inch square Super Sticky Post-It notes in yellow</a> (generic sticky notes tend not to stick for a whole sprint)</li>
<li>A large surface (e.g. whiteboard, foam core, smooth wall, etc.)</li>
</ul>
<h2>Optional Supplies</h2>
<ul>
<li>Blue and red fine tip markers</li>
<li>Two 1&#8243; photos of each team member</li>
<li><a href="http://amzn.com/B000YD1XNG">Larger sticky notes in another color</a> such as blue or green</li>
<li>Square or small sticky notes in orange or red</li>
<li>Removable, semi-transparent color dot stickers</li>
<li>Narrow electrical tape</li>
<li><a href="/2009/12/21/growing-done-how-to-make-the-definition-of-done-work-for-your-team/">Story Definition of Done</a> printed as checklists</li>
<li><a href="http://amzn.com/B00006IFBO">Post-It glue stick</a></li>
<li>Blue masking tape</li>
</ul>
<h2>Basic setup and use</h2>
<p>Make sure you place your task board where the team will use it. Ideally, the team is in a team room together and the board is in the same room. At the very least, it should be in a place where the team will see it several times a day. It&#8217;s very valuable to use the board to focus the Daily Scrum, so there should be enough space for the whole team to stand around it.</p>
<p>On your task board surface, mark out the following columns with marker or tape: Story, Not Started, In Progress, Done.</p>
<p>Create a card (on a sticky note) for each story you committed to in the current sprint. If you have two colors of stickies or a larger sticky available, use that for the stories. Use the black fine marker to write a title for the story in large, clear print. If the story is in the typical &#8220;As a <user>, I want <feature> so that <value>&#8221; format, you&#8217;ll want to shorten it to a 3-6 word title. You can write the full story on the card with a pen if you want. Write the story point estimate on the card, in a different color marker if you have one. The story titles on the cards should be readable from about 6 feet away. Arrange the story cards in priority order in the first column, leaving space between them. Each story thus defines a horizontal lane across the board. (I don&#8217;t recommend drawing or taping horizontal lines, though; different stories need different amounts of space at different times.)</p>
<p>Create a card for each task you&#8217;ve defined. Again, use the black fine marker and a short title to make them readable from 3-6 feet away. Arrange the tasks in the Not Started column with their corresponding story.</p>
<p>Some teams generate all or most of their tasks at sprint planning. Some generate tasks as they start a story or just-in-time. Still others don&#8217;t use tasks at all. If you generate tasks throughout the sprint, you can expand and contract the story lanes to make room for tasks as needed. If you don&#8217;t use tasks, you&#8217;ll want to eliminate the Story column and move the story cards through the other three columns.</p>
<p>Tasks will almost always be placed on the board in the Not Started column. As a team member assigns a task to himself, he&#8217;ll write his name or initials on the card and move the card into the In Progress column. When the task is done, he&#8217;ll move it into the Done column and likely choose another task to start.</p>
<p>The basic board should look something like this:</p>
<p><img src="/wp-content/uploads/2011/11/basic-task-board.png" alt="" title="Basic Scrum Task Board" width="660" height="400" class="alignnone size-full wp-image-394" /></p>
<h2>Enhancements and variations</h2>
<p>If you have photos for each team member, attach them to small sticky notes or put Post-It glue on the back. Place the photo stickies on the edge of the board to indicate team members available for tasks. I suggest only making one sticky per person readily available. You can have a second sticky available for the rare times a task is blocked and they need to work on a second task. Instead of writing their names on tasks, team members will use their photo to indicate task assignments.</p>
<p>Make a half- or quarter-page checklist for your story definition of done. Print a stack of them. Place one on the board for each story and use it to make sure you generate the right tasks and actually reach done for the story.</p>
<p>If you regularly get work outside your sprint commitment that has to be addressed right away, such as production support, consider adding an &#8220;Expedite&#8221; lane above the first story. When something new appears in the Not Started column on the Expedite lane, the team focuses on that item rather than stories in order to get it done as soon as possible. (If the &#8220;urgent&#8221; item doesn&#8217;t trump the other stories, it probably should be added to the product backlog and wait until a future sprint, so this rule is a good way to distinguish between truly urgent work and someone just trying to change the team&#8217;s priorities mid-sprint.)</p>
<p>Use the red or orange stickies to represent impediments. Place them directly on the items they&#8217;re blocking. This avoids the disconnect between an impediment list and the task board and may explain otherwise strange indications on the board (e.g. a high-priority story in progress while low-priority stories get done).</p>
<p>Use different color cards or dots on cards to indicate themes, larger features, dependencies on other teams, etc. </p>
<p>Consider setting a WIP limit, a restriction on the number of stories you can have in progress at once. Post this number in the header of the In Progress column. Note: It&#8217;s helpful to write &#8220;limit 3 stories&#8221; rather than just &#8220;3&#8243; because you&#8217;re limiting the number of stories in progress even though the column actually contains tasks.</p>
<h2>What the task board can tell you</h2>
<p><strong>What have we committed to?</strong> The stories on the left of the board reflect the team&#8217;s commitment for the sprint. Because they&#8217;re readable at the 6&#8242; distance, someone can see the overall commitment at a glance.</p>
<p><strong>What&#8217;s done?</strong> Assuming you&#8217;ve created all the tasks for a story to get done, the presence of all a story&#8217;s task cards in the Done column indicates that the story is done.</p>
<p><strong>What are we currently working on?</strong> The presence of task cards in In Progress indicates that the team is currently working on the corresponding story.</p>
<p><strong>Are we working on the right things?</strong> Since stories on the task board are ordered according to their priority in the product backlog, the top stories should be getting to done first. If stories in the middle or at the bottom of the board are done while stories at the top are not started or in-progress, this can indicate a problem. For example, maybe there&#8217;s an impediment blocking a high-priority story but no one is talking about it.</p>
<p><strong>Are we working together?</strong> The number of stories in progress and the distribution of names reveals whether the team is collaborating or whether each team member is working on her own story.</p>
<p><strong>What&#8217;s blocked?</strong> If you use impediment stickies, you can see at a glance what&#8217;s blocked and make sure something is being done about the impediment.</p>
<p><strong>How much urgent/unplanned work is being added?</strong> If you use the Expedite lane, you can see by the accumulation of cards how much work has been added after the start of the sprint. This may lead the team to discuss with the Product Owner dropping one or more stories from the bottom of the board.</p>
<p><strong>What work should I do next?</strong> When you&#8217;re ready for a new task, the task board can tell you which stories are open so you can find a way to contribute to the highest priority open stories rather than opening a new story.</p>
<h2>Next steps</h2>
<p>Check out fellow CSC Xavier Quesada Allue&#8217;s <a href="http://www.xqa.com.ar/visualmanagement/">excellent blog on visual management</a>, which covers this topic in much more detail.</p>
<p>Share in the comments: How have you made the task board work better for your team? Which suggestions from above are you going to try? </p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2009/02/07/7-tips-for-a-more-effective-daily-scrum/' rel='bookmark' title='Permanent Link: 7 Tips for a More Effective Daily Scrum'>7 Tips for a More Effective Daily Scrum</a></li>
<li><a href='http://www.richardlawrence.info/2008/07/11/one-word-can-change-your-daily-scrum/' rel='bookmark' title='Permanent Link: One Word Can Change Your Daily Scrum'>One Word Can Change Your Daily Scrum</a></li>
<li><a href='http://www.richardlawrence.info/2009/04/24/how-to-give-a-great-sprint-demo/' rel='bookmark' title='Permanent Link: How to Give a Great Sprint Demo'>How to Give a Great Sprint Demo</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2011/11/21/building-a-useful-task-board/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Why Longer Sprints Probably Won&#8217;t Help</title>
		<link>http://www.richardlawrence.info/2011/09/02/why-longer-sprints-probably-wont-help/</link>
		<comments>http://www.richardlawrence.info/2011/09/02/why-longer-sprints-probably-wont-help/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 17:55:43 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=362</guid>
		<description><![CDATA[As a coach, I&#8217;m frequently told, &#8220;Our sprint length is too short. We want to change it from X to Y weeks.&#8221; The time box—the sprint in Scrum, the iteration in XP and other iterative methods—is one of the most powerful tools in agile software development for revealing problems in a team or organization. Notice [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/11/13/a-common-but-bad-idea/' rel='bookmark' title='Permanent Link: A Common, but Bad, Idea'>A Common, but Bad, Idea</a></li>
<li><a href='http://www.richardlawrence.info/2009/12/21/growing-done-how-to-make-the-definition-of-done-work-for-your-team/' rel='bookmark' title='Permanent Link: Growing DONE—How to Make the Definition of Done Work for Your Team'>Growing DONE—How to Make the Definition of Done Work for Your Team</a></li>
<li><a href='http://www.richardlawrence.info/2009/04/24/how-to-give-a-great-sprint-demo/' rel='bookmark' title='Permanent Link: How to Give a Great Sprint Demo'>How to Give a Great Sprint Demo</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>As a coach, I&#8217;m frequently told, &#8220;Our sprint length is too short. We want to change it from X to Y weeks.&#8221;</p>
<p>The time box—the sprint in Scrum, the iteration in XP and other iterative methods—is one of the most powerful tools in agile software development for revealing problems in a team or organization. Notice I said <em>reveal</em>, not <em>fix</em>. I&#8217;ve seen a few cases where the sprint length really was too short. More often, though, the feeling that the sprint is too short is a sign of deeper problems. Lengthening the sprint might push these problems back under the surface, but it&#8217;s unlikely to actually solve them.</p>
<p>Before you increase your sprint length, ask &#8220;Why?&#8221; a few times to see if you have any of the following underlying issues, and try to deal with those first. Maybe your sprint really is too short. But don&#8217;t start there, lest you miss an opportunity to improve.<span id="more-362"></span></p>
<h3>Underlying Problem #1—You&#8217;re trying to do &#8220;mini-waterfalls&#8221;</h3>
<p>It&#8217;s very difficult to fit a mini-waterfall cycle into 1 or 2 weeks. If you regularly find that testing starts late in the sprint and gets less time than it deserves, experiment with something like ATDD to move testing earlier in the work and try working on fewer stories at a time.</p>
<h3>Underlying Problem #2—You struggle to split stories</h3>
<p>To maximize predictability without too much overhead, I recommend 6-10 stories in a sprint. Sometimes teams want to increase their sprint length because they struggle to get even one story small enough to fit into 2 weeks. Instead of increasing the sprint length, <a href="/splitting-user-stories">work on your story splitting skills</a> for a while. Splitting stories is a skill that takes time and practice to develop.</p>
<h3>Underlying Problem #3—Meetings take too long</h3>
<p>Perhaps your Scrum meetings, especially Sprint Planning, are long and painful. It&#8217;s natural to want to do them less often. But consider this: Do you expect to do 50% more work in 3 weeks than you did in 2 weeks? Probably. Then you&#8217;ll have 50% more to talk about at Sprint Planning. The most effective hour of a meeting is usually the first hour. After that people, get tired and distracted and accomplish less. So, by increasing the content of your planning meeting by 50%, you&#8217;ll probably increase the total meeting time by more than 50%. True, it will happen less often. But it will be even more painful than today. </p>
<p>Instead, work on getting better at your meetings. One team I coached decreased their bi-weekly Sprint Planning meeting from 10 hours to 20 minutes by </p>
<ol type="a">
<li>doing regular backlog grooming every day or two for very short periods with just the necessary team members,</li>
<li>planning using story point velocity rather than task estimates, </li>
<li>creating tasks just-in-time during the sprint, and</li>
<li>doing Sprint Planning in multiple passes, a high-level initial discussion and commitment based on velocity and then more detailed discussion of each story as needed.</li>
</ol>
<p>Could one or more of these techniques help you?</p>
<h3>Underlying Problem #4—Deployment (or merging or integration or whatever) is too hard</h3>
<p>Perhaps you try to deploy completed stories into some kind of staging or formal test environment at the end of each sprint. Maybe you even need to engage outside release managers to do it. It&#8217;s difficult and time-consuming to do, so naturally you want to do it less often.</p>
<p>I wholeheartedly agree with the advice in Jez Humble and David Farley&#8217;s excellent book, <em>Continuous Delivery</em>: &#8220;If It Hurts, Do It More Frequently, and Bring the Pain Forward.&#8221; (p. 26) Instead of deferring the pain—and probably making it worse in the process—try to make it less painful so you can do it more often. If deploying every sprint is hard, figure out how to deploy nightly or on every commit. (<em><a href="http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912">Continuous Delivery</a></em> is a great resource to start this journey.)</p>
<h3>Underlying Problem #5—You can&#8217;t get anything done in 2 weeks</h3>
<p>Sometimes teams tell me, &#8220;We simply can&#8217;t deliver anything valuable in 2 weeks, so we have to go to a longer sprint.&#8221; But changing your sprints from 2 to 4 weeks really hasn&#8217;t changed how much value you deliver in 2 weeks; it&#8217;s just given you half the visibility into progress. Instead of changing the sprint length, try these two things: </p>
<ol>
<li>Use a concept like the Minimum Marketable Feature to group user stories into larger units of value. You&#8217;ll still work on stories, but you&#8217;ll have better visibility into how those stories contribute to releasable value.</li>
<li>Do some root cause analysis (e.g. the 5 whys or a similar tool) to find out why you deliver less value per week than you&#8217;d like. Maybe you have some technical debt you need to deal with. Maybe you have too much process overhead. Maybe a specialist is a bottleneck because skills are unevenly distributed on your team. Maybe you&#8217;re building on an out-of-date platform and could get more productivity with newer technology. There is a wide range of possible causes for low productivity. Whatever the cause, longer sprints are unlikely to be a fix.</li>
</ol>
<h3>Underlying Problem #6—It takes too long to get feedback</h3>
<p>If the Product Owner takes a week to answer questions, it probably going to be very difficult to complete work in a 1 or 2 week sprint. But will a 3 week sprint be much better? Instead, find ways to shorten feedback cycles such as,</p>
<ol type="a">
<li>take other responsibilities away from the PO so she can focus on her role,</li>
<li>give the PO (or team) more authority to make decisions without having to ask hard-to-reach stakeholders, or</li>
<li>work to increase knowledge on the team to reduce the number of questions that need to go to the PO or outside experts (ATDD can be a great tool to accelerate this learning, especially if you use it to build a ubiquitous language).</li>
</ol>
<h3>Underlying Problem #7—Dependency on outside specialists</h3>
<p>Related to #6, sometimes teams can&#8217;t complete a story without help from a specialist outside the team—a DBA, tech writer, expert on a particular technology, etc.—and this outside person is part-time on many teams. Before lengthening the sprint to work around this issue, try to reduce the dependency by</p>
<ol type="a">
<li>moving the specialist into the team,</li>
<li>reducing the specialist&#8217;s load so he can be more available to the team, or</li>
<li>growing the team&#8217;s own skills and/or authority in the speciality area.</li>
</ol>
<h3>Conclusion</h3>
<p>If you&#8217;ve dealt with all the underlying problems you can find and your sprints still feel too short, then by all means, try a longer sprint length. Make your process for you. Just don&#8217;t start by lengthening your sprint and miss out on an opportunity to improve.</p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/11/13/a-common-but-bad-idea/' rel='bookmark' title='Permanent Link: A Common, but Bad, Idea'>A Common, but Bad, Idea</a></li>
<li><a href='http://www.richardlawrence.info/2009/12/21/growing-done-how-to-make-the-definition-of-done-work-for-your-team/' rel='bookmark' title='Permanent Link: Growing DONE—How to Make the Definition of Done Work for Your Team'>Growing DONE—How to Make the Definition of Done Work for Your Team</a></li>
<li><a href='http://www.richardlawrence.info/2009/04/24/how-to-give-a-great-sprint-demo/' rel='bookmark' title='Permanent Link: How to Give a Great Sprint Demo'>How to Give a Great Sprint Demo</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2011/09/02/why-longer-sprints-probably-wont-help/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Another Story Splitting Pattern (Maybe)</title>
		<link>http://www.richardlawrence.info/2011/05/04/another-story-splitting-pattern-maybe/</link>
		<comments>http://www.richardlawrence.info/2011/05/04/another-story-splitting-pattern-maybe/#comments</comments>
		<pubDate>Wed, 04 May 2011 11:36:45 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=344</guid>
		<description><![CDATA[User stories are typically written using a template like, &#8220;As a &#60;role&#62;, I want to &#60;action&#62; so that &#60;value&#62;.&#8221; My other story splitting patterns focus on complexity in the action part of the story. But sometimes the functional complexity in a user story is hidden in the role rather than the action. Consider: could you [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2009/10/28/patterns-for-splitting-user-stories/' rel='bookmark' title='Permanent Link: Patterns for Splitting User Stories'>Patterns for Splitting User Stories</a></li>
<li><a href='http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/' rel='bookmark' title='Permanent Link: Agile Product Management Boot Camp'>Agile Product Management Boot Camp</a></li>
<li><a href='http://www.richardlawrence.info/2009/04/24/how-to-give-a-great-sprint-demo/' rel='bookmark' title='Permanent Link: How to Give a Great Sprint Demo'>How to Give a Great Sprint Demo</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>User stories are typically written using a template like, &#8220;As a &lt;role&gt;, I want to &lt;action&gt; so that &lt;value&gt;.&#8221; My other <a href="/splitting-user-stories/">story splitting patterns</a> focus on complexity in the action part of the story. But sometimes the functional complexity in a user story is hidden in the role rather than the action. <strong>Consider: could you split the story by splitting the role and only satisfying a subset of potential users in the first story?</strong></p>
<p>As the title suggests, I&#8217;m not sure this is actually a new pattern. Every example I can think of actually fits under another pattern. So, if you like, you can think of this as a thought experiment to identify simple/complex, business rule, data entry or other splits where splitting the role reveals a split somewhere else.</p>
<p>Share in the comments: Has discussing splitting the role for a story ever helped you find functional complexity to split the story? Can you provide an example? Is this a sufficiently distinct pattern to merit updating the original article?</p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2009/10/28/patterns-for-splitting-user-stories/' rel='bookmark' title='Permanent Link: Patterns for Splitting User Stories'>Patterns for Splitting User Stories</a></li>
<li><a href='http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/' rel='bookmark' title='Permanent Link: Agile Product Management Boot Camp'>Agile Product Management Boot Camp</a></li>
<li><a href='http://www.richardlawrence.info/2009/04/24/how-to-give-a-great-sprint-demo/' rel='bookmark' title='Permanent Link: How to Give a Great Sprint Demo'>How to Give a Great Sprint Demo</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2011/05/04/another-story-splitting-pattern-maybe/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Want Productivity? Focus on Predictability Instead</title>
		<link>http://www.richardlawrence.info/2010/09/23/want-productivity-focus-on-predictability-instead/</link>
		<comments>http://www.richardlawrence.info/2010/09/23/want-productivity-focus-on-predictability-instead/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 16:07:54 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Definition of Done]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=315</guid>
		<description><![CDATA[Focus your team on predictability, and productivity will come. Focus on productivity, and you&#8217;ll get neither productivity nor predictability. Focusing on predictability drives a team to: Small user stories that can be completed in a day or two Working on a small number of stories at once A strong story definition of done with little [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/10/09/the-most-useful-release-burn-up-ive-seen-yet/' rel='bookmark' title='Permanent Link: The Most Useful Release Burn-up I&#8217;ve Seen Yet'>The Most Useful Release Burn-up I&#8217;ve Seen Yet</a></li>
<li><a href='http://www.richardlawrence.info/2008/11/14/motivated-individuals/' rel='bookmark' title='Permanent Link: Motivated Individuals'>Motivated Individuals</a></li>
<li><a href='http://www.richardlawrence.info/2008/07/11/one-word-can-change-your-daily-scrum/' rel='bookmark' title='Permanent Link: One Word Can Change Your Daily Scrum'>One Word Can Change Your Daily Scrum</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Focus your team on predictability, and productivity will come. Focus on productivity, and you&#8217;ll get neither productivity nor predictability. <span id="more-315"></span></p>
<p>Focusing on predictability drives a team to:</p>
<ul>
<li> Small user stories that can be completed in a day or two</li>
<li>Working on a small number of stories at once</li>
<li> A strong story definition of done with little or no gap between it and <a title="Growing DONE—How to Make the Definition of Done Work for Your Team" href="/2009/12/21/growing-done-how-to-make-the-definition-of-done-work-for-your-team/">the release definition of done</a></li>
<li>Individuals crossing disciplines to get things done without unpredictable wait times</li>
<li> Making achievable commitments based on past results</li>
</ul>
<p>On the other hand, focusing on productivity—usually leads to:</p>
<ul>
<li>Individuals optimizing for their own productivity (i.e. lots of tasks getting done)</li>
<li>Over-committing</li>
<li>Starting stories without necessarily believing they&#8217;ll get done (&#8220;If we&#8217;re going to get all these stories done in this sprint, we&#8217;d better start them as soon as possible!&#8221;)</li>
<li>Sacrificing quality for speed (i.e. taking on technical debt—&#8221;Just get it done; we&#8217;ll clean it up later.&#8221;)</li>
<li>Communicating and collaborating less (&#8220;All that conversation slows me down. I need to focus on my work.&#8221;)</li>
</ul>
<p>The (ostensibly) productivity-focused behaviors may show a velocity increase in the short term. But you&#8217;ll pay for it later. More likely, you&#8217;ll see an erratic velocity, sometimes high, sometimes zero. And there is likely to be some nebulous chunk of work between the last story and the release.</p>
<p>Over and over again, I&#8217;ve seen the predictability-focused behaviors lead to a stable or, more often, a slowly increasing velocity. Small stories are easier to estimate and to get done right. Building quality in keeps the system easy to maintain and extend. And when done really means done, the Product Owner can make meaningful predictions and commitments around delivery. &#8220;<a title="Principles behind the Agile Manifesto" href="http://agilemanifesto.org/principles.html">Working software is the primary measure of progress</a>,&#8221; after all.</p>
<p>Note: This assumes <a title="The Art of Agile Development: Energized Work" href="http://jamesshore.com/Agile-Book/energized_work.html">energized work</a>. If your team doesn&#8217;t care about getting anything done, they could predictably deliver nothing, which isn&#8217;t particularly satisfying. With this team, focus on motivation, then predictability. As <a title="Principles behind the Agile Manifesto" href="http://agilemanifesto.org/principles.html">the Manifesto</a> also says, &#8220;Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.&#8221; Motivation comes first.</p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/10/09/the-most-useful-release-burn-up-ive-seen-yet/' rel='bookmark' title='Permanent Link: The Most Useful Release Burn-up I&#8217;ve Seen Yet'>The Most Useful Release Burn-up I&#8217;ve Seen Yet</a></li>
<li><a href='http://www.richardlawrence.info/2008/11/14/motivated-individuals/' rel='bookmark' title='Permanent Link: Motivated Individuals'>Motivated Individuals</a></li>
<li><a href='http://www.richardlawrence.info/2008/07/11/one-word-can-change-your-daily-scrum/' rel='bookmark' title='Permanent Link: One Word Can Change Your Daily Scrum'>One Word Can Change Your Daily Scrum</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2010/09/23/want-productivity-focus-on-predictability-instead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Growing DONE—How to Make the Definition of Done Work for Your Team</title>
		<link>http://www.richardlawrence.info/2009/12/21/growing-done-how-to-make-the-definition-of-done-work-for-your-team/</link>
		<comments>http://www.richardlawrence.info/2009/12/21/growing-done-how-to-make-the-definition-of-done-work-for-your-team/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 23:34:37 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Definition of Done]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=234</guid>
		<description><![CDATA[Effective agile teams get things done. They build software day after day that&#8217;s not just &#8220;code complete&#8221; but really shippable. And when their product owner says, &#8220;ship it,&#8221; they can get their shippable software into production at the drop of a hat. The Definition of Done can be a powerful tool to make these things [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2009/01/19/web-testing-for-net-teams-watin-or-watir/' rel='bookmark' title='Permanent Link: Web Testing for .NET Teams: WatiN or Watir?'>Web Testing for .NET Teams: WatiN or Watir?</a></li>
<li><a href='http://www.richardlawrence.info/2008/09/08/surviving-rewrites/' rel='bookmark' title='Permanent Link: Surviving Rewrites'>Surviving Rewrites</a></li>
<li><a href='http://www.richardlawrence.info/2008/10/30/free-agile-product-management-seminar-nov-11-denver/' rel='bookmark' title='Permanent Link: Free Agile Product Management Seminar &#8211; Nov 11, Denver'>Free Agile Product Management Seminar &#8211; Nov 11, Denver</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p><img src="http://www.richardlawrence.info/wp-content/uploads/2009/12/finish_banner.jpg" alt="Finish banner" title="Finish banner" width="200" height="133" class="alignright size-full wp-image-241" />Effective agile teams get things done. They build software day after day that&#8217;s not just &#8220;code complete&#8221; but really shippable. And when their product owner says, &#8220;ship it,&#8221; they can get their shippable software into production at the drop of a hat.</p>
<p>The Definition of Done can be a powerful tool to make these things happen&#8230;If it&#8217;s used right.</p>
<p>Most agile teams I see have one of four relationships with a Definition of Done:</p>
<ol>
<li>They don&#8217;t have one</li>
<li>They have one but don&#8217;t really use it</li>
<li>They have one but can never satisfy it</li>
<li>They have one, satisfy it for each story, but still have lots to do at the end of a release</li>
</ol>
<p>I rarely come across teams who use the Definition of Done to good effect day after day, sprint after sprint. <span id="more-234"></span></p>
<p>The reason why, I think, is that if a team uses a Definition of Done at all, they try to use a single one before they&#8217;re ready. I&#8217;ve discovered that most teams really need two definitions of done. For a new agile team, there&#8217;s more to do to get software ready for production than can be accomplished a story at a time. Teams that fall into #3 above probably put everything on the Definition of Done. Teams in #4 probably put just those things they could do a story at a time on the Definition of Done and left everything else for later.</p>
<p><strong>The answer is two Definitions of Done. The Story Definition of Done captures what the team can do today to make each story as shippable as possible in each sprint. The Release Definition of Done captures the gap between the Story Definition of Done and what&#8217;s actually required to ship. Together these tools provide a way to visualize what done means and to make it happen as early as possible.</strong></p>
<p>Here&#8217;s how to build effective Story and Release Definitions of Done&#8230;</p>
<h2>Building The Two Definitions of Done</h2>
<h3>1. Brainstorm the List</h3>
<p>List all the things required to move a set of features in your product to production. Engage release management, operations, help desk, and other stakeholders at this point—it&#8217;s easier to build what they need into the software than to bolt it on at the end. This list typically includes things like:</p>
<ul>
<li>user documentation</li>
<li>operations documentation</li>
<li>monitoring and logging</li>
<li>performance testing</li>
<li>regression tested in a clean QA environment</li>
</ul>
<p>Now, list anything required to deliver software at a consistently fast pace from iteration to iteration. For example:</p>
<ul>
<li>automated unit tests covering 80% of code</li>
<li>automated story tests covering 90% of acceptance criteria</li>
<li>adherence to coding standards</li>
<li>code reviewed by another developer</li>
<li>all production code developed by a pair</li>
</ul>
<p>Finally, list non-functional requirements such as:</p>
<ul>
<li>all pages load in under a second</li>
<li>all pages can support 300 simultaneous user sessions</li>
</ul>
<p>Merge these lists into one, changing the language where necessary so that each bullet reads as a continuation of the sentence beginning: &#8220;In order for a set of features to be released to production&#8230;&#8221;</p>
<h3>2. Challenge the List</h3>
<p>For each item on the list, ask &#8220;why?&#8221; Keep asking &#8220;why?&#8221; until it&#8217;s clear that the item is the simplest, cheapest, most repeatable way to achieve some desired goal in the release. If it&#8217;s not, change it.</p>
<p>This is where you challenge the existing rules around releases. Maybe your release readiness guidelines today require a complete installation guide. Could you replace that with an automated installation script?</p>
<h3>3. Build Release Readiness In</h3>
<p>Now you have a list of the minimal set of things a group of features must have to be released—your Release Definition of Done. Bolting those things onto an otherwise complete set of features could impose a fixed cost of weeks to the end of any release. One of our goals in agile is to allow the product owner to be able to say at any point, &#8220;This is enough, I want to start making money off of this software now—ship it.&#8221; An expensive release gets in the way.</p>
<p>Look at each item on the list and ask, &#8220;Could we satisfy this as we build each story instead of all at once at the end of a release?&#8221; Yes? Then move it to your Story Definition of Done. No? Could you do part of it or do something that would reduce the time at the end? Yes? Then put that on your Story Definition of Done. No? Then leave it on the Release Definition of Done.</p>
<p>Very few items can&#8217;t be satisfied a story at a time. The most common ones I see are performance testing in a production-like environment shared with other products and beta testing with a set of real users. But you can get a head start on even these. Maybe your test environment isn&#8217;t exactly like production, but can you make the performance constraints similar enough to at least profile for likely performance issues? Maybe you can&#8217;t beta test on a large scale, but could you get a small set of users to volunteer to use stories as they&#8217;re built and provide early feedback to make the beta test shorter and more predictable? Think hard about anything you&#8217;re tempted to leave on the Release Definition of Done.</p>
<h3>4. Use Your Definitions of Done</h3>
<p>You now have two definitions of done, one for every story you build and one for a collection of stories you want to release. The Story Definition of Done will inform your acceptance criteria for every story. If page load time matters, a story isn&#8217;t done until all the related pages load fast enough. Test for this. Automate these tests and run them on every build if you can.</p>
<p>You won&#8217;t satisfy the items on your Release Definition of Done until the end of a release. But this doesn&#8217;t mean you can forget about them until then. Keep the Release Definition of Done visible, and look for ways to test early for release readiness.</p>
<h3>5. Grow Your Story Definition of Done</h3>
<p>The Definitions of Done are a starting place, a statement of what your team can accomplish today. Over time, your Release Definition of Done should get smaller and your Story Definition of Done should grow. If you have 3 weeks of manual regression testing at the end of each release, come up with a plan to grow automated regression tests as you build new stories. Maybe you can reduce those 3 weeks of testing to one. If you have a tech writer spend a month writing documentation at the end of a release today, find ways to integrate her into the team to grow the documentation as you grow the software. Maybe you can reduce that month of writing to 3 days of editing and polishing.</p>
<h2>The Bottom Line</h2>
<p>Use two definitions of done. In every retrospective, look for ways to grow your Story Definition of Done so you can consistently build and release software quickly. If you get to a point where you can throw away the Release Definition of Done, congratulations! But don&#8217;t start there.</p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2009/01/19/web-testing-for-net-teams-watin-or-watir/' rel='bookmark' title='Permanent Link: Web Testing for .NET Teams: WatiN or Watir?'>Web Testing for .NET Teams: WatiN or Watir?</a></li>
<li><a href='http://www.richardlawrence.info/2008/09/08/surviving-rewrites/' rel='bookmark' title='Permanent Link: Surviving Rewrites'>Surviving Rewrites</a></li>
<li><a href='http://www.richardlawrence.info/2008/10/30/free-agile-product-management-seminar-nov-11-denver/' rel='bookmark' title='Permanent Link: Free Agile Product Management Seminar &#8211; Nov 11, Denver'>Free Agile Product Management Seminar &#8211; Nov 11, Denver</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2009/12/21/growing-done-how-to-make-the-definition-of-done-work-for-your-team/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Patterns for Splitting User Stories</title>
		<link>http://www.richardlawrence.info/2009/10/28/patterns-for-splitting-user-stories/</link>
		<comments>http://www.richardlawrence.info/2009/10/28/patterns-for-splitting-user-stories/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 14:04:29 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[product management]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[user stories]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=190</guid>
		<description><![CDATA[Good user stories follow Bill Wake&#8217;s INVEST model. They&#8217;re Independent, Negotiable, Valuable, Estimable, Small, and Testable. The small requirement drives us to split large stories. But the stories after splitting still have to follow the model. Many new agile teams attempt to split stories by architectural layer: one story for the UI, another for the [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/12/10/when-stories-are-larger-than-planned/' rel='bookmark' title='Permanent Link: Short Answers #1: When Stories Are Larger Than Planned'>Short Answers #1: When Stories Are Larger Than Planned</a></li>
<li><a href='http://www.richardlawrence.info/2009/02/11/watin-patterns-2-one-assertion-and-a-name-to-match/' rel='bookmark' title='Permanent Link: WatiN Patterns #2: One Assertion and a Name to Match'>WatiN Patterns #2: One Assertion and a Name to Match</a></li>
<li><a href='http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/' rel='bookmark' title='Permanent Link: Agile Product Management Boot Camp'>Agile Product Management Boot Camp</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p><img src="http://www.richardlawrence.info/wp-content/uploads/2009/10/matryoshka.jpg" alt="Matryoshka" title="Matryoshka" width="200" height="166" class="alignright size-full wp-image-210" />Good user stories follow Bill Wake&#8217;s <a href="http://xp123.com/xplor/xp0308/index.shtml">INVEST model</a>. They&#8217;re <strong>I</strong>ndependent, <strong>N</strong>egotiable, <strong>V</strong>aluable, <strong>E</strong>stimable, <strong>S</strong>mall, and <strong>T</strong>estable. The <em>small</em> requirement drives us to split large stories. But the stories after splitting still have to follow the model.</p>
<p>Many new agile teams attempt to split stories by architectural layer: one story for the UI, another for the database, etc. This may satisfy <em>small</em>, but it fails at <em>independent</em> and <em>valuable</em>.</p>
<p>Over my years with agile, I&#8217;ve discovered nine patterns for splitting user stories into good, smaller stories. <span id="more-190"></span></p>
<p><em>(Note: As with any pattern language, I didn&#8217;t invent these patterns, I&#8217;ve just observed and compiled them. For example, <a href="http://radio.javaranch.com/lasse/2008/06/13/1213375107328.html">this great post</a> by Lasse Koskela put names on some patterns I&#8217;d observed but not named, especially &#8220;Major Effort.&#8221;)</em></p>
<h3>How Small?</h3>
<p>How small should stories be? I recommend 6-10 stories per iteration, so how small is small enough depends on your team&#8217;s velocity. Before your next planning meeting calculate what estimate should trigger splitting a story. For most teams, it seems to be 8 or 13 points. But on a recent project I&#8217;m doing by myself, I&#8217;ve needed to split 5-point stories.</p>
<p>When you&#8217;re in a planning meeting and you hit your trigger estimate, pull out the cheat sheet at the end of this article and try a few of the patterns until you find a good split.</p>
<h3>Which Pattern to Use</h3>
<p>You&#8217;ll often find that you can split a story using several of the patterns. Which split should you choose? I use two rules of thumb:</p>
<ol>
<li><strong>Choose the split that lets you deprioritize or throw away a story.</strong> The 80/20 principle says that most of the value of a user story comes from a small share of the functionality. When one split reveals low-value functionality and another doesn&#8217;t, it suggests that the latter split hides waste inside each of the small stories. Go with the split that lets you throw away the low-value stuff.</li>
<li><strong>Choose the split that gets you more equally sized small stories.</strong> The split that turns an 8 point story into four 2 point stories is more useful than the one that produces a 5 and a 3. It gives the Product Owner more freedom to prioritize parts of the functionality separately.</li>
</ol>
<h3>Pattern #1: Workflow Steps</h3>
<p>Here&#8217;s a story from a content management system one of my clients was creating:</p>
<blockquote><p>
As a content manager, I can publish a news story to the corporate website.
</p></blockquote>
<p>Didn’t sound too big&mdash;until we dug into the workflow to get a story published. It turned out that just to get a few sentence news story on the corporate website required both editorial and legal approval and final review on a staging site. There&#8217;s no way 6-10 stories like this would fit in an iteration.</p>
<p>In a workflow like this, the biggest value often comes from the beginning and end. The middle steps add incremental value, but don&#8217;t stand alone. So it can work well to build the simple end-to-end case first and then add the middle steps and special cases.</p>
<p>The new stories included:</p>
<blockquote><p>
&#8230;I can publish a news story directly to the corporate website.<br />
&#8230;I can publish a news story with editor review.<br />
&#8230;I can publish a news story with legal review.<br />
&#8230;I can view a news story on a staging site.<br />
&#8230;I can publish a news story from the staging site to production.
</p></blockquote>
<h3>Pattern #2: Business Rule Variations</h3>
<p>This story has a few equally complex stories hidden within it that accomplish the same thing using different business rules:</p>
<blockquote><p>
As a user, I can search for flights with flexible dates.
</p></blockquote>
<p>Digging into &#8220;flexible dates&#8221; reveals several different business rules, each of which can be a good story on its own:</p>
<blockquote><p>
&#8230;as &#8220;n days between x and y.&#8221;<br />
&#8230;as &#8220;a weekend in December.&#8221;<br />
&#8230;as &#8220;&plusmn; n days of x and y.&#8221;
</p></blockquote>
<h3>Pattern #3: Major Effort</h3>
<p>Sometimes a story can be split into several parts where most of the effort will go towards implementing the first one. For example, this credit card processing story,</p>
<blockquote><p>
As a user, I can pay for my flight with VISA, MasterCard, Diners Club, or American Express.
</p></blockquote>
<p>could be split into four stories, one for each card type. But the credit card processing infrastructure will be built to the support the first story; adding more card types will be relatively trivial. We could estimate the first story larger than the other three, but then we have to remember to change our estimates if the Product Owner later changes priorities. Instead, we should defer the decision about which card type gets implemented first like this:</p>
<blockquote><p>
&#8230;I can pay with one credit card type (of VISA, MC, DC, AMEX).<br />
&#8230;I can pay with all four credit card types (VISA, MC, DC, AMEX) (given one card type already implemented).
</p></blockquote>
<p>The two new stories still aren&#8217;t independent, but the dependency is much clearer than it would be with a story for each card type.</p>
<h3>Pattern #4: Simple/Complex</h3>
<p>When you&#8217;re in a planning meeting discussing a story, and the story seems to be getting larger and larger (&#8220;what about x?&#8221;; &#8220;have you considered y?&#8221;), stop and ask, &#8220;What&#8217;s the simplest version of this?&#8221; Capture that simple version as its own story. You&#8217;ll probably have to define some acceptance criteria on the spot to keep it simple. Then, break out all the variations and complexities into their own stories. So, for example, this story,</p>
<blockquote><p>
As a user, I can search for flights between two destinations.
</p></blockquote>
<p>stays simple by splitting off variations like,</p>
<blockquote><p>
&#8230;specifying a max number of stops.<br />
&#8230;including nearby airports.<br />
&#8230;using flexible dates.<br />
&#8230;etc.
</p></blockquote>
<h3>Pattern #5: Variations in Data</h3>
<p>Complexity in a story can come from handling variations in data. For example, a system I&#8217;m currently working on needs to model geographic areas served by transportation providers. We could have burned our whole project budget just handing geography; it&#8217;s potentially that complex. When I talked through the story,</p>
<blockquote><p>
As a user, I can search for transportation providers by trip origin and destination.
</p></blockquote>
<p>with our Product Owner, I discovered that, while we didn&#8217;t need full-fledged GIS, modeling geography would still be quite complex. We stopped and asked, &#8220;What&#8217;s the &#8216;good enough&#8217; way to model geography so we can build other high-value features now?&#8221; We settled on,</p>
<blockquote><p>
As a user, I can search for transportation providers by trip origin and destination as counties.
</p></blockquote>
<p>This worked for a while, until we collected more data and found that some providers only served certain cities or even neighborhoods. So a new story came up:</p>
<blockquote><p>
As a user, I can search for transportation providers by trip origin and destination as counties, cities, towns, or neighborhoods.
</p></blockquote>
<p>Looking over the new provider data, we also discovered that some providers will support trips originating in a single city but ending in any number of surrounding cities. This led to the story:</p>
<blockquote><p>
Providers can serve different geographic areas for trip origin and destination.
</p></blockquote>
<p>All three of these stories are split from the original geography story. The difference here is that we added stories just-in-time after building the simplest version. But sometimes you know the data variations up-front. The classic example is localization:</p>
<blockquote><p>
As a content manager, I can create news stories.<br />
&#8230;in English.<br />
&#8230;in Japanese.<br />
&#8230;in Arabic.<br />
&#8230;etc.
</p></blockquote>
<h3>Pattern #6: Data Entry Methods</h3>
<p>Complexity sometimes is in the user interface rather than in the functionality itself. In that case, split the story to build it with the simplest possible UI and then build the more usable or fancier UI. These, of course, aren&#8217;t independent&mdash;the second story effectively is the original story if you do it first&mdash;but it still can be a useful split.</p>
<blockquote><p>
As a user, I can search for flights between two destinations.<br />
&#8230;using simple date input.<br />
&#8230;with a fancy calendar UI.
</p></blockquote>
<h3>Pattern #7: Defer Performance</h3>
<p>Sometimes, a large part of the effort is in making a feature fast&mdash;the initial implementation isn’t all that hard. But you can learn a lot from the slow implementation and it has some value to a user who wouldn&#8217;t otherwise be able to do the action in the story. In this case, break the story into &#8220;make it work&#8221; and &#8220;make it fast&#8221;:</p>
<blockquote><p>
As a user, I can search for flights between two destinations.<br />
&#8230;(slow&mdash;just get it done, show a &#8220;searching&#8221; animation).<br />
&#8230;(in under 5 seconds).
</p></blockquote>
<h3>Pattern #8: Operations (e.g. CRUD)</h3>
<p>The word &#8220;manage&#8221; in a user story is a giveaway that the story covers multiple operations. This offers a natural way to split the story. For example:</p>
<blockquote><p>
As a user, I can manage my account.<br />
&#8230;I can sign up for an account.<br />
&#8230;I can edit my account settings.<br />
&#8230;I can cancel my account.
</p></blockquote>
<h3>Pattern #9: Break Out a Spike</h3>
<p>A story may be large not because it&#8217;s necessarily complex, but because the implementation is poorly understood. In this case, no amount of talking about the business part of the story will allow you to break it up. Do a time-boxed spike first to resolve uncertainty around the implementation. Then, you can do the implementation or have a better idea of how to break it up. Don&#8217;t know how to implement the following story?</p>
<blockquote><p>
As a user, I can pay by credit card.
</p></blockquote>
<p>Then, break it into:</p>
<blockquote><p>
Investigate credit card processing.<br />
Implement credit card processing.
</p></blockquote>
<p>In the &#8220;investigate&#8221; story, the acceptance criteria should be questions you need answered. Do just enough investigation to answer the questions and stop; it&#8217;s easy to get carried away doing research.</p>
<p>The spike split is last because it should be your last resort. You probably know enough to build something. Do that, and you&#8217;ll know more. So, make every effort to use one of the previous eight patterns before resorting to the spike pattern.</p>
<h3>Conclusion</h3>
<p>Resist the temptation to split an overly large user story by architectural layers. Instead, try these patterns to split your story into smaller stories that still satisfy the INVEST model. Let me know how it works for you or if you&#8217;ve run into unsplittable stories (I love a challenge!).</p>
<p><a href='http://www.richardlawrence.info/wp-content/uploads/2009/10/Story-Splitting-Cheat-Sheet.pdf'>Download the Story Splitting Cheat Sheet</a></p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2008/12/10/when-stories-are-larger-than-planned/' rel='bookmark' title='Permanent Link: Short Answers #1: When Stories Are Larger Than Planned'>Short Answers #1: When Stories Are Larger Than Planned</a></li>
<li><a href='http://www.richardlawrence.info/2009/02/11/watin-patterns-2-one-assertion-and-a-name-to-match/' rel='bookmark' title='Permanent Link: WatiN Patterns #2: One Assertion and a Name to Match'>WatiN Patterns #2: One Assertion and a Name to Match</a></li>
<li><a href='http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/' rel='bookmark' title='Permanent Link: Agile Product Management Boot Camp'>Agile Product Management Boot Camp</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2009/10/28/patterns-for-splitting-user-stories/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Cuke4Nuke: Cucumber for .NET Teams</title>
		<link>http://www.richardlawrence.info/2009/09/19/cuke4nuke-cucumber-for-net-teams/</link>
		<comments>http://www.richardlawrence.info/2009/09/19/cuke4nuke-cucumber-for-net-teams/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 00:16:38 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[ATDD]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Cuke4Nuke]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=174</guid>
		<description><![CDATA[Update: If you&#8217;ve just landed here, you could get the impression from this post that Cuke4Nuke doesn&#8217;t exist yet. It does. Check out this screencast showing what you can do with it as of early December 2009. If you’ve read this blog for a while or talked with me about functional test tools, you’ve heard [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2009/01/19/web-testing-for-net-teams-watin-or-watir/' rel='bookmark' title='Permanent Link: Web Testing for .NET Teams: WatiN or Watir?'>Web Testing for .NET Teams: WatiN or Watir?</a></li>
<li><a href='http://www.richardlawrence.info/2009/02/11/watin-patterns-2-one-assertion-and-a-name-to-match/' rel='bookmark' title='Permanent Link: WatiN Patterns #2: One Assertion and a Name to Match'>WatiN Patterns #2: One Assertion and a Name to Match</a></li>
<li><a href='http://www.richardlawrence.info/2008/11/13/a-common-but-bad-idea/' rel='bookmark' title='Permanent Link: A Common, but Bad, Idea'>A Common, but Bad, Idea</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p><strong>Update: If you&#8217;ve just landed here, you could get the impression from this post that Cuke4Nuke doesn&#8217;t exist yet. It does. Check out <a href="/2009/12/03/screencast-testing-web-applications-in-net-with-cuke4nuke-and-watin/">this screencast</a> showing what you can do with it as of early December 2009.</strong></p>
<p>If you’ve read this blog for a while or talked with me about functional test tools, you’ve heard me talk about <a href="http://cukes.info/">Cucumber</a>. It’s my favorite ATDD tool because it’s so good at mapping stories and acceptance criteria to automated functional tests. Product Owners and BAs write acceptance criteria in natural language. Developers and testers unobtrusively automate tests for them. Anyone on the team can run the tests and see the current state of the system.</p>
<p>Here’s a simple example:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Feature: Google search<br />
&nbsp; &nbsp; In order to find things on the web<br />
&nbsp; &nbsp; As a user<br />
&nbsp; &nbsp; I want to search for web pages containing specific text<br />
<br />
&nbsp; &nbsp; Scenario: Load search page<br />
&nbsp; &nbsp; &nbsp; &nbsp; When I go to the search page<br />
&nbsp; &nbsp; &nbsp; &nbsp; Then I should be on the search page<br />
<br />
&nbsp; &nbsp; Scenario: Search<br />
&nbsp; &nbsp; &nbsp; &nbsp; Given I'm on the search page<br />
&nbsp; &nbsp; &nbsp; &nbsp; When I search for &quot;richard lawrence&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; Then I should see &quot;www.richardlawrence.info&quot; in the results</div></td></tr></tbody></table></div>
<p>This reads almost exactly as I teach Product Owners to specify acceptance criteria. But it’s not just text. It’s a potentially automated test.</p>
<p>A developer or tester can come along and automate this test like so in Ruby:</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># assuming @google is an instance of a test DSL that wraps Watir, Selenium, etc.</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">When</span> <span style="color:#006600; font-weight:bold;">/</span>^I search <span style="color:#9966CC; font-weight:bold;">for</span> <span style="color:#996600;">&quot;(.*)&quot;</span>$<span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>query<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; <span style="color:#0066ff; font-weight:bold;">@google</span>.<span style="color:#9900CC;">search_for</span> query<br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">Then</span> <span style="color:#006600; font-weight:bold;">/</span>^I should see <span style="color:#996600;">&quot;(.*)&quot;</span> <span style="color:#9966CC; font-weight:bold;">in</span> the results$<span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>expected_text<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; assert <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#0066ff; font-weight:bold;">@google</span>.<span style="color:#9900CC;">results_contain</span>? expected_text <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#008000; font-style:italic;"># etc...</span></div></td></tr></tbody></table></div>
<p>Each of the Given/When/Then calls is a step definition. When there’s a matching line in a Cucumber test, the step definition gets executed.</p>
<p>Recently, support was added for step definitions in Java via a project called Cuke4Duke:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@When<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;I search for <span style="color: #000099; font-weight: bold;">\&quot;</span>(*)<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> search<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> query<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Exception</span></a><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; google.<span style="color: #006633;">searchFor</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
@Then<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;I should see <span style="color: #000099; font-weight: bold;">\&quot;</span>(*)<span style="color: #000099; font-weight: bold;">\&quot;</span> in the results&quot;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> checkResults<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> expectedUrl<span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; assertThat<span style="color: #009900;">&#40;</span>google.<span style="color: #006633;">containsResult</span><span style="color: #009900;">&#40;</span>expectedUrl<span style="color: #009900;">&#41;</span>, is<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Now, a Java team can use Cucumber without ever writing a line of Ruby.</p>
<p>Unfortunately, there’s nothing like this for .NET teams. Until now (or soon, anyway)…</p>
<h2>AA-FTT and the Birth of Cuke4Nuke</h2>
<p>Last month, I attended the Agile Alliance Functional Test Tool conference (AA-FTT for short). AA-FTT is an open space conference. I came with one goal: to get together with other people who want Cucumber for .NET and start making it happen. I wasn’t sure anyone else would be interested, so I was thrilled with the reaction.</p>
<p><a href="http://twitpic.com/he15c" title="Photo 2 of 4 from #aaftt in Chicago at the pre-conference wor... on Twitpic"><img src="http://twitpic.com/show/large/he15c.jpg" alt="Photo 2 of 4 from #aaftt in Chicago at the pre-conference wor... on Twitpic"></a></p>
<p>Aslak Hellesøy introduced Cucumber for those in the group who hadn’t used it and then talked through the multiple language support he’d recently added to the tool. Then, we discussed ways to build .NET support. The obvious solution was to use IronRuby and Cucumber’s language support to handle C# step definitions. <a href="http://blog.mattwynne.net/2009/09/10/the-agile-alliance-functional-testing-tools-workshop/">Matt Wynne</a> downloaded the latest IronRuby and installed Cucumber on it. He kicked off a simple Cucumber example, and we waited. And waited. Some two minutes later, we had results from tests that take less than two seconds to run under the standard Ruby interpreter. In a process that values frequent, fast test runs, IronRuby was a non-starter. (If you want to try Cucumber under IronRuby, <a href="http://blog.thomaslundstrom.com/2009/08/on-running-cucumber-under-ironruby-09.html">here are some instructions</a>.)</p>
<p>So we discussed other options and settled on using a simple wire protocol for Cucumber to communicate to .NET out-of-process, similar to Slim in FitNesse. And here’s the best part: we started building it. Matt and I paired right there to start fleshing out the wire protocol (with Cucumber tests, naturally). Later in the week at Agile 2009, Matt and Aslak paired to build the Ruby side of the wire protocol, and Matt and I tackled the first bits of the .NET side. Last week, I got the skeleton of the .NET side working and up on GitHub. You can define simple steps in C#. Cucumber can ask the .NET wire server to tell it about the steps it has and to invoke them and return the pass/fail results.</p>
<p>About a week ago, Aslak <a href="http://groups.google.com/group/cukes/browse_thread/thread/27674320d7725feb">announced the project on the Cucumber mailing list and recruited more contributors</a>. Declan Whelan, Scott Ford, Åsmund Eldhuset, Anders Hammervold, Chris Kooken, and Steve Eley have already stepped up with ideas and code.</p>
<h2 id="gettinginvoled">Getting Involed</h2>
<p>How can you get involved? I’m glad you asked.</p>
<ol>
<li>Join <a href="http://groups.google.com/group/cukes">the mailing list</a>.</li>
<li>Fork <a href="http://github.com/richardlawrence/Cuke4Nuke">the GitHub repository</a> and work on one of the features in <a href="http://github.com/richardlawrence/Cuke4Nuke/issues">the backlog</a>.</li>
<li>Post a message to the mailing list to let us know what you’re working on. I’ll tag the ticket in the backlog with your GitHub username so we don’t duplicate effort. Prefix your message subject with [Cuke4Nuke].</li>
<li>Comment on tickets in the backlog.</li>
<li>Try using Cuke4Nuke as we develop it and give us feedback via the mailing list.</li>
<li>Shout encouragements in the comments here and on Twitter to let us know you care, even if you can’t contribute.</li>
</ol>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2009/01/19/web-testing-for-net-teams-watin-or-watir/' rel='bookmark' title='Permanent Link: Web Testing for .NET Teams: WatiN or Watir?'>Web Testing for .NET Teams: WatiN or Watir?</a></li>
<li><a href='http://www.richardlawrence.info/2009/02/11/watin-patterns-2-one-assertion-and-a-name-to-match/' rel='bookmark' title='Permanent Link: WatiN Patterns #2: One Assertion and a Name to Match'>WatiN Patterns #2: One Assertion and a Name to Match</a></li>
<li><a href='http://www.richardlawrence.info/2008/11/13/a-common-but-bad-idea/' rel='bookmark' title='Permanent Link: A Common, but Bad, Idea'>A Common, but Bad, Idea</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2009/09/19/cuke4nuke-cucumber-for-net-teams/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Resources from our Agile 2009 Presentation</title>
		<link>http://www.richardlawrence.info/2009/09/02/resources-from-our-agile-2009-presentation/</link>
		<comments>http://www.richardlawrence.info/2009/09/02/resources-from-our-agile-2009-presentation/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 17:46:28 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Agile 2009]]></category>
		<category><![CDATA[Theory of Constraints]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=167</guid>
		<description><![CDATA[For those who attended my Agile 2009 presentation with Bob Hartman, &#8220;The 7 Deadly Sins of Almost Being Agile,&#8221; here are the slides and handouts. Slides Evaporating Cloud Cheat Sheet Handout Evaporating Cloud Template Handout Related posts:Slides and links from my CU ACM chapter presentation Short Answers #2: What to Focus on in 2009 Agile [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2007/04/17/slides-and-links-from-my-cu-acm-chapter-presentation/' rel='bookmark' title='Permanent Link: Slides and links from my CU ACM chapter presentation'>Slides and links from my CU ACM chapter presentation</a></li>
<li><a href='http://www.richardlawrence.info/2009/01/03/what-to-focus-on-in-2009/' rel='bookmark' title='Permanent Link: Short Answers #2: What to Focus on in 2009'>Short Answers #2: What to Focus on in 2009</a></li>
<li><a href='http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/' rel='bookmark' title='Permanent Link: Agile Product Management Boot Camp'>Agile Product Management Boot Camp</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>For those who attended my Agile 2009 presentation with <a href="http://www.agilebob.com/">Bob Hartman</a>, &#8220;The 7 Deadly Sins of Almost Being Agile,&#8221; here are the slides and handouts.</p>
<p><a href="http://www.richardlawrence.info/wp-content/uploads/2009/09/the-7-deadly-sins-of-almost-being-agile.pdf">Slides</a></p>
<p><a href="http://www.richardlawrence.info/wp-content/uploads/2009/09/evaporating-cloud-cheat-sheet.pdf">Evaporating Cloud Cheat Sheet Handout</a></p>
<p><a href="http://www.richardlawrence.info/wp-content/uploads/2009/09/cloud-template.pdf">Evaporating Cloud Template Handout</a></p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2007/04/17/slides-and-links-from-my-cu-acm-chapter-presentation/' rel='bookmark' title='Permanent Link: Slides and links from my CU ACM chapter presentation'>Slides and links from my CU ACM chapter presentation</a></li>
<li><a href='http://www.richardlawrence.info/2009/01/03/what-to-focus-on-in-2009/' rel='bookmark' title='Permanent Link: Short Answers #2: What to Focus on in 2009'>Short Answers #2: What to Focus on in 2009</a></li>
<li><a href='http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/' rel='bookmark' title='Permanent Link: Agile Product Management Boot Camp'>Agile Product Management Boot Camp</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2009/09/02/resources-from-our-agile-2009-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

