Tuesday, July 19, 2011

Done Means Deployed

John Willis of DTO Solutions was shaking out their "Devops Workshop" here in Atlanta. Trying to cover 2 days of material in 1 day was a herculean effort. I took a bunch of notes, but one sentence resonated strongly with me.

Done Means Deployed.

If you read Agile books and blogs, or probably if you work in a software shop you have read or heard discussions about "Done-Done". We have them fairly regularly. For us, Done-Done means QA accepted all available tests. I don't think regression is even a requirement. Done-Done means the code is ready to be deployed to production (not all code gets regression tests).

When I heard John say "Done means Deployed" it all clicked. If your Development Department believes "Done-Done" is "QA Accepted" then your developers have the classice "Throw it over the wall" mentality discussed by the dev2ops blog.

If your developers adopt a "Done means Deployed (to production)" mentality, then they are invested in the code all the way until it is in front of the customer. They can't disengage from it until it passes the ultimate QA (the end-user). We haven't achieved this here, but I would bet anyone who has has seen a dramatic increase in software qualtiy as a result.

In order to do this you need, at a minimum, frequent deployments, and ideally approaching continuous deployment. If your deployment cycles are on the order of months, it is impossible because too much happens between check-in and deployment. You can't wait 3 months to call something done, and you can't expect a software developer to stay fresh on that much code.

We're working on speeding up our deployment cycle. I'm keeping this idea in front of us as a stretch goal.


  1. Great post Dan. I like the concept of extending "done" thinking. Does it stretch the concept too far to think of "done" as achieving business results?

    I've been digesting concepts in book "the four steps to the epiphany" by Steven Blank. If code is deployed, but not achieving business results, then done is not done.

    Or - do you consider that particular Dev cycle done, and a new dev cycle starts to course correct?



  2. Just found this post but never too late to comment ;-).

    @Kurt I think your point is more about doing the right thing vs doing things right, or as Eric Ries says in the Lean Startup "Achieving Failure". So in this particular case I think we can assume that whatever the deploy is it's actually the right thing to do in that sense then we can discuss what done means.

    @Dan As you write it, the final stage is the end-user QA. So I'd say "Done means deployed and tested" is better. Whether the test is automated or manual I just think it's important to add that last mile in terms of what "done" means. To make an analogy with a simple desktop app situation, it's just not enough to stop at the "install successful" screen, you must launch the app and run a basic set of "operations" to make sure the "install screen" didn't lie (that bi***)