JOB REFERRALS
    ON THIS PAGE
    ARCHIVES
    CATEGORIES
    BLOGROLL
    LINKS
    SEARCH
    MY BOOKS
    DISCLAIMER
 
 Tuesday, August 10, 2010
Death to Best Practices

Can we please put the whole term “Best Practices” to rest now? Apparently, according to this link (forwarded to me by John Dietz, thanks!), the very place where it originated (or was best popularized, depending on your interpretation of history) has now seen the whole concept basically debunked:

For example, Jim Collins’ blockbuster business book Good to Great, published in 2001, featured 11 supposedly great companies. All of them did extraordinarily well on the stock market for 10-20 years. But by 2008, when Steven Levitt posted Good to Great to Below Average on Freakonomics, two of them had died.
(Read more: http://timberry.bplans.com/2010/07/the-sad-truth-about-best-practices.html#ixzz0wBOxDrkh)

The point is, best practices just don’t exist. They are an attempt to take a solution to a problem out of the context and apply them across the entire spectrum, and that essentially invalidates the entire thing. A solution is only useful when considered in context.

Don’t believe me? Consider this challenge: when is it not a best practice to breathe? When you’re under water, of course.

(Unless you’re a fish. Or a frog. Or maybe a prince turned into a frog.)

Point is… context matters, folks.

Blind application of best practices don’t work, as Tim Berry’s article quotes from Jim Collins’ book (my emphasis):

Nine of the eleven companies remain more or less intact. Of these, Nucor is the only one that has dramatically outperformed the stock market since the book came out. Abbott Labs and Wells Fargo have done okay. Overall, a portfolio of the “good to great” companies looks like it would have underperformed the S&P 500.

Still think that the “best practices” idea might work? Prove it to yourself: do a detailed study of CEO performance across any given CEO’s career and across a variety of different companies who changed CEOs. In short windows, yes, you can find scenarios where a CEO had a stellar performance with a particular company for a particular period of time. But when you pan back and look across the CEO’s entire career (during which he/she practiced the same “best practices” at different firms), almost none of them have repeatable successes at a variety of different firms in any consistent manner (despite the millions handed to them).

In other words, for a good many of them, their success was nothing but blind luck. A monkey could have done just as well. The “superstar CEO” is generally a product of the five or so years in which his one firm was wildly successful.  Attempts to repeat the success at other firms (that is, in a different context) typically have failed or generated mediocre results. (Anybody know what Lee Iacocca is up to these days, he of “I will rescue Chrysler” fame? Come to think of it, can anybody name any of the 70’s or 80’s “superstar CEOs” that is still wildly successful today? Just one?)

How did this “best practices” thing get to be such a common meme? Because “best practices” mean, essentially, that the questioner doesn’t want to have to think. And it’s a seductive premise—if I just push the right buttons, type the right keywords, call the right methods and/or use the right classes, I can get something that “just works” without having to think about all those nasty little details that seem to trip people up: performance, scalability, security, blah blah blah.

Here’s the dirty little secret of our industry: Software development is hard.

Computer science is about tradeoffs and hard choices. Optimizing the code or design or architecture one way means taking hits another way. Trading static typing for dynamic typing means losing a set of already-written unit tests in exchange for a degree of flexibility in certain parts of the design. Using inheritance instead of parametric polymorphism offers some benefits but also adds some restrictions, and vice versa. Choosing an agile approach gains you greater feedback and closer connection to your customer (which typically means you’re closer to budget and critical features being completed on time), but requires more work and expertise to pull it off over other, more waterfall-ish, processes. And so on, and so on, and so on.

Tim says this well:

Don’t ever just blindly follow. You always think about it, consider the options, how it might be different in your case, and then, if it still sounds good, try it. Carefully.

If I ever give you any advice, I want you to please never take it without thinking first, analyzing, and deciding for yourself whether or not, and how, and to what extent what I say fits your situation.

(Read more: http://timberry.bplans.com/2010/07/the-sad-truth-about-best-practices.html#ixzz0wBQU3yCB)

But it’s not just the questioners’ fault: speakers, in their zeal to prove that they were smarter than everybody else, bought into the idea, too, because if I’m the one holding the “best practices”, then clearly I’m the one you want to come to with the development or consulting work. After all, who better to hire than the guy/gal with all the answers? In essence, we fed their addiction by tossing off “best practices” in pithy one-line answers (like “every class a service”) that turned out to be utter B/S pronounced by people who had, in some cases, never actually put that practice into practice for anything other than a demo or an example.

It’s time to say “no” to “best practices”.

Speakers: The next time somebody asks you for the “best practices” on a technology, respond with “The best practice you could possibly employ is to hire me.” That, or else with “There are no such thing. You cannot answer a question about a problem outside of its context.”

Attendees: The next time a speaker starts talking about “best practices”, walk out, because clearly the speaker is trying to feed you easy answers when in fact there are only hard choices.

It’s time for our industry to break the habit of taking hits off the crack best practices pipe, and start facing the fact that software development is hard.




Tuesday, August 10, 2010 12:08:53 AM (Pacific Daylight Time, UTC-07:00)
Comments [15]  | 
Tuesday, August 10, 2010 1:52:45 AM (Pacific Daylight Time, UTC-07:00)
Well, it's true that blindly following the so called "best practices" normally ends up in a failure. But I am not sure if that discredits the term as a whole. It has just been used wrong.
If someone has experience in a field, he has developed some methods and gained experiences. They have a context of course and you should know the context before considering to use them somewhere else.
I always use "best practices" as a starting point. So (hopefully) I can skip some of the mistakes that you would normally do in the beginning. But you always have to check if the practice really fits to your needs and in most cases you have to tweak them a little bit.

Maybe the term "best practices" is burned out now and we should create another (buzzword?) term, like "First hand experiences"?
Tuesday, August 10, 2010 2:58:00 AM (Pacific Daylight Time, UTC-07:00)
No discrediting needed, just a wakeup. Waking up doesn't discredit sleep :)

Finally a good old inspiring post. It could have been a tiny bit shorter, but hey: I read this one all the way through!

What really helps is the fact that there is no bullet list handhold

Thanks Ted
Seth
Tuesday, August 10, 2010 4:47:31 AM (Pacific Daylight Time, UTC-07:00)
While I don't agree with all of this post, one parts certainly rings true to me - "Don't blindly follow Best Practices"! For example, I've seen too many teams pick a particular style of Agile out of thin air, slap themselves on the back and pretend all of their problems are solved, it simply doesn't work that way.

Thanks Ted for a thought provoker!
Tuesday, August 10, 2010 5:18:10 AM (Pacific Daylight Time, UTC-07:00)
Completely disagree.

Fine, don't call them "best practices." But don't dismiss the wisdom contained within. Software is hard, and I'd much rather learn from others than to waste time going down a path that is useless.

If anything, it sounds like the problem is that there are those who simply accept what others say, rather than think about the advice given and determine if it makes sense.
Tuesday, August 10, 2010 5:23:15 AM (Pacific Daylight Time, UTC-07:00)
I do not necessarily disagree with the premise of the article that blindly following advice in any form, especially when given out of context, is a bad idea. I am certain this happens in the industry, however the way that I have applied stated best practices before, and have seen others apply them, is as guidance for unfamiliar technology not as a pre-packaged solution. It is a tool from which one can begin to learn a technology. I have no issue with the use of the term, or those that espouse them. Regardless of the source, I always question the information with my own line of thinking.

-Mark
Tuesday, August 10, 2010 5:36:16 AM (Pacific Daylight Time, UTC-07:00)
I never took best practice to mean don't think, just blindly follow. I always thought best practices where just someone's experience in dealing with something and you could apply those experiences to your situation if they were relevent. In other words, apply context. I never took best practices to mean dogma.
Terry
Tuesday, August 10, 2010 6:41:39 AM (Pacific Daylight Time, UTC-07:00)
Excellent post Ted! It's ALL about the context. A best practice in one situation just doesn't always work in another.
Tuesday, August 10, 2010 8:28:02 AM (Pacific Daylight Time, UTC-07:00)
There is one best practice to always follow: Use your Brain.
Eric Richardson
Tuesday, August 10, 2010 9:32:37 AM (Pacific Daylight Time, UTC-07:00)
Sucks for all those SharePoint people getting ready to go to their "Best Practices Conference".
Tuesday, August 10, 2010 10:09:43 AM (Pacific Daylight Time, UTC-07:00)
It isn't that there are best practices - it is indeed best practice to not hit your head with a hammer, or to avoid taking a bath with a plugged in toaster in your lap. The problem is that:

* We get sold things as best practices based on bogus arguments, such as arguments from authority (especially arguments from authority).
* There is not break in the vector from "it worked once well here" to "it will work awesome everywhere".
* The old discredited accountancy Arthur Andersen used to abuse the term without prejudice, and look where that got them!

As mere coders at the other end of the architect's beating stick, we get sold up a river of best practices crap all the time, and we do need to have a healthy nose for those "best practices" that are merely being sold to service some other agenda.

IT does not mean they do not exist, but the number of them are fewer than you think.
Aaron Erickson
Tuesday, August 10, 2010 12:01:57 PM (Pacific Daylight Time, UTC-07:00)
Thank you for saying this. I've hated the phrase "Best Practices" for years. If your idea of "Best Practices" is an 86-page paper put together by two interns and the least-effective developer on your team which does nothing but codify the mistakes you've made over the last fifteen years then you'll find that "Best Practices" and "best practices" have little in common.

"Best Practices" are always written based on past experience. "best practice" means using your brain.
Douglas Sims
Tuesday, August 10, 2010 1:18:16 PM (Pacific Daylight Time, UTC-07:00)
I am intrigued by this challenge ...
>> Consider this challenge: when is it not a best practice to breathe? When you’re under water, of course.

Here are more challenges ...

When is it NOT a best practice to use version control?
When is it NOT a best practice to test your code?
When is it NOT a best practice to gather requirements?
When is it NOT a best practice to give your developer a better tool?

Or, back to business

When is it NOT a best practice to follow the law?
When is it NOT a best practice to keep good liquidity ratios?
When is it NOT a best practice to care for your customer?

... I cannot think of any reasons now ...

Harry
Wednesday, August 11, 2010 10:42:29 AM (Pacific Daylight Time, UTC-07:00)
@ Harry:

1- When is it NOT a best practice to use version control?
- When you make simple app to do some simple task and throw it away; (silly but true)

2- When is it NOT a best practice to test your code?
- Testing is always necessary, but it's not a binary choice, there are many levels of testing and you must choose what kind of tests to do; (I could compare this question to "When is it not a best practice to WRITE your code?" =P )

3- When is it NOT a best practice to gather requirements?
- Same as in 2.

4- When is it NOT a best practice to give your developer a better tool?
- Better tools don't always solve problems, better people do. Sometimes your developer wants a better tool to solve a problem that don't even exists. If this is true, do not give him the tool.

5- When is it NOT a best practice to follow the law?
- Ask to the JOKER, he thinks that it's just funny (Batman movie is the context here);

6- When is it NOT a best practice to keep good liquidity ratios?
- Dunno, sorry. I'm not an economist, I'm an engineer. But I'm sure that the scenario exists;

7- When is it NOT a best practice to care for your customer?
- When you are a bank.

EXTRA: When is it NOT a best practice to learn better english?
- When you are out of money (but I keep trying).

All jokes aside, what I mean is...

"THERE'S NO SILVER BULLET." (THIS ONE WILL NEVER REST)
Marcos
Wednesday, August 11, 2010 6:48:04 PM (Pacific Daylight Time, UTC-07:00)
This seems odd.

the proof that Best Practices don't work is by giving an exceptional case where it won't work if you blindly follow it? pfffft :-)

thats "Blindly disproving"!

breathing is a best practice, do it :-) if you are daft enough to breathe underwater, then well, most any advice isn't going to help.

all I see you saying is , don't *blindly* apply best practice. But I'd say it's true that you shouldn't blindly do most anything. Don't blindly blog, don't blindly cross the road, don't blindly drive a car, etc

So disproving "Best Practices" by adding the word "Blindly"? Well, thats quite a dishonest disproof.

Can we see some proof that intelligently applied best practice fails? I'd buy into the argument then.




Friday, August 13, 2010 5:19:31 PM (Pacific Daylight Time, UTC-07:00)
Great post Ted! There are only practices - some great, some terrible and a million shades of gray in between. The context of the situation in which you find yourself should lead you to pick which practices you choose to employ. Everyone wants a formula or prescribed answer to an extremely complex problem - well guess what - there isn't one.

How do you know which practices to use? Experience and hard work - no short cuts I'm afraid.
Andrew Walker
Comments are closed.