Good enough software

Andy Hunt and Dave Thomas talk about ‘Good Enough Software’’ in The Pragmatic Programmer: From Journeyman to Master. Specifically, they stress the importance of having a definition of ‘Good Enough’ for any given piece of work that is embarked upon. For instance, this definition will vary wildly when developing an automatic pilot system vs coding a throw away script to screen-scrape a fraternity website’s member listing.

Thinking many months later around the subject, I thought it might be useful at work to have a sliding scale drawn up that defines pre-packaged “good enough” standards. These would contribute or guide the definition of done and might look something like:

  1. NASA:
    • The product is fully tested, including unit, integration, system, random and load testing + 3 rounds of customer QA
    • The front-end meets usability standards x, y and z
    • The front-end meets accessibility standards x, y and z
    • All code meets our code formatting guidelines
    • A performance SLA is written up and the product surpasses it by x neurons
    • Technical, client and sales documentation are present and meet our doc standards…
    • etc.
    • It should work with the right input
    • It should not fail gracefully (we don’t have time)
    • It should not check for bad input (we don’t have time)
    • etc.

Clearly, there would be items between these two extremes.

Has anyone done this or something similar? I’m not sure there is a huge benefit to this, but having a definition of ‘Good enough’ per programming task or project is definitely a win. Thoughts?