I <3 Steve McConnell*
Coding Horror
programming and human factors
by Jeff Atwood

April 7, 2006

Best Practices and Puffer Fish

James Bach's seminal rant, No Best Practices, is a great reality check for architecture astronaut rhetoric. It's worth revisiting even if you've read it before.

Some might say Bach's viewpoint is pessimistic, even cynical:

The way to get rich in this world is mainly by making people feel large hope about a small exertion (i.e. "six-second abs", lottery tickets, voting in an election, maturity models, and stuff like that). If you want to get rich, do not tie yourself to the truth.

I say his viewpoint is not only healthy, but necessary. If it feels painful, that's good. The truth is always a little painful.

You should question all the advice you get. And you should especially question any so-called "best practices". The very utterance of the words "best practice" should set off warning klaxons, sirens, and flashing red lights. At that moment, you've left the realm of opinion and advice. You've entered the realm of evangelism and true believers.

And yet the world is full of best practices and tidy little checklists. Developers are all too eager to preach the one true solution ..

In way too many meetings, the fastest talkers win. And by "fastest talkers", I mean those who are the first to articulate an idea, challenge, issue, whatever. Too many of us assume that if it sounds smart, it probably is, especially when we aren't given the chance to think about it.

.. but problems are rarely that simple in the real world. Why? James Bach has a theory:

Do you know what's behind all this? I think it's simply that so few of us know how to do our jobs. Like puffer fish, many of us feel that we need to huff ourselves up so that predators won't devour us. We fluff ourselves full of impressive words.

A puffer fish

All this impressive talk is fueled by fear. The field of software development is so vast-- and the piece of it we know is so impossibly tiny. We're constantly living in fear that people will find out how little we know. That people will realize we're impostors who are lucky to still have a job.

Rather than simply stating what we've done and how we did it, we feel compelled to puff it up into a spiny, intimidating best practice. We attach our egos to our code frameworks. If someone doesn't agree with our approach, they're attacking us personally. If someone has a different best practice, they're amateurs who don't understand the problem domain.

Fear can make you do some irrational things. Being honest and humble is difficult-- it's painful to admit that you don't have the answer; that you're not an expert; that there are so many variables you can't control. But whatever you do, always avoid the empty trap of the puffer fish.

Posted by Jeff Atwood    View blog reactions
« Blocking Image Bandwidth Theft with URL Rewriting
How Much Power Does My Laptop Really Use? »
Comments

Not exactly relevant, and I haven't thought it through far enough to articulate it well, but your mention of fear nudges me to mention an idea I've been brewing.

I'm reading George Lakoff's Moral Politics, which lays out his strict father / nurturant parent frame dichotomy, particularly as it applies to politics. The other night I attended an XP user group meeting where the presenter tried to reconcile XP and CMMI (and, imnsho, failed). All of which leads me to think that the Lakoff frames map quite closely to these different programming camps. The CMMI, high-structure (for all that they deny it), high-artifact (ditto), fear-driven approach (fear that developers are incompetent, lazy, uncommitted...) prescribes Thou Shalt kinds of practices - very strict father, while the XP/Agile model is very much one of recommendation, with a lot of emphasis on, "here's what works for me; try it and see how it works for you. And if it doesn't - then do something else." Each, of course, has some elements that correspond to the other frame - CMMI level 5 is about changing what doesn't work, and we XPers can be a little (hah!) zealous about, eg, TDD - but on the whole I think these frames do a pretty good job of describing the two camps.

Carl Manaster on April 8, 2006 7:09 AM

"(i.e. "six-second abs", lottery tickets, voting in an election, maturity models, and stuff like that)."

Dare we say, "Teach yourself ASP.NET in 24 hours"? ;)

Scott on April 8, 2006 7:53 AM

Not only the fastest talkers, but the most talented and skilled writers get the last word, too. The idea which is presented in the most irresistably delicious way, wins public approval.

You're a very talented writer, Jeff, but I still agree with much of the stuff you say!

Although, "best practices" are not all bad, just badly named. They should be called "practices worthy of consideration." There are lots of "best practices" that are really good ideas in many situations, as long as you don't turn your brain off.

JB on April 8, 2006 8:08 AM

I love the font used for the special words that have to be entered here. I think I must be visually impaired by the squiggly ones that make some letters easily confused with others (and their own capital/uncial forms).

