The Misery of Bad Software

You can revert code to a previous state but you can't revert the decisions that have gone by in writing it.

It's 2020 and we are still producing bad software. Almost 70 years have gone by since the dawn of computing and still, it seems like we haven't learned all the lessons. Perhaps there are no hardbound lessons or principles but only practices. The tech industry changes so rapidly that what makes sense today may not 5 years down the line. I think that's the beauty of software. It's such a malleable thing. But one thing that remains constant is the misery of bad software. We don't seem to get over it anytime soon.

We are now seeing such a surge of good software in the open-source ecosystem that one may be fooled that bad software is a thing of the past. But that's only due to the explosion of OSS in the past decade. I witness bad software living and breathing daily.

I get it that writing good software is hard but that doesn't serve as an excuse. You use good software every day. So it's not impossible. Good software is boring. It gets the job done without you even noticing the slickness of it. On the other hand, bad software makes your life hell. But, oftentimes, you don't see or use a lot of bad software. That's because most of the software that you use in your day-to-day life is consumer software. Bad software can't survive in the consumer market. There are so many critics out there. But what you see is not the only truth. Bad software does exist.

As far as I've seen, bad software prevails mostly in the enterprise ecosystem. Several reasons can be accredited to this claim but the most obvious ones are:

People and systems are more tolerant in the enterprise setting

Few people are involved than the consumer market and those that are involved are not emotionally invested in the software they use

Most of the work done is in the form of machine to machine interaction and machines are not better but worse in raising errors when something fails to work. After all, they are built by the humans

People writing enterprise software, most of the time, have no idea of their end-users and their problems than people writing software for the consumer market.

Bad software is a result of a lack of thoughtfulness and bad decisions. Every line of code matters. Every human touching the software affects it. Every decision paves the way. The moment you decide not to write unit tests and use that extra time to advance the development or add some new features, you are inviting bugs in the system with open arms. Decisions like these show only the short-sightedness and ignorance of people to the decades of wisdom.

Software is not just a mechanical thing. There's a lot of emotion invested in it. How you may ask? Because it's an exact manifestation of the logic and the emotional state of the engineers. It's not like people develop software in a single mode. Software is written in all sort of modes. When someone is glad. When someone is upset. When someone is happy. When someone is angry. When someone is motivated. When someone is unmotivated. You get the idea. On a larger scale, it reflects the culture of the workplace where it's been developed. Bad culture almost always produces bad software. It's the most obvious thing to say but most organizations fail at this especially when they grow bigger.

Bad software gets stuck in a vicious cycle. Tech debt keeps piling up. More meetings get set up and less work gets done. Cliched methodologies and management practices get introduced in meetings without anyone knowing shit about them. Micro-management starts to take effect. There's a certain cool-down period before everything blows. Bad software gets created in that cool-down period when no one looking. It's like cancer and most of the time gets visible in the last stages. Then comes the infamous crunch time where nothing is left to make sense and everybody goes into autopilot mode making it even worse. I think this almost always results from trying to solve the problem in a top-down fashion. No one wants to acknowledge that the root cause of the problem is the software itself. It's the only thing that the business is desperate to sell yet it gets the least importance. I wonder if many of the people know the problem subconsciously but not able to exactly put a finger on it or don't want to. It's a common human tragedy. Applying non-solutions to non-problems.

Bad software has grave consequences. It lowers productivity and demotivates people. Software engineering is a creative work but bad software turns engineering into maintenance work. More time is spent on bug fixing than thinking about improving the software for the end-user. Internal politics start to seep in. Though bad software is a result of a failed team, no one takes accountability. Blame game starts. Corruption takes place. Going to work seems like a dread. In short, bad software represents a bad culture. Bugs are part and parcel of software engineering but if bugs become perpetual, it's a sign of danger. It creates a chain reaction. It gets worse due to unmotivated and unrewarded people. Improvements and useful features take a back seat in favor of delivery. It becomes an unmanageable mess which no one dares to touch. I can go on and on but the consequences never end.

How can bad software be turned into good software? It's a tricky problem. I'm no expert either. The thing that it's got so bad in the first place says a lot about the culture of the organization. Changing the culture is a lot harder than changing code. Culture is the backbone of an organization. Even if there's a desire to improve it, the resistance it poses due to already invested resources is a much bigger problem. Prevention is always better than cure.

I couldn't find much written about this topic. Perhaps this industry moves so fast that there's a little scope for reflection or it's a wasted effort to write about it than to solve other pressing problems. There are always more things to be invented, more problems to solve, more tools to develop but a little time for reflection would help the industry as a whole.

That's my two cents about the misery of bad software. Thanks for reading. Please provide your valuable feedbacks by writing to me at twitter.

Happy coding!