Introduction
Once I discovered programming, I was so good at it that I knew that I would make a career out of it.
I was wrong.
I was recently let go from my job.
While it hurt initially, I think it has actually been good for me because I have a chance to reinvent myself and leave an industry that I have begun to believe is fundamentally broken and full of perverse incentives.
Software Business Models
The software industry is built on three business models:
- Support.
- Data collection.
- Sales.
Support
The job I just lost was with a company that provides support for a particular piece of software. In this case, “support” means “fixing bugs as customers run into them.”
The problem should be obvious to anyone with common sense: there is an incentive to not fix bugs.
You see, customers are reminded of why they “need” support every time they run into bugs. So there is actually an incentive to put off fixing a bug until a customer runs into it, even though our job is to ensure customers have a smooth experience.
Now, there were plenty of times where my coworkers and I fixed bugs that no customer had experienced. But just like the incentives were misaligned for us, they are also misaligned for any company that is centered around support, including ones that would take advantage of customers.
And perverse incentives will always produce abuse somewhere.
Data Collection
But it gets even worse.
Most “free” software, if not open source, is free because it gets something from the users. This is usually data.
Then, the companies turn around and sell that data, whether directly or indirectly.
In the words of Andrew Lewis:
If you are not paying for it, you’re not the customer; you’re the product being sold.
It turns out that giving out our data, even unknowingly, has implications, such as creating a private surveillance apparatus, which can then be accessed by government. And criminals.
And that’s not even considering what happens when data gets stolen, even from companies that don’t sell it.
Sales
But it gets even worse.
There are some companies that make money selling software.
At first glance, it appears like they have incentives to produce the best software possible, to outcompete their competition. And they do, to a point.
Network Effects
And the point where incentive becomes perverse is when network effects kick in. At that point, time to market is the most important metric because the first company with a product on the market will have the advantage since they will have more users.
Users Trained to Expect Bugs
However, even without network effects, companies can easily compete with poor software. The reason for this is because the industry has trained users to expect bugs.
This leads to companies getting away with sloppy work, even when network effects don’t exist.
Vendor Lock-in
But it gets even worse.
Companies that sell software can easily create vendor lock-in. They usually do this by creating a new, custom file format and using that as the file format for their software.
When a new piece of software with a new file format has just been created, no other piece of software can read or write files of that format. And creating software to do so when the only software that can is proprietary requires reverse engineering, which is hard to do even without barriers.
But companies trying to create vendor lock-in do put up more barriers. In EULA’s, a company usually demands that users not attempt to reverse engineer the software or the file format. And because a EULA is a contract, these restrictions can, in practice, be enforced most of the time.
In my opinion, such EULA’s are completely unethical, especially when they refuse to accept liability.
Worthless Software
On top of all of that, it seems the software industry produces way more than 90 percent garbage. The world doesn’t need yet another social media platform (unless it gives control to users), ride-sharing service, or yet another random app.
And yet, that seems like 99 percent or more of the software that the industry produces.
So in essence, not only is the software industry unprofessional to the highest degree, it is the most useless industry.
Embracing Professionalism
Can the software industry be fixed?
Personally, I think not without some kind of requirement for professionalism like that required of doctors, lawyers, and engineers, especially engineers.
Do I think it will happen? Not without public outrage. Not without a massive event, caused by bad software, that causes the public to demand professionalism of us.
This professionalism should include:
- Making the software work for the user, not for society or even the developer of the software, much like a lawyer works for his client regardless because doing otherwise can be disastrous.
- Making the software work with the user by making the user experience as good as possible.
- Making the software lean so that it uses as little of the user’s resources as possible.
- Collecting as little data as possible. This includes not surveilling the user.
- Securing data that does have to be collected.
- Refusing to sell data to third parties.
- Refusing to profit from data.
- Refusing to use dark patterns.
- Refusing to give up data to governments without proper warrants.
- Providing source code to users to prevent vendor lock-in or other anti-competitive behavior.
- When possible, making the software “fit for purpose” by proving it fulfills its specification.
- When it exists, providing the proof to users.
- Accepting liability for our software.
- Conducting public and independent inquiries into the cause of accidents, like the aviation and engineering industries.
- Refusing to work on blockchains/cryptocurrencies, ads, and other unethical projects.
- Creating software that produces value, instead of extracting it.
- Respecting the intellectual property of code we use, including knowing the provenance of that code.
Expect more items to be added to that list as I think of them.
I am not holding my breath for that to happen, especially since users have been trained to expect buggy software.
Conclusion
So until that time comes, if it ever does, I am switching industries. I don’t know what I will do yet, but I am leaning towards something that requires professionalism, like emergency services, engineering, surveying, or commercial aviation.
And on my own time, I will develop software that will make it easy to build bug-free software, and prove it is bug-free, in the hope that once users see that a better option exists, they will demand it.
Until then, I bid farewell to the software industry and look forward to whatever new career lies ahead of me.