Against Mindless Software Minimalism
Or, the Case For Bloat
As I aluded to previously, something that’s come to be a warning sign to me is when people complain about “bloat” in software.
It’s one of those things where the complaint on its face is not that terrible (if a bit dismissive), but it seems to be indicative of a particular subculture in the programming & tech world that I think is fairly awful.
One could perhaps call it the “cat-v problem”, or the “suckless problem”, as those are two things that are frequently cited worshipfully by the people complaining of “bloat”. Not coincidently, both of those organization are also frequently seen railing against “political correctness” and “SJWs”, which is why it’s so often a warning sign to me.
What is it about the seemingly-reasonable desire for software to not be “bloated” that seems to have this correlation with anti-social-justice view points?
First, what is “bloat”? It typically seems to mean “has features I don’t need”, leading to over-complicated interfaces, but how much of that is a result of the software addressing needs that the person making the complaint doesn’t have?
There was a recent issue that someone submitted to the WSL terminal, saying how great and fast it was. From one perspective, the terminal being fast is a triumph of the anti-bloat philosophy: Because it just uses the most basic, low-level APIs to read input, it has very low latency, exhibiting that great, fast behaviour that everyone wants.
However, there are significant tradeoffs involved. As the maintainer explains, it also doesn’t support right-to-left languages, multibyte Unicode, or pretty much any “international” language (our Anglo-centric euphemism for the abnormal 80% of the world that don’t speak English), not to mention accessibility. To some, it’s “unbloated” and “optimized”, but to a giant swath of the population, it’s useless.
Given the vitriol expended by the opponents of “bloat” though, there are clearly more underlying issues for them. If it was just features that they didn’t use, can’t they just…not use those features?1
I think there are two main aspects to their rage: A desire for regression to a “simpler time” and a fear of “user-friendly-ness”.
What do I mean by “desire for regression”? Basically, the traditional conservative view that things used to be better – the wish to return to a mythical past, where men were men, women were subservient, and programming was manly and cool. This is, of course, laughable ahistorical (as the desire for an idealized past usually is) when one considers how the field of computed was mostly pioneered by women, but that’s never stopped them.
While I think this is a big part of the impetus for the more virulent misogynists and “alt-right” members, it’s not the whole picture.
The other aspect is the one that I think is more important to talk about, because it’s less obviously wrong, more subtle, and much more widespread.
As programmers, we often have to spend far more time wrestling with tools than actually writing code. I teach programming at a local learn-to-code bootcamp and this is a common thing I hear from people – words to the effect of “the writing code part is fun, but I didn’t realize how much time I was going to have to spend futzing around with the terminal and all these other programs”.
Many these programs we have to use are incredibly baroque and difficult to understand. While I’m sure part of it is inherent complexity, part of it is that being user-friendly just isn’t a high priority for the programmers making these tools.
Programmers go through all this effort to learn how to use git and bash and the like and end up wearing that suffering as a badge of honour. It was hard for them, so it should be hard for you, seems to be the feeling.
I think this is a significant source of the antipathy towards humane interfaces and tools that aren’t actively hostile to the user.
People feel threatened that what was so hard for them could be made easy, because it makes them afraid that they could be easily replaced.
People feel that if what was hard for them is easy for someone else, it makes them stupid.
I think that this is one more reason that we need to do less idolization of the anti-social workaholic as the ideal programmer. Not only does it drive people away, not only does it lead to burnout, but by making people feel as if they need to be an inscrutable superhuman to be a programmer, it makes things worse for everyone.
What if we recognized that yes, a lot of this stuff is hard, but by collaborating, asking questions, and getting multiple points of view, things can be made easier? Instead of saying “this software does all this stuff that seems useless to me, it’s so bloated”, what if we said “wow, this software does so much stuff I haven’t thought about before; I wonder why and for whom?”? If we did these things, I think we would all be a lot better off.
Footnotes:
The obvious & frequent rebuttal to this is that having those extra features pollutes the codebase in some way, making it harder to maintain, or slower overall. While that might be true, I think it is usually an unfounded assertion and frankly usually made in bad faith by people that are either using it as cover for the later-discussed points, or by people that are cargo-culting some notion of code aesthetics (e.g. the sort of people that leave negative reviews on a game because it uses 32-bit APIs, something that can’t possibly affect them in any material way, but offends their sensibilities).