Software Disenchantment: A Slightly Philosophical Look

As a software developer who roams around the social media circles, you might have already stumbled upon Nikita Tonsky’s post. I have been tinkering with programming every since I can remember. I have been writing code professionally for close to a decade now. Therefore, I couldn’t just leave Nikita’s words pass by me, and not leave a remark. Here’s a quote from Nikita’s post that sets the overall tone:

Only in software, it’s fine if a program runs at 1% or even 0.01% of the possible performance. Everybody just seems to be ok with it. People are often even proud about how much inefficient it is, as in “why should we worry, computers are fast enough.

Also…

So everything is just a pile of barely working code added on top of previously written barely working code. It keeps growing in size and complexity, diminishing any chance for a change.

And this…

That is not engineering. That’s just lazy programming. Engineering is understanding performance, structure, limits of what you build, deeply. Combining poorly written stuff with more poorly written stuff goes strictly against that. To progress, we need to understand what and why are we doing.

What should I say, I have been feeling very much the same way lately. Almost a decade down the road, I am yet to work on a project that only does one thing, but does it so well that there is no urgent need to maintain it. A project where updates, although inevitable, would take hours instead of months. Something that simply works and does not eat the resources of the system it is sitting on, just because it can.

Why stuff became so bloated, can be partially traced to the fact that hardware has gotten cheaper and more efficient, and this trend is most probably going to continue in the future. One could say that our willingness to reuse code has adversely led to overlaps and unintentional repetition. No doubt. Yet, IMHO, the real reason is that we as developers, or should I rather say human beings, hate to specialise. We love to abstract, to generalise, to hide the underlying details under the carpet.

This has a lot more to do with our evolution as humans, rather than with anything else. If you have ever seen or studied Maslow’s Hierarchy of Needs, you’ll know exactly what I mean. As organisms begin to evolve, their priorities shift away from the basics (food, toilet, reproduction, etc) to more abstract and higher-level goals. Having found a way to satisfy their basic needs, humanity started looking beyond the individual, and into the surrounding world. Having somewhat become the masters of their surroundings, humans started looking even further - into the deep unknowns of the Universe. All with one goal in mind - discovering who they are and what their purpose in life really is.

source Wikipedia

That’s it. It’s really simple. Our inability to solve this very existential question, makes us push ourselves further, in order to reach the next clue that might potentially give us the answer. Yet, the more we develop our, the more complex it becomes. In fact, so complex that we often underestimate the complexity we have created, and keep building right on top of it. From time to time, a major reality check would happen (what Nassim Nicholas Taleb calls a “Black Swan”, which stirs things a bit, but rarely does it manage to stall them, or reset them back significantly.

In case you’re still reading (I am impressed), let me reiterate with the particular case in mind. In striving to future-proof our creations, we overengineer them to the point that often starting from scratch is inevitable. I don’t think that this will change, or even, that it can change. The more we develop, the further away we’ll keep looking, and the more complex our surroundings will become.

As developers, we are especially prone to falling into the rabbit hole of complexity. Being aware of complexity, will perhaps help us restrain it in certain situations, or raise our awareness about the risk of potential failures. Such will be more and more deeply rooted, the further humanity progresses, and will occasionally reappear to restore balance.

One way to go about this is to simply acknowledge the fact, and design your life around the enjoyment of finding beauty in simple things. It’s not all lost, and it’s not that bad, actually. It’s just how human nature works. Nikita’s post ends on a positive nature about a brighter future, and so will I. Just like a negative black swan event might destroy the project you’ve been working on for years, so a positive one might bring the mythical well-scoped project that any developer has ever dreamed about.