There are no best practices
Last week I had a good retweet day. As always when that happens, I said something cocky and over-simplified. I blame 140 characters; the perfect excuse to simplify things to become more edgy. This time the tweet was:
I hate best practice. If you follow best practice you will end up with Maven, SVN and programming in java (the language) #rest_my_case
I was promptly corrected by @jchyip (Jason Yip):
@johlrogge That’s equating “common practice” to “best practice” which is a very common failure mode. Popularity != best option.
He couldn’t be more right. In fact, I have often felt that what is marketed as best practice is often common practice with a more attractive label. The two are confused a lot. It sort of makes sense too, I mean – if everyone is doing it, it must work. Right? If it wasn’t the best then why would everyone do it? Granted it will probably work just fine, but will probably not be the best, so don’t call it that. Assuming that excellent software development is rare, then best practices should also be pretty uncommon. Given this, you probably shouldn’t be doing what everyone else is doing, if you are going for “best”.
So what is a best practice, really?
First some definitions from googling define:”best practice”
A process, technique or innovative use of resources that has a proven record of success in providing significant improvement in cost, schedule, quality, performance, safety, environment or other measurable factors that impact the health of an organization – www.reliableplant.com/Glossary
The optimal solution to a business problem. – campuspol.chance.berkeley.edu/GlossaryofTerms.doc
A way or method of accomplishing a business function or process that is considered to be superior to all other known methods. –www.qaproject.org/methods/resglossary.html
A best practice is a , method, process, activity, incentive, or reward that is believed to be more effective at delivering a particular outcome than any other technique, method, process, etc. when applied to a particular condition or circumstance. – en.wikipedia.org/wiki/Best_practice
Those quotes do not all say exactly the same thing. Some of them appear to be narrowed down to a context such as business processes or organization issues. Others are just plain naive like “the optimal solution to a business problem”. It is important to realize that a best practice is context bound. I got a reply to one of my tweets about that from Viktor Klang
@johlrogge “Best” implies that all use-cases are equal in both resources and restrictions, which never is the case. What is being measured?
As we have all experienced over and over, what may work brilliantly for someone else may not work so well for you. As Viktor points out, we must be aware of the context in which a practice is supposedly “best”. All things considered, the number of contexts for software development is a very large number. That makes it hard to provide any useful general advice at all. The context must always be considered and measuring the correct things is a science of it’s own (I’d even say that for software it’s an unsolved problem so some of those definitions cannot apply to software, in my humble opinion).
But that is not the only problem with best practices; “best” implies there is nothing better. Isn’t there? I’d say that if we look at what we are doing today and find that it’s exactly what we were doing 2 years ago, it probably means that we don’t spend enough time looking for better practices.
Looking for better practices
“Best” implies “ultimate”. Way too often the term ‘best practice’ is associated with something someone is trying to sell you: “my method is founded solely on best practices” (like ITIL). I think that is why we don’t call our best practices “currently accepted theories” which would be more science-like in the sense that they invite better theories to replace them. To illustrate, try this sentence: “we use best practice until a better best practice replaces it”. Sounds kind of silly, doesn’t it? (That is right: good, better, best; only a hobbit would add “bestestest” to that)
I found this page that describes the scientific method. It goes on and on about how good theories “invite replacement” like in this quote from the conclusion:
Any system of thought that proclaims itself to be “ultimate” or beyond correction is dogmatic and wrong: The best theories are the ones that happily give way to better theories.
The worst are the ones that do not budge and refuse to admit new evidence that disputes them. They become stagnant and outdated.
Science is revolutionary because it accepts new facts, new evidence and new thought. New knowledge acquired from the scientific method frequently changes society with technology and ideas. It is refreshing, challenging and above all the scientific method continues to dynamically improve its description of the world.
I currently subscribe to many theories of software development. Like – the theory of continuos refactoring, the theory of continuos integration, the theory of release early and often, the theory of self-verifying specs and so on. I use, support and promote them because they, among other theories, are the best I know of when it comes to developing software. But even such fine theories cannot be prescribed without a context. Releasing early and often may not be a good idea, if what you get payed for is upgrades to new versions of your software. It may not be a good idea if you are unable to verify the quality of your system as fast as you can deploy new versions of it. Also, no matter how good a theory seems to be – compared to what you were doing yesterday, always assume there is a better way (that may even be the complete opposite of what you’re currently doing).
I’ll sum up my point here in a tweetable way: Don’t settle for best, always look for better.