JOB REFERRALS
    ON THIS PAGE
    ARCHIVES
    CATEGORIES
    BLOGROLL
    LINKS
    SEARCH
    MY BOOKS
    DISCLAIMER
 
 Wednesday, December 05, 2007
A Dozen Levels of Done

Michael Nygard (author of the great book Release It!), writes that "[his] definition of 'done' continues to expand". Currently, his definition reads:

A feature is not "done" until all of the following can be said about it:

  1. All unit tests are green.
  2. The code is as simple as it can be.
  3. It communicates clearly.
  4. It compiles in the automated build from a clean checkout.
  5. It has passed unit, functional, integration, stress, longevity, load, and resilience testing.
  6. The customer has accepted the feature.
  7. It is included in a release that has been branched in version control.
  8. The feature's impact on capacity is well-understood.
  9. Deployment instructions for the release are defined and do not include a "point of no return".
  10. Rollback instructions for the release are defined and tested.
  11. It has been deployed and verified.
  12. It is generating revenue.

Until all of these are true, the feature is just unfinished inventory.

As much as I agree with the first 11, I'm not sure I agree with #12. Not because it's not important--too many software features are added with no positive result--but because it's too hard to measure the revenue a particular program, much less a particular software feature, is generating.

My guess is that this is also conflating the differences between "features" and "releases", since they aren't always one and the same, and that not all "features" will be ones mandated by the customer (making #6 somewhat irrelevant). Still, this is an important point to any and all development shops:

What do you call "done"?


Wednesday, December 05, 2007 1:28:26 PM (Pacific Standard Time, UTC-08:00)
when it compiles...
Typical Developer
Wednesday, December 05, 2007 9:35:17 PM (Pacific Standard Time, UTC-08:00)
When the owner stops paying for improvements.

I disbelieve in a technical definition "done", and it's one of the brilliant realizations of Agile development that it rejects the whole notion of defining an end-point at the outset. Each iteration is followed by another, and there's no natural endpoint for an agile project, which reflects the business reality I see everywhere. When development on a code base comes to an end, it's always for unnatural -- that is, non-intrinsic -- reasons. In my experience, No feature or product has ever reached a state of perfection, where the business has no new change in requirements or wishlist of functionality. So no feature or product is ever "done".
Tuesday, December 11, 2007 10:01:04 PM (Pacific Standard Time, UTC-08:00)
Primarily: 4, 7, 11, 12, and some 5 works very well for the company I currently work for which makes bucket-loads of cash so this must be sufficient in the tpractical sense. The phrasing of the items in the list (e.g. #6) suggests the author has a narrow domain of software in mind.

No real code can ever meet all 12, or is the author really trying to say that code is never done? Or perhaps just trying to sell more books?
Matthew
Tuesday, December 11, 2007 10:10:21 PM (Pacific Standard Time, UTC-08:00)
Definition:

"Done" (as in software)
-adjective
1) the state in which software is in until it is replaced.
Matthew
Comments are closed.