Make software for people, not machines

This is somewhat off-topic here, pertaining as it does to software in general, not just games; though in my defense, the article that prompted it, called How Technocratic Hyper-Rationalism Has Birthed Right-Wing Extremism, does turn out to be about games in the end. But games are software, and software development has been going through a massive crisis lately. Two, actually: one of burgeoning complexity, and one of relevance. And this ties into a bigger trend -- pointed out by the aforementioned article -- of people focusing more and more on the shiny toys while forgetting the who, the what and the why.

I ranted against techno-utopianism before: the childish belief that more shiny toys will somehow cure all the world's ills by their mere presence, when it's not the toys you have, but how you use them. (Look at the hubbub surrounding clean energy and self-driving cars when the Paris Metro has been automated and nuclear-powered for decades -- and yes, nuclear is cleaner than coal.) Or that computer algorithms are somehow objective and unbiased, a notion recent case studies have thoroughly dismantled, but one technocrats love, for obvious reasons: it justifies the status quo in which they rule the world.

In the software industry, this attitude took the form of successive technologies being touted as panacea. In turn, we were sold structured programming, logic and functional programming, OOP, UML, XML. More recently it was frameworks, and now everything is package managers and deployment systems.

All of which only forced programmers to strain their attention spans even more in order to do the simplest tasks -- the last thing they need -- and failed to yield any visible improvements for end users, who still have to deal with bugs and outages. If anything, things have gotten worse: from games that needed patches to be winnable at all, to games released in alpha stage, and now (I hear) games sold without a working executable in the package! Never mind that when a game does work, you spend more time downloading updates than, you know, playing -- even on consoles.

In all this time, only a handful of practices have shown results:

  • Agile programming;
  • systematic quality assurance;
  • better work-life balance and inclusivity.

Notice what all of them have in common? They're social practices! People taking time off busywork to figure out what the hell they are doing, and for whom. That's what many developers seem to have forgotten as of late: who software is for in the first place -- whose problems it is trying to solve.

The saddest part is, we used to know. That's how Infocom managed to stand head and shoulders over other game studios of the 1980s: by stimulating and rewarding the creativity of all employees, by thorough testing, and making sure their offices were always a happy place. We used to know... then we fell prey to the corporate nihilism disguised as "rational behavior" (read: reductionist, sociopathic game theory taken to extreme) that ultimately led to the financial crisis of 2008. Along the way, a few "enlightened" companies tried to recapture some of the magic by giving their programmers Aeron chairs and a lounge with Foosball tables. In other words... shiny toys in exchange for devouring their lives. Funny how that invariably ended in disaster.

Why are you writing software? Maybe you're scratching an itch. Maybe you aim to entertain yourself or others (either through the result, or simply the process). Maybe you're looking to build a product for sale. Either way, you're currently engaged in solving a human need. Not necessarily those of an end user! Making better tools for yourself can help the end user too, indirectly. But does it?

Does it?

Tell me, how does it feel to be working on yet another business app that will only enable some rich asshole to get even richer and more unpleasant, except the project will end up canceled, so you won't even be able to put it on your CV or at least reuse any part of it? (Why not? Because who would want to reuse that awful mess of a code you were forced to write in a hurry based on the muddled, randomly changing demands of a semi-literate manbaby, even if you hadn't been sacked at the end of the project along with the entire team?) How about yet another me-too mobile game that doesn't even qualify as shovelware?

Sure, it puts bread on the table... except for the part where you get sacked in the end... again... which eats up any savings you might have set aside, and makes future employers doubt you more and more. Then one day you're forty and unemployable, even if you're still able to learn quickly running on habit alone. Worse, all your hard-won experience is being dismissed because you don't know how to use the latest mega-framework with a zillion-page manual that happens to be fashionable this month. Oh, and we don't use the X chat app anymore, that's so last weekend. Everyone's moved to Y, but that's on the way out as well. We're considering Z now.

Tell me how fun it is to play with this latest batch of shiny toys.

We invented compilers to make our work easier. IDEs to make it more comfortable. Version control to make it safer. Team chat apps to... smugly look down on people who stuck with IRC, apparently, even while you work harder for at most the same benefits, all in the name of "progress".

Ever heard of something called the law of diminishing returns?

One of the many destructive mentalities we've inherited from Victorian England is this idea that progress is linear and unlimited. That we can keep achieving more-better-faster forever, as long as we apply the same amount of effort.

And it's bullshit.

Open your eyes and look around. Notice how much of your work has long ceased providing concrete benefits to anyone, and instead is just feeding a machine, for the sake of feeding the machine.

Stop writing code to satisfy a computer -- or a bureaucracy -- and instead put people front and center where they belong.

2017-02-23 (originally published on