WTF.dev

A place to talk about software and stuff.

Software Sucks, Everything is Broken

22 September 2020

Whoa, a blog!

I’ve been meaning to get around to this for a while! I have a lot of thoughts on software since I surround myself with it - I am hoping that by blogging about some of them, some constructive use might be found.

This blog isn’t going to all be about complaining about software (I think there are already other sites for that?), but over the last N months, I’ve found myself thinking ‘Software Sucks!’ a bunch of times, so why not start there?

Nothing works

I’m not claiming that all software is broken. I do, however, claim that the majority of software that’s in use today has major issues, and that we as a field can do a lot better. These are the kinds of issues I’m talking about:

  • Poor security practices
  • Frustrating user experiences
  • Deceptive monetization
  • Privacy violations
  • Unreliability

I asked some friends what came to mind with the prompt ‘Software Sucks, Everything is Broken’:

  • One friend mentioned that he pictured someone complaining about computers who can’t use them, but he gave a disclaimer: he’s not steeped in the industry.
  • Someone else mentioned that the prompt sums up the devops industry, but mentioned that if everything weren’t broken, we’d all be out of jobs. This was followed by “I have a theory that everything is just a permanent state of damage control”.
  • Another friend (you know who you are) produced a great rant about issues with security, dark patterns, planned obsolescence, vunlerability management, and more. I’m not going to dive into all of that (yet), since I think there are a lot of resources about these issues, but each issue is pretty interesting. As a whole, he seems pretty frustrated with the software that’s available to consumers.
  • Someone else: “All my co-workers suck and everything is broken”
  • One friend mentioned competition in the context of software (specifically, Blender and ZBrush); competition in this case led to innovation and prevented stagnation.
  • Of course I have to mention my wonderful girlfriend - she was the most positive about software since it’s an integral part of technology, although she finds programming daunting.

This led me to an interesting conclusion:

“People who hate software the most: people who can’t use computers, and people who write software”

My perspective

Sometimes I stumble upon some of my old code I’d written years ago, and without exception I’m horrified every time. If the code I’d written ended up in prodution, it would surely lead to issues just like the ones I’m complaining about. Will the same be true of the code I write today, years from now? How can I spare my future self from being horrified?

How did we get here?

All of the problems in software can be boiled down to human mistakes. If a perfect being could write software, that software would certainly be perfect. Since we are not perfect beings, we write flawed software with major consequences.

There are a few core causes that I attribute most of these flaws to:

  • Project management
  • Project planning
  • Time allocation
  • Development Tools

Project management

People in charge of software projects should know about software. Since companies are usually led by business people, not software people, decisions may be forcefully made which have negative consequences.

In this category, I include profit-driven development - this surely leads to many of the issues which seem against user interests. Why would a product be made intentionally worse, other than to extract more profit from it?

Project planning

There’s a major difference between software that is designed versus software that is ‘grown’. If a project goes through major unanticipated changes in its structure as the project matures, then this certainly leads to issues, usually presenting as unreliability.

Time allocation

Giving time estimation for project progress or completion is never easy. When software is written under time pressure, corners have to be cut, which introduces technical debt. While it may be painful from the business perspective, more time given for development will lead to better software.

Development tools

Some people are surprised that almost all software stacks use languages and tools invented about fifty years ago. Why are buffer overflows still a thing?

Fortunately, this is an area that’s improving a lot - I find the idea of Rust pretty exciting!

The path forward

We as a society depend on software; it’s obviously to our benefit if the software we use works as best as possible. However, there are these forces that cause written software to have issues which result in pain for the users. How can we as an industry produce better software?

First, we need software engineers as individuals to adhere to principles:

  • Plan the software that you write
  • Don’t fight the user
  • Test your code
  • Never stop learning

Secondly, organizations like companies which produce software need to understand software development:

  • Give engineers the power to make decisions
  • Be willing to throw code away and re-write it from scratch
  • Invest in automation and testing infrastructure

Lastly, all people need to deliberately adjust how they interact with software products:

  • Hold organizations accountable for bad software
  • Have an understanding of fundamental security concepts
  • Communicate about issues that you find when using software

Summary

Software sucks, but it doesn’t have to! We as an industry have the power to decide what software will look like in the future.