Coding Horror

programming and human factors

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.

Written by Jeff Atwood

Indoor enthusiast. Co-founder of Stack Overflow and Discourse. Disclaimer: I have no idea what I'm talking about. Find me here: