IT Myths (1): Best Practices

IT Myths (1): Best Practices

I don’t know about you, but I feel uncomfortable when asked about “Best Practices”. I manage to give the expected answers, but I still feel uncomfortable. Now, if you’re one of the people who liked – or retweeted – this tweet, you don’t need to be convinced that “Best Practices” are a dubious thing. Still, you might find it difficult to communicate to others, who do not share your instinctive doubts, what is the problem with it. Here, I’ll try to explain, in a few words, what is the problem with it in my view.

As I see it, this juxtaposition of words cannot be interpreted in a meaningful way. First, let’s stay in the realm of IT.
Assume you’ve bought expensive software, and now you’re going to set up your system. The software comes with default parameter settings. Should you need to follow “Best Practices” in choosing parameter values?

You shouldn’t have to. You should be fully entitled to trust the vendor to ship their software with sensible parameters. The defaults should, in general, make sense. Of course there often are things you have to adapt to your environment, but in principle you should be able to rely on sensible defaults.

One (counter-)example: the Oracle initialization parameter db_block_checking. This parameter governs whether and to which extent Oracle performs logical consistency checks on database blocks. (For details, see Performance overhead of db_block_checking and db_block_checksum non-default settings.)
Still as of version, the default value of this parameter is none. If it is set to medium or full, Oracle will either repair the corrupt block or – if that is not possible – at least prevent the corruption spreading in memory. In the Reference, it is advised to set the parameter to full if the performance overhead is acceptable. Why, then, is the default none? This, in my opinion, sends the wrong signal. The database administrator now has to justify her choice of medium, because it might, depending on the workload, have a negative impact on performance. But she shouldn’t have to invoke “Best Practices”. While performance issues can be addressed in multiple ways, nobody wants corrupt data in their database. Again, the software should be shipped with defaults that make such discussions unneccessary.

Second, imagine you hire a consultant to set up your system. Do you want him to follow “Best Practices”? You surely don’t: You want him to know exactly what he is doing. It’s his job to get the information he needs to the set up the system correctly, in the given environment and with the given requirements. You don’t pay him to do things that “work well on average”.

Thirdly, if you’re an administrator or a developer, the fact that you stay informed and up to date with current developments, that you try to understand how things “work” means that you’re doing more than just follow “Best Practices”. You’re trying to be knowledgeable enough to make the correct decisions in given, concrete circumstances.

So that was IT, from different points of view. How about “life”? In real life, we don’t follow “Best Practices” either. (We may employ heuristics, most of the time, but that’s another topic.)
If it’s raining outside, or it is x% (fill in your own threshold here ;-)) probable it will rain, I’m gonna take / put on my raining clothes for my commute … but I’m not going to take them every day, “just in case”. In “real life”, things are either too natural to be called “Best Practices”, or they need a little more reflection than that.

Finally, let’s end with philosophy 😉 Imagine we were ruled by a Platonic philosopher king (queen) … we’d want him/her to do a bit more than just follow “Best Practices”, wouldn’t we 😉

2 thoughts on “IT Myths (1): Best Practices

  1. Hi Sigrid,
    basically I would agree, but I think:
    – that the list of settings with not especially convincing defaults is not so short: in Oracle for example there are many automatic features I would prefer to deactivate/adjust.
    – in areas in which I don’t have a solid knowledge I am quite happy if I find lists of “best practices” – in the sense of initial recommendations (something like: what’s a plausible setting for parameter x in a system of type y). Of course this is not the most scientifical approach – but I use it if I don’t have the time to dive deep into a certain topic. And of course I still have to determine if the suggestions are useful (but in most cases I think I can tell this from the presentation of information).


  2. Hi Sigrid,

    another nice post! 🙂
    I both fully agree and disagree…
    In the IT, or in our smaller database world, there ARE some “first level” best practices that we MUST respect at least to “work well on average”, and despite you mention that you wouldn’t pay your DBAs to do things like that, it’s still very surprising to see how many customers are not even doing that.
    I have had many “quick wins” even recently just by running an OraChk on Oracle or an sp_blitz(tm) on SQL Server…

    There is also a second level of “best practices”, it’s about OUR OWN best practices, something that we get from our experience or, if we listen enough, from our colleagues.
    (Do you remember that famous “12c hidden parameters” post from Mike Dietrich? Those hiddens parameters are an excellent example of how our best practices may differ from the generic ones.)
    This is something that we would put in place when we want to guarantee an “average good” level of performance AND security without having to dig too much inside a non-problematic database.

    Of course, problematic databases exist, and that’s where we need to be knowledgeable enough to make the correct decisions 🙂

    Just my 2 cents…


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s