<?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>Tue, 20 Jul 2010 21:38:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<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>4</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>6</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>7</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>
		<item>
		<title>How to Give a Great Sprint Demo</title>
		<link>http://www.richardlawrence.info/2009/04/24/how-to-give-a-great-sprint-demo/</link>
		<comments>http://www.richardlawrence.info/2009/04/24/how-to-give-a-great-sprint-demo/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 02:03:10 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Camtasia]]></category>
		<category><![CDATA[demos]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Sprint Demo]]></category>
		<category><![CDATA[Watir]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=161</guid>
		<description><![CDATA[Exciting. Entertaining. Do these words describe your sprint demo meetings? Or are boring and unfocused more accurate? I can&#8217;t believe how many times I&#8217;ve come in to coach a team and they&#8217;ve been surprised when I actually expected to see a software demo in the sprint demo meeting. As the agile principle says, “Working software [...]


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/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/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>Exciting. Entertaining. Do these words describe your sprint demo meetings? Or are <em>boring</em> and <em>unfocused</em> more accurate?</p>
<p>I can&#8217;t believe how many times I&#8217;ve come in to coach a team and they&#8217;ve been surprised when I actually expected to see a software demo in the sprint demo meeting. As the agile principle says, “Working software is the primary measure of progress.” Let&#8217;s see some software!</p>
<p>Why are so many agile teams so hesitant to do demos? Why are demos so lifeless? Sometimes, the team&#8217;s not actually done. That makes a demo awkward. Other times, they can&#8217;t communicate what they did to the Product Owner; they don&#8217;t speak “business.” But <strong>most often, they simply don&#8217;t know how to give a good demo</strong>.</p>
<p>So, how <em>do</em> you give a good demo? <span id="more-161"></span></p>
<p>Here are a few tips:</p>
<ul>
<li><strong>Focus on acceptance criteria</strong>. You&#8217;ve defined what done means for the story (right?), so focus your demo around proving that you&#8217;re actually done.</li>
<li><strong>Start with the demo in mind</strong>. Don&#8217;t wait to think about the demo until you&#8217;re done with the story. You might be able to write tests that double as demo scripts. And it&#8217;s best to plan your demo for a story while it&#8217;s fresh in your mind, before you move to the next story.</li>
<li><strong>Prepare</strong>. Don&#8217;t ad lib. Think through an interesting scenario to prove that you&#8217;ve satisfied the core acceptance criteria. Create any necessary test data. Use tools like Watir if necessary to get your app into a state where you can start an interesting demo.</li>
<li><strong>Practice</strong>. Run through the demo at least once. When you&#8217;re getting started, you might want to grab a trial version of Camtasia and record yourself giving the practice demo. Painful, huh? That just means you need to work on it.</li>
<li><strong>Tell a story</strong>. Center your demo around a realistic user solving a real problem. The point is not just to show that the software works, but to show that it&#8217;s valuable.</li>
<li><strong>Keep it short</strong>. If you work on your stories one at a time and get them accepted when they&#8217;re ready, you don&#8217;t need to exhaustively cover all your acceptance criteria in your demo. Instead, focus your demo on what&#8217;s interesting and what&#8217;s valuable about each feature.</li>
</ul>
<p>The sprint demo should be the most exciting part of Scrum. It&#8217;s when the team gets to show everyone all the value they&#8217;re delivering. That&#8217;s worth investing a little time to do well. You may find that previously disinterested stakeholders start coming just for the show.</p>
<p>What has worked well for you in sprint demos? What hasn&#8217;t worked? Share in the comments.</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/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/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/04/24/how-to-give-a-great-sprint-demo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Continuous Deployment</title>
		<link>http://www.richardlawrence.info/2009/02/13/continuous-deployment/</link>
		<comments>http://www.richardlawrence.info/2009/02/13/continuous-deployment/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 15:05:23 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[release management]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=153</guid>
		<description><![CDATA[I&#8217;ve written before about the amazing financial impact of releasing more often. And I know from personal experience the positive impact that frequent releases have on learning and on product quality and value. So, I enjoyed this post on one company&#8217;s experience with continuous releases. Yes, you read that right; they release, on average, 50 [...]


Related posts:<ol><li><a href='http://www.richardlawrence.info/2007/04/26/continuous-integration-and-the-bad-head-problem/' rel='bookmark' title='Permanent Link: Continuous Integration and the Bad Head Problem'>Continuous Integration and the Bad Head Problem</a></li>
<li><a href='http://www.richardlawrence.info/2007/03/22/continuous-integration-in-under-an-hour/' rel='bookmark' title='Permanent Link: Continuous Integration in Under an Hour'>Continuous Integration in Under an Hour</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>I&#8217;ve <a href="/2008/10/14/how-to-invest-less-and-make-more-from-your-software-projects/">written before</a> about the amazing financial impact of releasing more often. And I know from personal experience the positive impact that frequent releases have on learning and on product quality and value. So, I enjoyed <a href="http://startuplessonslearned.blogspot.com/2009/02/continuous-deployment-and-continuous.html">this post</a> on one company&#8217;s experience with continuous releases. Yes, you read that right; they release, on average, 50 times per day.</p>
<blockquote><p>We call this process continuous deployment because it seemed to us like a natural extension of the continuous integration we were already doing. Our eventual conclusion was that there was no reason to have code that had passed the integration step but was not yet deployed.</p></blockquote>
<p><a href="http://startuplessonslearned.blogspot.com/2009/02/continuous-deployment-and-continuous.html">Read the whole thing</a> and consider what it would take in your organization to get to continuous deployment. How fast could you go? And what impediments would have to be resolved to make it happen?</p>


<p>Related posts:<ol><li><a href='http://www.richardlawrence.info/2007/04/26/continuous-integration-and-the-bad-head-problem/' rel='bookmark' title='Permanent Link: Continuous Integration and the Bad Head Problem'>Continuous Integration and the Bad Head Problem</a></li>
<li><a href='http://www.richardlawrence.info/2007/03/22/continuous-integration-in-under-an-hour/' rel='bookmark' title='Permanent Link: Continuous Integration in Under an Hour'>Continuous Integration in Under an Hour</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/2009/02/13/continuous-deployment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>7 Tips for a More Effective Daily Scrum</title>
		<link>http://www.richardlawrence.info/2009/02/07/7-tips-for-a-more-effective-daily-scrum/</link>
		<comments>http://www.richardlawrence.info/2009/02/07/7-tips-for-a-more-effective-daily-scrum/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 17:40:26 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[daily Scrum]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=133</guid>
		<description><![CDATA[The main purpose of the Daily Scrum is for team members to make and follow-up on commitments to one another that work towards the team&#8217;s shared sprint commitment. If your Daily Scrum has become unfocused, too long, or otherwise ineffective, here are seven ways to get it back on track. 1. Do it around the [...]


Related posts:<ol><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/2008/09/05/making-velocity-granular-enough/' rel='bookmark' title='Permanent Link: Making Velocity Granular Enough'>Making Velocity Granular Enough</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>The main purpose of the Daily Scrum is for team members to make and follow-up on commitments to one another that work towards the team&#8217;s shared sprint commitment. If your Daily Scrum has become unfocused, too long, or otherwise ineffective, here are seven ways to get it back on track.</p>
<p><span id="more-133"></span></p>
<p><b>1. Do it around the task board.</b> Have team members point at stories and tasks on the task board as they talk about their work. This keeps the focus on work for the sprint and makes it obvious when the talk becomes unrelated to the sprint.</p>
<p><b>2. Change the questions.</b> In <a href="/2008/07/11/one-word-can-change-your-daily-scrum/">&#8220;One Word Can Change Your Daily Scrum&#8221;</a> I described a way I like to change the three Daily Scrum questions to focus the team on getting things done.</p>
<p><b>3. Don&#8217;t show up.</b> If your Daily Scrum has turned into a status report to the ScrumMaster, try taking a few days off. Let the team report to each other instead of you. Aaron Sanders <a href="http://aaron.sanders.name/agile/an-experiment-dont-come-to-standup-today">has more here</a>. Less dramatic ways to have the same effect are avoiding eye contact or stepping outside the circle. But sometimes dramatic is necessary to shake things up.</p>
<p><b>4. Don&#8217;t talk.</b> If you&#8217;re not taking sprint tasks, you don&#8217;t need to answer the three questions. Emphasize that by not talking at all during the Daily Scrum. Use non-verbal communication when necessary, but keep your mouth shut.</p>
<p><b>5. Use a parking lot.</b> There are legitimate things for a team to talk about in the morning that don&#8217;t fit the tightly-defined purpose of the Daily Scrum. Use a parking lot (i.e. a flip chart or section of a whiteboard) to capture those topics. Address them right after the Daily Scrum is over. You can even let team members add items to the parking lot outside of the meeting to be addressed in the next &#8220;parking lot time.&#8221; That way, they&#8217;re not trying to remember their parking lot topic when they should be paying attention to the Daily Scrum.</p>
<p><b>6. Actually stand.</b> It shouldn&#8217;t be necessary for us to stand to have a short, high-energy meeting, but it really seems to help. If your team has started sitting for the Daily Scrum and it&#8217;s running longer than 15 minutes, it might be time to try standing again. Set an example by standing for the whole meeting, and maybe ask one or two influential team members to do the same. Combining this with #1 makes it feel less awkward.</p>
<p><b>7. Pass a token.</b> <a href="http://jchyip.blogspot.com/2009/02/few-pointers-for-stand-up-tokens.html">Jason Yip describes</a> how introducing randomness and play into the Daily Scrum by tossing a ball to the next person to speak can add energy to the meeting.</p>
<p>What else have you done to keep your Daily Scrum effective? Share in the comments.</p>


<p>Related posts:<ol><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/2008/09/05/making-velocity-granular-enough/' rel='bookmark' title='Permanent Link: Making Velocity Granular Enough'>Making Velocity Granular Enough</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/02/07/7-tips-for-a-more-effective-daily-scrum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another Look at WatiN</title>
		<link>http://www.richardlawrence.info/2009/01/24/another-look-at-watin/</link>
		<comments>http://www.richardlawrence.info/2009/01/24/another-look-at-watin/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 16:29:50 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Agile 2009]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[WatiN]]></category>
		<category><![CDATA[Watir]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=115</guid>
		<description><![CDATA[At my current client, we&#8217;ve decided to use WatiN, largely for the C# vs. Ruby reason I discussed earlier this week. After spending a week working with WatiN (following a year of rarely using it), I&#8217;m impressed. Ruby and the active Watir community still have their advantages. But WatiN has really come into its own [...]


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>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>At my current client, we&#8217;ve decided to use <a href="http://watin.sourceforge.net/">WatiN</a>, largely for the C# vs. Ruby reason I <a href="/2009/01/19/web-testing-for-net-teams-watin-or-watir/">discussed earlier this week</a>. After spending a week working with WatiN (following a year of rarely using it), I&#8217;m impressed. Ruby and the active Watir community still have their advantages. But WatiN has really come into its own with C# 3.0 features like lambdas. I&#8217;m pleased with the test code we&#8217;re producing in terms of readability, speed, flexibility, and maintainability. I&#8217;ve proposed an <a href="http://agile2009.agilealliance.org/">Agile 2009</a> tutorial <a title="Please log in and add comments on my session proposal." href="http://agile2009.agilealliance.org/node/505">session</a> on the patterns I&#8217;m using to get those results, and I&#8217;ll post more on that topic here soon. (Which will hopefully help with one of WatiN&#8217;s shortcomings—documentation.)</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>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2009/01/24/another-look-at-watin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Agile Product Management Boot Camp</title>
		<link>http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/</link>
		<comments>http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 03:52:29 +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[Scrum]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=108</guid>
		<description><![CDATA[Bob Hartman and I are offering an Agile Product Management Boot Camp course March 9-10 in Denver. If you&#8217;re a product manager, product owner, business analyst or in any other product facing role in an agile (or soon-to-be agile) environment, this intense, hands-on course is a great opportunity for you to ensure that you&#8217;re helping [...]


Related posts:<ol><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>
<li><a href='http://www.richardlawrence.info/2008/11/03/agile-architecture-neither-bduf-nor-chaos/' rel='bookmark' title='Permanent Link: Agile Architecture &#8211; Neither BDUF nor Chaos'>Agile Architecture &#8211; Neither BDUF nor Chaos</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>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>Bob Hartman and I are offering an Agile Product Management Boot Camp course March 9-10 in Denver. If you&#8217;re a product manager, product owner, business analyst or in any other product facing role in an agile (or soon-to-be agile) environment, this intense, hands-on course is a great opportunity for you to ensure that you&#8217;re helping your team maximize the value it delivers.</p>
<p><span id="more-108"></span>Topics include&#8230;</p>
<ul>
<li> Understanding Agile: Process and Driving Principles</li>
<li>Ensuring the Right Things Gets Built: Testing and Acceptance</li>
<li>Specifying What to Build: User Stories</li>
<li>Deciding What to Build First: Prioritization</li>
<li>Defining Customer Value: Minimum Marketable/Releasable Features</li>
<li>Project Acceptance: Building a Product Vision and Business Case</li>
<li>Product Management 101: Useful Tips, Tricks and Techniques</li>
<li>Pulling it All Together: Project Simulation</li>
</ul>
<p>You will leave the course knowing how to:</p>
<ul>
<li>Deal with the team outside of just planning meetings, demonstrations and retrospectives.</li>
<li>Break down requirements into usable stories &#8211; even when the team is unable to help.</li>
<li>Deliver value in stages rather than all at once.</li>
<li>Write acceptance criteria to ensure the right features are being developed.</li>
<li>Create a project business case and vision.</li>
<li>Perform basic product management functions in an agile way.</li>
<li>Effectively interact with customers, community, stakeholders, managers, and the team.</li>
<li>Make a convincing business case for using agile for more projects.</li>
<li>Continuously improve.</li>
</ul>
<p>The course registration fee is $1,200, but readers of this blog can take advantage of a special 2-for-1 offer. Simply register with discount code RLB2FOR1, and we&#8217;ll send you another code you can give to a colleague to register for free. Seats are limited, so <a href="http://agileproductmanagementbootcamp-rl.eventbrite.com">get your registration in today</a>.</p>


<p>Related posts:<ol><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>
<li><a href='http://www.richardlawrence.info/2008/11/03/agile-architecture-neither-bduf-nor-chaos/' rel='bookmark' title='Permanent Link: Agile Architecture &#8211; Neither BDUF nor Chaos'>Agile Architecture &#8211; Neither BDUF nor Chaos</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>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.richardlawrence.info/2009/01/21/agile-product-management-boot-camp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Testing for .NET Teams: WatiN or Watir?</title>
		<link>http://www.richardlawrence.info/2009/01/19/web-testing-for-net-teams-watin-or-watir/</link>
		<comments>http://www.richardlawrence.info/2009/01/19/web-testing-for-net-teams-watin-or-watir/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 03:49:04 +0000</pubDate>
		<dc:creator>Richard Lawrence</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[ATDD]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[WatiN]]></category>
		<category><![CDATA[Watir]]></category>

		<guid isPermaLink="false">http://www.richardlawrence.info/?p=100</guid>
		<description><![CDATA[I&#8217;ve noticed a pattern with several of my .NET clients who want to get into automated acceptance testing for web applications. They like the idea of WatiN because it would let them write tests in the same language as their production code. But then they notice that there&#8217;s much more documentation and apparently a much [...]


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/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>I&#8217;ve noticed a pattern with several of my .NET clients who want to get into automated acceptance testing for web applications. They like the idea of <a href="http://watin.sourceforge.net/">WatiN</a> because it would let them write tests in the same language as their production code. But then they notice that there&#8217;s much more documentation and apparently a much more active community around <a href="http://wiki.openqa.org/display/WTR">Watir</a>. And that Ruby language looks interesting too. What to do?</p>
<p>I think there are good arguments for both. Here are the major pros and cons from my perspective&#8230;</p>
<p><span id="more-100"></span></p>
<h2>WatiN</h2>
<table width="100%" border="0" cellspacing="0" cellpadding="3">
<tbody>
<tr>
<td width="50%"><strong>Pros</strong></td>
<td><strong>Cons</strong></td>
</tr>
<tr>
<td valign="top">
<ul>
<li>Code and test in the same language (e.g. C#)
<ul>
<li>No need to learn a new language (i.e. Ruby)</li>
<li>No need to support another language</li>
<li>No need to hire people who know another language</li>
</ul>
</li>
<li>Did I mention that you can write tests in C#?</li>
</ul>
</td>
<td valign="top">
<ul>
<li>IE only (though there&#8217;s a CTP for FireFox support)</li>
<li>Very limited documentation</li>
<li> More syntactic noise (more due to .NET than to WatiN itself; e.g. new Regex(&#8220;txtFoo$&#8221;) vs. /txtFoo$/)</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h2>Watir</h2>
<table width="100%" border="0" cellspacing="0" cellpadding="3">
<tbody>
<tr>
<td width="50%"><strong>Pros</strong></td>
<td><strong>Cons</strong></td>
</tr>
<tr>
<td valign="top">
<ul>
<li>Very active community</li>
<li>Active ongoing development on Watir and related projects</li>
<li>Good support on the discussion list</li>
<li>Concise, clear syntax (more due to Ruby than to Watir itself)</li>
<li>Good documentation (though finding the current RDoc online can be difficult)</li>
<li>Works with <a href="http://wiki.github.com/aslakhellesoy/cucumber">Cucumber</a>, my current favorite acceptance test tool</li>
<li>Supports multiple browsers (IE, Firefox, Safari, and soon Chrome and Opera)</li>
</ul>
</td>
<td valign="top">
<ul>
<li>Uses a language unfamiliar to .NET teams (that&#8217;s who we&#8217;re talking about here, remember)</li>
<li>Doesn&#8217;t directly work with .NET test frameworks (of course, you can wrap the Watir tests for use by MSTest or NUnit)</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h2>The Bottom Line</h2>
<p>On balance, I think Watir is the better tool, has the better documentation, the most active community, and the best long-term prospects. But I understand the desire to standardize on C# or VB.NET for both production and test code. The long-term cost of adding another language to a product is not something to ignore.</p>
<p>Personally, I&#8217;ll continue to use and teach both tools with clients. When it comes to my own projects, however, I&#8217;ll be using and extending Watir, for all the reasons above and simply because I enjoy working with Ruby.</p>
<p>Which do you use and why?</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/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/2009/01/19/web-testing-for-net-teams-watin-or-watir/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
