Saturday, September 28, 2013

A View on Software "Best Practices"

"He is noble, wise, judicious, and best knows"
-- Shakespeare, Macbeth
Act IV, Scene II, Lines 16

Being in the software industry for a few years now, I've seen my fair share of "Best Practices" come and go: RUP, UML, CMM, Scrum, Agile, Lean, ITIL, ...  What you say, "Sir we have just starting using one of those 'Best Practices' you have said have come and gone and we have never been better!"  Perhaps.

"In his writings, a wise Italian
says that the best is the enemy of the good
-- Voltaire, La B├ęgueule

But sir you say, "What does a dead French man have to do with our newly implemented 'Best Practice'"!  Everything!

The best is the enemy of the good, in fact as Sir Robert Watson-Watts say, "Give them the third best to go on with; the second best comes too late, the best never comes"!  Surely I jest, the third best, why not just the worst or the worst worst, why even brother at all?!?  How could any enterprise live with the third best?!?

Question, do you even know what the third best would be for you?  Do you know yourself well enough to know if something is even the third best for you?
As the Temple of Apollo says, Know thyself!  Know thyself, one of Apollo's most deadly arrows.  I know you do not have time for philosophical crap, but the question is still valid.  If you actually know yourself, as you are now not as you want to be, it would be easy to chose practices that work for you.  Practices that work for you as you are now, as you are as a being in this time, at this place, in this context in history.

I know, no philosophical crap!  The point is that truly knowing, you cannot lose.

"If you know the enemy and know yourself, you need not fear the result of a hundred battles. If you know yourself but not the enemy, for every victory gained you will also suffer a defeat. If you know neither the enemy nor yourself, you will succumb in every battle."
-- Sun Tzu, The Art of War, Chapter 3

As Sun Tzu says, knowing yourself is not enough to truly find a best practice (yeah, I just used that term again), you must also know the context in history.  What is the situation, who are the players, what is needed, what do you have, ...  In less words, the context in history.

"A very popular term within the IT community is 'best practice'. It's a wonderful marketing term, how could someone possibly argue about adopting a best practice, but does the concept really make sense? I'm not so sure. There are many examples where a practice that is considered "best" in one context is questionable within another."
--Scott Ambler, Questioning "Best Practices" for Software Development

Scott Ambler is championing context in history and knowing thyself.  There are many different ways to see things.

From one point of view, four 2x4s on the ground next to each other is the number 4, but from another point of view there are 3 open spaces created.  Seeing both points of views at the same time, one is able to chose which point of view is best for them in their current historical context.

Have we gone off the topic at hand?  What about Software "Best Practices"?  Today's "Best Practices" as a colleague of mine, Dave Smith pointed out,  "Today's 'Best Practices' are just the currently generally acceptable practices".

A Software "Best Practice" is often just something that can broadly work and has been attempted to be generalize and sold to different companies.  If you know yourself and know the context in which you exist, then you would be able to pick and chose the best bits of different practices that are applicable to you and your current context.  If you find that one does not work as you thought it would, then do as the old joke goes, "Doctor it hurts when I do this.  Then stop doing that"!