I wrote Always Be Closing and it spawned a conversation about what it means to be “done”, so here’s a Definition of Done I wrote a few months back.
“Done” means different things to different people. It’s important to be clear about what you mean when you say “Done”.
Some example definitions include (in roughly increasing order of “strength” / “thoroughness”):
- “I hacked some code together and it seems to do the thing”
- “I built a thing and it works but it has no tests” (At this point “how do you know it works?” seems a good question)
- “I built a thing but it has no documentation”
- “I built a thing and it’s running on the dev environment but isn’t live yet”
- “I built a thing and it’s in production”
- “I built a thing and real live users are using it and are happy with it”
- “I built my part of the thing”
- “I built a first iteration of the thing”
These are all things that are completely reasonable to use “done” for, as long as you’re clear about your definition.
Nobody wants to be in the position where they’re acting as if you’re “more done” than you really are.
Being “more done”
A checklist for “how ‘done’ am I?”; as with everything, not all of it may be appropriate.
- Does the code follow relevant standards and conventions?
- Are there automated tests? (If they’re not run by default by our CI service, there might as well not be)
- Are there any outstanding TODO/FIXMEs? (Either do them, or turn them into issues)
- Is it documented somewhere appropriate?
- Is the code running on dev?
- Has someone not-you used it?
- Is the code running on live?
- Are real users using it?
- Are real users happy with it?
- Are there outstanding improvements / changes needed?
“A prototype is worth a thousand meetings”.
Ship the thing (whatever it is) as soon as you can. Maybe that means a demo. Maybe that means hiding it behind a feature flag. Maybe that means a half-formed PR.
The sooner you get something out into the light of day and visible to other people, the better.
Properly and fully “done” is good (whatever that means!), but until you’re there, iterate and ship incrementally as much as you can.