What is helpful in some situations can be harmful in others. Context matters.

Photo by Julie Viken:

I am Wilderness First Responder. Every couple of years, we have to go through a recertification process. As part of that, we talk about common medications that we might encounter. We talk about Advil, Tylenol, Benadryl, and other common over-the-counter medications. We talk about the problems they can solve and why we would give them to a patient.

Just as importantly we talk about counterindications - reasons why we wouldn't give them to people. The same drug that is generally helpful can be harmful under certain circumstances. For that reason, every drug comes with contraindications. Next time you buy any medication (OTC or prescription) at the pharmacy, take a look at the box, there is a list of contraindications on there somewhere.

All Development Practices Should Come With Counterindications

I've come to the conclusion lately that all advice around software development should come with counterindications. At the very least if you are going to champion a certain technique, you should be very clear about the context in which you are operating. The needs and constraints of a Google are not the same as the needs and constraints of a small 10-person manufacturing company that just wants to verify their widget works before they ship it. What works for Google may be very harmful in that context, so don't just try to emulate what everyone else is doing. Understand the context and the counterindications.

An example

As an example, I recently read Secure By Design. The book talks about Domain Driven Design (DDD). The authors pointed out when DDD was appropriate and when it wasn't. DDD is very helpful when you have a lot of complex business rules. It is not appropriate when the complexity of your code comes from things like timing requirements or really complex calculations. I was very impressed that they took the time to spell that out so clearly.

Ask When Wouldn't You Use This Technique

Next time you see a presentation at a conference on a new technique, I encourage you to ask the presenter this question: When would you choose not to use this technique? If they don't have an answer, I would take their advice with some caution. It may apply to your situation, or it may actually make your situation worse.

Very rarely have I had audience members ask me that question when I present, but it is a very important one. If you ever see me present and I don't make the context I'm coming from very clear as to where my advice applies and where it doesn't, please call me on it. I won't be upset. You'll be doing the rest of the audience a service.