Back when I was just getting my teeth into agile software development I was confused as to when a project can be considered done. Some colleagues said that when it was good enough or when they stopped being paid; but most of the definitions were too vague and indeterminate. When can we step back and safely say that all the necessary steps for producing a quality product have been satisfied? I sat down and considered all the "musts" and "shoulds" from a variety of sources and created the following list.
What is “done”?
- … the software has been written to address the requirements of the end-user. No more, no less.
- … the software has a suite of tests written to exercise and validate that it meets the requirements and is technically valid.
- … the software’s source code has been reviewed by a peer, preferably peers.
- … the software’s source code meets the development teams coding standards.
- … the software’s source code has been factored into logical and easily readable sections.
- … the software’s functionality has been tested by integrating it into the system it will reside.
- … the software’s functionality has been documented and described for future developers and users.
- … the software has been tested and reviewed by a quality assurance expert.
- … the software has appropriate installation and/or configuration procedures created and documented.
- … the software’s functionality has been verified as meeting the requirements of the end-user by the end-user.
Special thanks to Derik Whittaker for digging up this document, the original is archived on some backup disc that I will have to find eventually but it was written in the Autumn of 2006. Click over to Derik's blog and read some of his stuff, it's worth your time. Derik Whittaker's blog.