One of the things any of us want to do when we determine our process is define what “done” really means. We typically have three different definitions of done:
Done
…in a traditional Waterfall development environment, means that the developer who wrote a feature was able to get it to run, and got some kind of result on her machine. That’s not good enough.
Done-Done
…means that not only does it work on the developer’s machine but it’s also integrated into the build. We see it beating along with the heartbeat of the project and can quickly detect any potentially fatal arrhythmias.
The third definition of done is…
Done-Done-Done
That means the code runs on the developer’s machine, is integrated into the build, and is clean and supportable. This is an area that has always been missing in most of the software development world. We absolutely need to have supportability so we take the time to clean up the design and change the code to make it more readable, understandable, and simpler to work with. That’s a very important step.
So done-done-done means that not only does it work, not only is it integrated into the build, but it’s understandable, it’s readable, and it’s supportable. We all want our code to be all of those things because we want to drop the cost of ownership in software.
So when I say code is “done” I really mean it’s done-done-done.