Yes, certainly the best “definition” of done is “we can ship it!”. In reality however, many teams are either not at this ideal state yet or have a large enough organization around them with different understandings of “done” or “shippable” (do release notes count, too? Translations? User manuals?). Just creating a common understanding of what “ship it” (or “done” for that matter) means is a huge benefit.
The important bit we both point out here is: DON’T OVERDO IT! Its not a “formal 10-pages definition document handed down by management”, but it is a simple bullet point list of a few things people might have different understandings of. Here is an example DoD:
- Automated tests were created and pass
- Code has been reviewed by another developer
- Release notes are written
- Deployed to staging server
That’s it. And it will be continuously updated by the team after retrospectives.