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.
Agile To Do List
I have decided to write a series of posts that I am now going to call my Agile To Do List. If you are planning on using some form of Agile software development like Scrum these are things that you are going to need to do.
This list is not going to be in order of priority for you. You need to evaluate your own situation an determine where improvements are needed most. However, I am quite convinced that if you are able to tackle this list with your team you will succeed.
I am going to add to the list here as I write the articles so that you will be able to grab them from one central place.
Okay, without further ado here is the Agile To Do List:
- Define Done (and make sure this includes testing).
- Create a Prioritized List (Backlog) to work from.
- Ensure Quality
- Fail (or Succeed) Quickly
- Have a Scheduled Weekly Demo (that ends with a reflection).
- Have a Scheduled Weekly Reflection (that begins with a demo).
- …
Like I said, as I complete the articles I will post the links here.
If you work at Shaw you need to help me out. 1
Over the course of the last two weeks my "High Speed Extreme-I" connection has degraded to the point where I am getting 1.7Mbps.
I have called in three times now.
During this last attempt the support agent suggested that a house call was in order. It was suggested that the solution to the problem was to "increase the levels" on my modem.
I have really lost patience for Shaw tech support. Consider the following:
- My router is a SonicWALL TZ170 so I can push 30Mbps of data through while encrypted with AES over a VPN. Plugging straight into the cable modem is NOT going to change my speed.
- I have had issues with signal strength before in another location - when this happens you speed tanks all of the time but I am getting a full 10Mbps after midnight (depending on the day).
- I just ran the new diagnostics from Google’s m-labs. It is claiming that my provider is queuing packets and that traffic volume is responsible for the degradation in my network speed.
- Most importantly, adjusting or boosting the "levels" is just wasting my time because it is clear that my node is over subscribed.
I was then told that this useless procedure might take until February 12th because all of their techs are booked. They will try to fit me in earlier because I have a business connection.
Let me rephrase this all in Mark-speak:
My connection has been degraded for over a month because half my neighborhood has discovered bit torrent and you want me to wait a week to send a tech out to my house to fix a problem that I don’t have.
At this point my Rogers Internet Stick is faster than my Shaw "High Speed Extreme-I" connection. The only thing "Extreme" about my connection is how Extremely slow it is.
Oh, and look at this. It is past midnight an my connection speed is now up from 1.7 Mbps to 6.3Mbps. Everyone must be finishing grabbing their torrents of 24.
Read more about the ongoing saga on my personal bog.
And if you are or you know someone at Shaw, help a guy out…