BROWSE
GITHUB
Many ideas are born from the belief: the more complex, the better. The drivers are often anxiety, prestige races, misguided future-proofing, or simply obsessive optimization.
Have you ever thought about why regular Coca-Cola is called Coca-Cola Classic these days? Literally, if it’s not Zero, Cherry or Vanilla, it’s Classic, and there’s a reason for that. In short, back in the 80s, they felt threatened by Pepsi’s ‘better taste’ and invented the so-called ‘New Coke’. The new formula performed better in sip tests but completely failed en masse, so the company had to revert to the old formula and call it Classic. The reason behind all this fuss? Anxiety, I think, because we can’t really say Coke wasn’t doing fine back then: sales were good and the brand wasn’t struggling. Pepsi just was more confident and more aggressively marketed.
So, what happened there? Basically, to protect its market share, Coke overengineered the solution, failed, and rolled back the change. All because of some lack of confidence and fear of losing. And that happens not only to the big guys.
In my opinion, software developers are a special kind in terms of overthinking. They love to build stuff, make it reusable, automated, and optimized. Some folk are obsessed with it. Take a friend of mine—also a developer—who is almost always like: ‘If it can be somehow automated, it needs to be automated’. Sometimes I feel that he’s ready to optimize every little step of his life. And not just using third-party tools, he wants to build it all himself. Every single app or bot, just because ‘the rest are not good enough, I don’t have enough customization’. Dude loves barebones Linux, by the way, and installs every driver manually! Peak overthinking, if you ask me.
And I truly believe he’s not alone there, as there are always discussions in the IT world about whether we need to follow the DRY principle, be as abstract as possible and write tons of reusable classes, or just ship an MVP that works and be cool about it.
I’m somewhere in between: I don’t like the situations when we have a project built in a two-week cycle and there are patches sticking out all over the repo, but sitting on it for months covering every single edge case seems to be an overkill as well.
Why do they all do this? Overengineering, overthinking and all. My guess is the same as in the beginning: anxiety, a desire to prove something, an obsession with optimization. And the results? A drop in the bucket.
And by the way, quite a lot of ‘every’ here, don’t you think? I believe this word fits overthinking perfectly. I often try to account for every possible outcome, but life’s taught me one simple truth: no matter how much you try to think it over, you’ll never be able to guess it all. And, as a bonus, it’s stressful, fruitless in most situations, and can even lead to false conclusions.
This all led me to a very naive, surface-level but still important thought: if you don’t need to complicate things—don’t. Yes, the goddamn Occam’s razor, but I personally had to live through some experience to come to it.
Chill out, guys, chill out!