This is more interesting than your average tweet as it contains three or perhaps four different opinions together.
Firstly I’d like to briefly introduce everyone:
Anne Lamott is the author of several books, including “Bird by Bird: Some Instructions on Writing and Life” where this quote appears. The full paragraph is:
Perfectionism is the voice of the oppressor, the enemy of the people. It will keep you cramped and insane your whole life, and it is the main obstacle between you and a shitty first draft. I think perfectionism is based on the obsessive belief that if you run carefully enough, hitting each stepping-stone just right, you won’t have to die. The truth is that you will die anyway and that a lot of people who aren’t even looking at their feet are going to do a whole lot better than you, and have a lot more fun while they’re doing it.
Sonja Ablignaut is the founder and CIO of More Beyond, which offers Strengths Finder based coaching.
Esther Derby runs Esther Derby Associates Inc. which provides Agile Consultancy services, and retweeted Sonja’s quote.
Dan North is and probably will forever be best known for introducing the development world to Behavior Driven Development.
Now I would like to give my take on all of this:
Anne Lamott: I agree. Writing is an art, and a process that requires continuous refinement.
If you are writing a book, your first draft is rarely going to be much good. Writing a blog post is a lot easier than writing a book, but it’s still common (at least for me!) to have a crappy first draft. As an example, if I demanded perfection from own blog posts, I would have published exactly zero articles.
Sonja Ablignaut: Appears to be making a link between Anne Lamott’s quote and Software Development. If this is the case, then I agree! One example of this might be having a vision of the perfect product with every imaginable feature. Another example might be insisting on 100% code coverage.
Jim Coplien: Insists on zero known defects. I agree.
Dan North: Sees Irony. I entirely disagree! These two concepts are hardly related at all. Why?
The beginning of wisdom is the definition of terms. – Socrates
refusal to accept any standard short of perfection.
1) the expression of one’s meaning by using language that normally signifies the opposite, typically for humorous or emphatic effect.
2) a state of affairs or an event that seems deliberately contrary to what one expects and is often wryly amusing as a result.
There is some debate regarding whether a defect is a bug, or a deviation from requirements. I will use the term bug, but regardless of your definition here, in absolutely no way does refusing to ship with known defects equate with perfectionism.
Zero Defect Tolerance is about satisfying your definition of done.
Zero Defect Tolerance values:
Quality over mediocrity
Professionalism over sloppiness
However having no defects does not mean that the software is of high quality. Far from it! It is quite possible to create awful software with zero known defects. Zero defects is a very low baseline. However, having zero known defects is the most fundamental, most obvious and most important measure of software quality that we have.
But perfectionism? No that is something else. Perfectionism is pursuing the unattainable. Having zero defects (that we know of) is not only attainable, it can be quite easy, as long as you don’t get too far ahead of yourself.
Write tests as you go and fix tests as you go. Write tests that match what your users actually want, and for everything that your users want. And then ship.
And version 1 will be a long way from perfect. But if it has no defects, that’s a good start and gives you a good foundation to build on.