A place to talk about software and stuff.
22 September 2020
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?
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:
I asked some friends what came to mind with the prompt ‘Software Sucks, Everything is Broken’:
This led me to an interesting conclusion:
“People who hate software the most: people who can’t use computers, and people who write software”
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?
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:
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?
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.
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.
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!
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:
Secondly, organizations like companies which produce software need to understand software development:
Lastly, all people need to deliberately adjust how they interact with software products:
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.