I have a favorite metaphor: “Sacred Cows, and Third Rails.” I use this to refer to concepts or features that no one wants to touch –either because they are so “required,” that to even question them, is tantamount to heresy, or that they are so “dangerous,” that to even suggest them is tantamount to … heresy.
“The most erroneous stories are those we think we know best -and therefore never scrutinize or question.”Stephen Jay Gould
“We’ve always done it that way” is a fairly common explanation as to why we do something. “We’ve always had a big red call to action button on the bottom right,” or “All our users want to be able to print.” are examples of this.
Another example might be “This new programming language is what EVERYONE is using! We need to use it, too!”
In my experience, the very existence of a “sacred cow,” is justification to question it. In many cases, there is a good reason for something (like brand reinforcement, which often explains things that empirically-minded engineers may not immediately understand), but often, these requirements may not age well.
I don’t think there’s any harm in re-justifying every feature that we add to a project. We may be doing something like a slow migration from one UX, to a new one, so the feature may become increasingly deprecated, in each release. The important thing, is that we plan this.
“We should be careful to get out of an experience only the wisdom that is in it -and stop there; lest we be like the cat that sits down on a hot stove-lid. She will never sit down on a hot stove-lid again -and that is well; but she will never sit down on a cold one anymore.”Mark Twain
“We’ve never done it that way, before”, “We can’t spend any money on this”, or “That is a bad programming language” are some examples of the types of things that indicate the presence of a “third rail.”
An example might be the choice of a programming language, for a new coding project. Usually, software developers have strong biases. These may be well-informed, well-researched opinions, based on empirical data, or they may be more “reactionary” and emotional biases, based on personal insecurities, or past trauma.
“I tried using C++, years ago, and it was totally unsuitable” could be one example, or “Everyone knows that PHP is an insecure language” could be another. These are used as bars to even consider these languages, which are, in fact, quite powerful, and have many reasons for serious consideration.
In conclusion, I have found that when I refuse to consider something; either by questioning the need for it, or by refusing to examine it as a valid approach; or if I just assume that something should be done, even with no research, I am in “Sacred Cows and Third Rails” territory, and it’s a good idea to get out of my own way.