> Martin Polden

On using software

As a software engineer I hate using most software. This may seem counter-intuitive so let me explain.

The mythical expert user

I find that non-technical people often believe that being a software engineer automatically means being an expert user of all software.

Some examples:

Hey, you're good with computers right? How can I do X in Word?

Why can't I save images in the Instagram app?

Can you help me setup my cable box?

However, I find that the more time I spend writing software the less software I want to use.

But why is this the case? As a developer of software, shouldn't I also enjoy using software? No, because most software is terrible.

Software is terrible

There's many reasons why most software is a stream of endless trash. Here's a few of them:

  1. Perverse incentives. Software was traditionally written with only one incentive in mind: Provide you, the user, value and help you accomplish tasks.

    However, as personalized ads and user tracking became viable business models, software changed to optimize for selling your attention to the highest bidder and only incidentally providing you value.

    Google Chrome and Facebook are obvious examples of this.

  2. Dark patterns. Closely related to 1. Designing user interfaces to trick users into acting against their self-interest has become commonplace.

    Social networks live and die by these tricks.

  3. Holds your data hostage. The software provides no reasonable way to export your data, or the exported data is in a undocumented binary format.

    This is typically done to prevent you from switching to different software. Applies to pretty much any software-as-a-service.

  4. Churn and forced updates. Modern software changes constantly, UIs are shuffled and redesigned with questionable rationale, platforms are deprecated, yet another security issue must be patched and features are added to increase "engagement".

    Almost everything is a moving target, and changes are frequently user-hostile.

  5. Bugs. All software has bugs, ranging from minor to critical. The more sophisticated the software is, the more bugs it likely has.

    I once tried logging the bugs I encountered for a week in the few programs I use. I quickly had to give up due to the sheer volume.

  6. Complexity. Modern software development consists mostly of haphazardly gluing together pre-existing libraries, while praying that everything doesn't collapse under its own weight. Kind of like Jenga, just with abstract pieces.

Reasons 1-4 mostly apply to proprietary software. Some of these also apply to open source software, but a to a lesser degree. See for example the countless Linux desktop environments, and their endless churn in UI design.

Surviving software

So what can a burnt-out software engineer to do combat this insanity?

  1. Limit the software you use and be a late adopter. A Hacker News comment put it well (paraphrasing):

    Be a late adopter, and favour simplicity over sophistication

  2. Take ownership your data. Products and services come and go, export your data and store it on your own hardware. Fortunately, GDPR has made it harder for services to hold your data hostage.
  3. Prioritize privacy. Yes, this may sometimes be inconvenient, but it's worth it in the long run. Another good Hacker News comment puts it well:

    Sometimes you gotta get off the train that speeds towards a cliff, even if it means going by foot for a while.

  4. Last, but not least: Prefer free software (free as in freedom). If I had to name some software I actually don't hate it would be Emacs, Firefox and Debian.