And as an architecture astronaut (I won't claim to be in recovery), I immediately subscribed to James Bach. Thanks. Good stuff.

orcmid on April 8, 2006 8:30 AM

I prefer the term "A Very Good Practice To Consider In This Given Situation Based On Past Experience and Analysis."

Haacked on April 8, 2006 10:31 AM

Hey Dude,

Good peice. I'm always amazed that people would even consider intellectual dishonesty as a viable route. But they do, and some are very prosperous doing it. Really honesty is just a valueless burden. So why do we do it?

Cheers,
Jan

Jan on April 9, 2006 9:17 AM

Oh, I just remembered that maxim that your story reminded me of:

Those who know don't tell, And
those who tell don't know.

Jan

Jan on April 9, 2006 9:19 AM

While disposing of "best practices" I'd like to also put "world class" in the same bin for similar reasons.

Lachlan Wetherall on April 9, 2006 5:35 PM

Enterprise can go as well.

HitScan on April 10, 2006 8:29 AM

Ugh I feel like a heal for pointing this out (on this posting no-less) but the image is that of a porcupine fish, not a puffer fish. Puffer fish do not have the spiney protrusions.

Tony on April 10, 2006 4:07 PM

Jesus saves. Satan invests. ;-)

Excellent post.

nat on April 14, 2006 9:32 AM

Good to see your mention of these issues. I hope you'll mosey on over to my blog some time. I think highly of James, and every once in a blue moon he comments there. :)

Permit a short riff: Carl posted about:

"George Lakoff's Moral Politics, which lays out his strict father / nurturant parent frame dichotomy"

Lakoff has done some good work, but I've always found it funny that he felt obliged to reframe that dichotomy. He used to call it "strict father - nurturant _mother_". Now he doesn't.

"Hey, George", I want to tell him, "let's play fair. I saw you palm that rhetorical card. By your own 'prototypes' model expressed in _Women, Fire and Dangerous Things_, it's gonna be either Mother-Father (high likelihood) or Parent-Parent (doubtful, given how prototype development probably works). 'Parent' is simply _not_ at the same conceptual level as 'Mommy' or 'Daddy'. It's like saying two matched alternatives are 'Bad Ducky' and 'Good Animal'. Get real."

Anything else is cheapassed pandering to an identifiable polity. And that's unbecoming of a scholar.

But I don't have to tell him. He knows it. And for him it's an acceptable tradeoff.

I smell another blowfish.

Nortius Maximus on April 21, 2006 11:35 PM

Somehow I completely forgot to link Dan Appleman's take on this:

http://www.danappleman.com/?p=33

--
We can’t know it all. We can, if we’re very lucky, learn those parts of it we need to solve the problems at hand. If only an expert could come along for each of these technologies and teach us just what we need to know - being sure to include those “gotchas” learned through harsh experience. In other words - “best practices.”

Sounds good, right?

The problem is, those best practices can come and bite you. Because the phrase “best practices” is misleading. It’s incomplete.

The correct phrase is: “Best practices for solving X class of problem”

“Best practices” are always associated with a particular set of scenarios. And if you don’t know those scenarios, you can be in deep trouble. Because best practices for one scenario can quickly become worse practices for another.
--

Jeff Atwood on April 28, 2006 5:13 PM

It is a very intersting article. It is the truth.

In real world , to sell / survive , you have to play the game
of 'Best Practices , Methodlogy , frameworks ... '

To get a contract , make a sale , the sales team provide the presentation of best practices , framework
and at the end of the day they get the deal.

Also , post your resume in Dice / Monster with the note " You do not believe in Best Practices "
You will get 0 calls .

Zair on May 18, 2006 7:38 AM

yep...interesting, quite relevant use of the porcupine puffer reference, In reality the whole puffing thing completely stresses them out, and too much of it kills them - a bit like life trying to get to the top of the pile eh?!

Oh if anyone is interested the image of a puffer fish out of the water is either dead or dying as it will be full of air rather then water - hope the hands not yours 'cause thats just bad sport (in my opinion only of course).

Sam

sam on May 30, 2007 12:44 PM

pufferfish can only inflate themelves three times in their life. You should never provoke a pufferfish to blow itself up for your amusement. This is very bad practice.

Marine Biologist on June 14, 2007 12:25 PM






(no HTML)


Verification (needed to reduce spam):


Content (c) 2009 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved.