Home Projects Blog Contact

Frustrations behind simplicity

Published

Tags: opinion programming rant

Simplicity has become an ideology within software development circles, there are entire websites, YouTune channels, blogs, conferences where people spout the same nonsense: “Just keep it simple, stupid”. I’ve spent years adhering to the dogma myself both as a user and a creator, the effects have rubbed off onto me and will likely stay there till the end of time.

“But isn’t it a good thing?” I hear you ask, “Surely, focusing on simplicity will help you create software that works for everyone, right?” and yeah sure, it might run on a Raspberry Pi, but that ideology makes you hostile to every single feature, unless it satiates whatever metric you’ve chosen…

Wait… metric?

Let’s say that you are an adherent of simplicity, and like a good citizen, you want to make your software “simple”… One question, how? “simple” in what way? Your “simplicity” differs from the “simplicity” of someone else!

Many in the “extremist” circles consider lines of code to be a measure of simplicity, which is stupid because then you’ve guaranteed that you’ll not only cut corners but also essential features just to stay under whatever arbitrary limit you’ve forced onto yourself.

Lines of code does not determine anything meaningful to an end-user, you can write a C program that’ll hog memory in less than 30 lines, does that make it simple? maybe, but is it actually useful? No! Tons of suckless software is like this, it’s too minimal and simple to actually be meaningful.

Let’s take the stupid, simple surf web browser as an example, wanna take a guess at what important features it’s missing?

  • Tabs… Yeah no, TABS!!! You’re expected to either download and setup a different stupid, simple app JUST for tabs or to live with only a single window.
  • Ad blockers, y’know the one thing that makes the Internet 90% more bearable. Just another “bloated” feature that had to be cut off to satiate the simplicity gods. Their alternative is “host-based blocking”, an alternative so weak and inflexible by comparison that it makes Manifest v3 look like a blessing…

I honest to goodness don’t think suckless and all its ilks are real, I genuinely think they’re some CIA psyop paid to make software engineers look unrealistic… A web browser, you say? Well it’s missing two thirds the features of one!

Don’t get me started on their IRC client, the one that’s so “minimal” and “simple” that it only supports plain, unencrypted IRC, which most networks don’t support because it is a fundamentally bad idea.

Y’know DNS? The phonebook protocol? Even THAT is being encrypted, and that’s only used for technical nonsense! So, unencrypted IRC, a protocol meant for people to talk about their lives and to chat on, is a gold mine for passively monitoring people’s lives!

To be fair, they’ve got a different IRC client that is actually somewhat useful and practical. But that isn’t actually all that impressive considering IRC is dead-simple already, you could just forego the IRC clients and connect directly! (It won’t make for a good experience but it’s lighter than any client will ever be if you care about that sorta thing)

I swear to goodness suckless isn’t real.

The configuration file format for most suckless apps is C… THE LANGUAGE! You’re expected to carry a heavy, not-simple-nor-lightweight C compiler just to change some simple settings… My god, what a disaster. They cannot be serious!

I’d be fine if they were just another group making software, but the problem is that they are a front group for simplicity as an ideology, THEY want YOU to think their software is superior when it clearly isn’t… They will blabber on at length about the “philosophy” and “practicality” behind simplicity, all with a smug face while sipping vodka (wine is too bloated)

They will endlessly shame other developers for not living up to their expectations, dismissing their practical software as “bloated trash” while they churn out disastrous releases binary-after-binary.

And let’s be honest here, shaming other open-source developers who have volunteered their time, effort and energy to write code for anyone to use JUST because their code isn’t “simple” or “lightweight” is so asshole-istic. This should be common sense, this shouldn’t even need to be mentioned but now it apparently does! Because people are too eager to stab each other in the back sometimes!

Let’s go back to metrics for a second… Let’s go back to whatever state of mind I was in before I got distracted by CIA psyops.

Wait… Metrics? 2: Electric Boogaloo

So, simplicity will obviously differ from person to person, ask 5 software engineers to define simplicity and you’ll get 30 answers. All from different perspectives

What nonexistent suckless refers to when they say “simplicity” is “technical simplicity”, when the technology itself is simple even if the user experience isn’t simple or very satisfying. And obviously this deranged definition means the codebase itself will be a work of art, while the code it produces will be nothing but trash.

Everyone talking about simplicity has a different idea, even when it comes to concrete terms such as “technically simple”, information just gets lost when we write things, because we assume the audience to be familiar with the author.

Either way, there are tons of definitions to “simplicity” that go against suckless’s definition. Software can be simple for the end user, it could provide a friendly user interface. You can make both technically simple and user friendly software but it takes a lot effort, which is why suckless doesn’t bother and blames the end user for not adapting instead.

Software can also be simple for the end user to deploy, distributed as a docker container or some other bloated, but practical format. I could go on and on, my point is that you should think about which type of simplicity to go for instead of assuming technical simplicity as the default.

Nowadays, I aim towards the more complicated definition because the end result is actually practical. Technical simplicity is a lie, it either obfuscates the real complexity by piggybacking off of a C compiler or Webkit or it reduces the actual program down till it’s useless.

So, why fall for technical simplicity lie?

No really, why?

I get we’re all frustrated, it’s as though mainstream software companies have stopped caring about making their software practical. They churn out crappy web browser applications out of laziness, but why go from one extreme to the other?

Life is all about balance, and adhering to some false notion of simplicity out of frustrated for modern app developers is a waste. They’re not gonna write in C, they’re not gonna stop using Js. The answer isn’t going back to C99 and praying that others follow you along, they won’t. The answer is finding the right balance between simplicity and practicality.

Although I have been painting a one-sided picture this entire time. Suckless is right, to an extent.

The plot twist where suckless actually exists and has a point to make.

I’ve been focusing on one extreme side of software development, that is open-source noncommercial minimalists, but the opposite side is proprietary bloated applications owned by large corporations (created for commercial purposes), I know suckless is right, I know minimalism and technical simplicity are important values and that it is important to design lightweight and performant software, but corporations do not know nor do they care

Giant corporations such as Google, Apple and Microsoft are plagued by an inability to innovate and an inability to put logic and reason into use from their sheer size and power, they simply can’t comprehend what technical simplicity is unless you run a massive PR campaign. Money is the language of capitalists after all…

Their programs are getting heavier and heavier as they shove the next hyped technology into it and now they must spend countless decades paying off their tech debt. These inefficiencies grow exponentially as the size of these corporations grow, it’s why everything is worse than it used to be!

It feels so tempting to just show them how it’s done. “There! That’s how you build a functioning web browser! Now stop putting crappy features into yours!” like a teacher who is frustrated with the student that doesn’t take the assignment seriously.

But they’re not listening, giant corporations do not care, we’ve entered an age where corporations can’t be held accountable by anyone, neither government, nor people, nor media because all three are corrupt, gullible or incompetent. (In that order)

What can we do about that reality? Well honestly I’m not sure, I’m not a part of the government, nor am I a journalist and I’m not particularly influential so I am powerless!

Thinking about those big societal problems won’t do me any good if I can’t act and spark change, it only keeps my mood down. So I prefer to just be aware of it and do something else more meaningful with my time. (In “TV tropes” speak, this is called anti-nihilism, I prefer calling it “being Beret Guy”)

For me, I enjoyed writing software when I stopped caring about metrics and the opinions of others. It really is just so liberating. I’m still in the process of undoing what damage the “simplicity” mindset has done to me but everything feels better already. So, stop shouting into the wind and save your breath. Ses!