Archive for the ‘agile’ tag
Growing DONE—How to Make the Definition of Done Work for Your Team
Effective agile teams get things done. They build software day after day that’s not just “code complete” but really shippable. And when their product owner says, “ship it,” 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 happen…If it’s used right.
Most agile teams I see have one of four relationships with a Definition of Done:
- They don’t have one
- They have one but don’t really use it
- They have one but can never satisfy it
- They have one, satisfy it for each story, but still have lots to do at the end of a release
I rarely come across teams who use the Definition of Done to good effect day after day, sprint after sprint. Find out why and how to fix it »
Patterns for Splitting User Stories
Good user stories follow Bill Wake’s INVEST model. They’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 database, etc. This may satisfy small, but it fails at independent and valuable.
Over my years with agile, I’ve discovered nine patterns for splitting user stories into good, smaller stories. Read on »
Cuke4Nuke: Cucumber for .NET Teams
Update: If you’ve just landed here, you could get the impression from this post that Cuke4Nuke doesn’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 me talk about Cucumber. 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.
Here’s a simple example:
Feature: Google search
In order to find things on the web
As a user
I want to search for web pages containing specific text
Scenario: Load search page
When I go to the search page
Then I should be on the search page
Scenario: Search
Given I'm on the search page
When I search for "richard lawrence"
Then I should see "www.richardlawrence.info" in the resultsThis reads almost exactly as I teach Product Owners to specify acceptance criteria. But it’s not just text. It’s a potentially automated test.
A developer or tester can come along and automate this test like so in Ruby:
# assuming @google is an instance of a test DSL that wraps Watir, Selenium, etc. When /^I search for "(.*)"$/ do |query| @google.search_for query end Then /^I should see "(.*)" in the results$/ do |expected_text| assert { @google.results_contain? expected_text } end # etc...
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.
Recently, support was added for step definitions in Java via a project called Cuke4Duke:
@When("I search for \"(*)\"") public void search(String query) throws Exception { google.searchFor(query); } @Then("I should see \"(*)\" in the results") public void checkResults(String expectedUrl) { assertThat(google.containsResult(expectedUrl), is(true)); }
Now, a Java team can use Cucumber without ever writing a line of Ruby.
Unfortunately, there’s nothing like this for .NET teams. Until now (or soon, anyway)…
AA-FTT and the Birth of Cuke4Nuke
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.
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. Matt Wynne 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, here are some instructions.)
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.
About a week ago, Aslak announced the project on the Cucumber mailing list and recruited more contributors. Declan Whelan, Scott Ford, Åsmund Eldhuset, Anders Hammervold, Chris Kooken, and Steve Eley have already stepped up with ideas and code.
Getting Involed
How can you get involved? I’m glad you asked.
- Join the mailing list.
- Fork the GitHub repository and work on one of the features in the backlog.
- 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].
- Comment on tickets in the backlog.
- Try using Cuke4Nuke as we develop it and give us feedback via the mailing list.
- Shout encouragements in the comments here and on Twitter to let us know you care, even if you can’t contribute.
Resources from our Agile 2009 Presentation
For those who attended my Agile 2009 presentation with Bob Hartman, “The 7 Deadly Sins of Almost Being Agile,” here are the slides and handouts.
How to Give a Great Sprint Demo
Exciting. Entertaining. Do these words describe your sprint demo meetings? Or are boring and unfocused more accurate?
I can’t believe how many times I’ve come in to coach a team and they’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’s see some software!
Why are so many agile teams so hesitant to do demos? Why are demos so lifeless? Sometimes, the team’s not actually done. That makes a demo awkward. Other times, they can’t communicate what they did to the Product Owner; they don’t speak “business.” But most often, they simply don’t know how to give a good demo.
So, how do you give a good demo? Read on to find out »
Continuous Deployment
I’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’s experience with continuous releases. Yes, you read that right; they release, on average, 50 times per day.
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.
Read the whole thing 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?
7 Tips for a More Effective Daily Scrum
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’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.
Another Look at WatiN
At my current client, we’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’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’m pleased with the test code we’re producing in terms of readability, speed, flexibility, and maintainability. I’ve proposed an Agile 2009 tutorial session on the patterns I’m using to get those results, and I’ll post more on that topic here soon. (Which will hopefully help with one of WatiN’s shortcomings—documentation.)
Agile Product Management Boot Camp
Bob Hartman and I are offering an Agile Product Management Boot Camp course March 9-10 in Denver. If you’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’re helping your team maximize the value it delivers.
Web Testing for .NET Teams: WatiN or Watir?
I’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’s much more documentation and apparently a much more active community around Watir. And that Ruby language looks interesting too. What to do?
I think there are good arguments for both. Here are the major pros and cons from my perspective…

