Originally published 25 April 2010
After a few years of attempts to understand engineers and customers, I have come up with two analogies that make sense to many people.
Brushing cats.
I have a fairly long haired cat who likes to be brushed. The evidence is conflicting about the benefits or harm, and even the success or failure of the brushing.
"Debugging" is a cat brushing activity, and cat brushing conversations are as likely to be had with customers as with the engineers. Customers may fail to perceive the benefits of a managed release, and frequently urge the engineering staff to make many tiny changes that only point to the things still left undone -- a pile that never shrinks.
I suppose there is always air brushing, but I will leave that for another day.
Brushing teeth.
Some years ago, I knew a woman who had a lot to trouble with her teeth. She just did not get the good dental genes, and it frustrated her that I had no cavities, no root canals, etc. She told me to use more toothpaste, and she frequently passed along advice to me not to use the soft or the medium or the hard toothbrushes; I have forgotten which. After a bit of listening I told her my theory that the important part about teeth brushing was doing it often and after meals, not how much toothpaste was used, nor exactly which manufacturer's toothbrush.
There are many things in software development that are like brushing teeth: just be sure to do them rather than not, and it is probably unnecessary to further optimize the activity. The most prominent analogy is in the field of tools and processes: it is important to do backups and to follow a version control system --- which tool is used or what time of day the backups are taken is an order of magnitude less important.