Agile To Do List: Defining Done
Ever ask someone how they were doing and then got the reply, "Fine" - what does fine actually mean?
As far as I can tell fine used to mean a little closer to good then bad but now I am convinced that it actually the equivalent of someone saying either "You don’t really care how I am feeling and I don’t really care to tell you!" or it means "I am feeling so bad right now that if I actually tell you I am going to burst into tears and it is going to ruin your day."
I think that software teams have the same problem with the word "Done" - what does done actually mean?
Done can mean a lot of things including:
- Delivered
- Documented
- Tested on Production
- Pushed to Production
- Staged
- Tagged in the Repository
- Acceptance Tested
- Ready to Demo
- Committed to the Repository
- Unit Tested
- Peer Reviewed
- Ready to Test
- Barely Working
What does done mean for your team?
An exercise that like to do is to have everyone write down their definition of done and then read out the definitions to the team (obviously without naming who wrote the definition). Then as a group come up with a universal definition of done. Once you all agree hang it up on the wall in a nice frame. Have the creators sign it. The visibility of the definition will keep people honest.
It is important to note that the definition will need to be different for every team. You probably do not have access to the production environment. Maybe you work for a large company that has policies requiring someone else stage or acceptance test your code. Work with what is realistic.
When it comes to the definition of done the most important thing you can do is just talk about and agree upon the definition. The definition is less important.
Once things are getting done then work on expanding your definition.
When you are starting out it is sometimes a tall order to go from a concept to code that is working on production in a week. There needs to be a lot of tools in place to allow this to happen. As the team gets better include more in the definition. If you are working on a large project going from a Story to Done in a week or two might be a tall order without the right processes and the right tools.
Here are some practices and tools that will help expand your definition of done:
- Behavior Driven Development: rSpec, nBehave, NSpecify, JBehave, NSpec
- TDD and Unit Testing: xUnit (Yeah, there is a unit test framework for your platform. You need to fine it though.)
- Continuous Integration: CruiseControl, CruiseControl.NET, Cruise, TeamCity
- Virtualization: VMWare, Cirtrix Xen
- Scrum, XP: Mingle
When we started out our definition of done was demo-able. Now it means delivered.
Start small. Think BIG.