Society has certain expectations when it comes to engineering and technology. We expect buildings and bridges to basically never fail. We expect cars to be extremely safe and fool-proof, as much as explosions-based metal boxes moving at hundred miles per hour can be safe and fool-proof. Home appliances are supposed to work for years without any serious maintenance. Electricity is just there, always. And when it goes out, we are incredibly frustrated and surprised.
The high expectation of engineering runs deep into relevant industries and educational institutions. Engineers take oaths!
The Obligation of The Engineer
I am an Engineer.
In my profession I take deep pride. To it I owe solemn obligations.
As an engineer, I, (full name), pledge to practice Integrity and Fair Dealing, Tolerance, and Respect, and to uphold devotion to the standards and dignity of my profession, conscious always that my skill carries with it the obligation to serve humanity by making best use of the Earth's precious wealth.
As an engineer, I shall participate in none but honest enterprises. When needed, my skill and knowledge shall be given without reservation for the public good. In the performance of duty, and in fidelity to my profession, I shall give the utmost.
It might seem like I'm about to start a rant about buggy OS updates and how software engineering must be held accountable as much as industrial engineering. I'm not. Just to be clear: yes, I think the state of modern software development is ridiculous. Yes, seems like it'll take quite some time and quite a few technological catastrophes until we take software more seriously.
What worries me more than the current state of the things is how it affects the mindset of society. These high expectations of engineering are reversely mirrored in software. We have learned to expect software to fail.
Just a few decades ago it was different. Software developers were the only ones who sometimes expected software to fail. The general public had high hopes, and journalists helped build it.
The rise of information technology was akin to the rise of mechanization of the early XX century. We could see the analogy clearly: in the 20s and 30s everyone in the developed world started having and using cars, washing machines, air conditioners and other wonderful devices. They were new, yet incredibly reliable. Every year they became better and cheaper.
In the 80s and 90s, everyone in the developed world started having and using computers and mobile phones. And at first, the process looked very similar. The first personal computers were clunky and weird, but pretty reliable. I'd say, incredibly stable and relatively fast compared to modern computers.
Of course, they were million times less complex and had fewer features. But hey, here is something to consider: I'm typing this in a macOS app on a very powerful 5K iMac computer. It's just text, and I'm going to publish it on the web. The whole experience is mediocre at best. The software is not blazing fast, even though it's a native app for text editing (it has very high app store rating and it's one of the apps selected by the app store editors). The typing experience is laggy on a Bluetooth keyboard. To publish this, I'm going to interact with a browser, which is at this point the whole other operating system with another layer of delays. The only thing that really feels “20 years better” is the connection speed itself.
Almost slipped into a rant there.
Personal computers felt like the new “cars for everyone”. We all get computers! They will get better, faster and cheaper every year! They are becoming the backbone of the world, as much as motor vehicles did.
It all started to change with the Web. The Web was the first global technological phenomena that was built and maintained by the amateurs. Computer hardware, software, and the internet itself were built by mathematicians and engineers. The Web was built by people like me.
Mathematicians and engineers are tightly connected to the academia, and they operate with ideas like “proof”, “peer review” and “oath”. While many software developers operate with ideas like “ship early, ship often”, “move fast and break things” and “If you are not embarrassed by the first version of your product, you've launched too late”.
This isn't bad in the long run. I think the society will go through The Age of the Amateur and get better in the end.
Amateurs were making things all the time. Up until the recent years, we just couldn't make our amateur inventions ship to millions of people that easily. When amateurs invented something potentially useful, it took quite a few iterations and stages to get it to the public. By that time it became more refined and tested and stable, thanks to regulations, selection and just time.
Today I can make a bad piece of software that does something interesting, and potentially millions of people will get frustrated or harmed.
If you asked a member of the general population in the 90s or early 2000s about computers and the internet, I bet most of them would sound optimistic. That's what everyone is talking about, right? Soon, we will do everything with computers! Computers are super smart!
While this is anecdotal evidence, today most of the people I know are frustrated with technology. Apps are buggy, the web is filled with ads and intrusive useless notifications (would you like some cookies?), touch screens everywhere suddenly made simple things like washing machines and car control panels barely usable.
We just got used to that. Electronics is something that's wonky and buggy. That's what we expect.
And this is scary.
When a society expects certain industries or institutions to fail or do harmful things due to lack of quality control or unprofessionalism, we think that society is in bad shape. When we expect politicians to fail, we revolt. When we expect medicine to fail, we protest. When we expect infrastructure to fail, we at least write angry letters to our representatives and try to make some difference through political means.
We can't do much when software fails. Unlike science, there's no public accountability. Even in those shrinking areas where there's still competition, there isn't much choice: all software fails. I, for one, can only name a couple of software products that are rock solid. But they don't exist on their own, they operate on top of multiple other layers (hardware, OS, frameworks, web, etc). And it's unlikely that all the layers are as good.
I'm in no position to propose a better way for the world to evolve. But I believe that computer scientists and software engineers have the moral responsibility to educate the public about the way software should be. We shouldn't let people get used to the idea that software inevitably fails.
(Discussion on Lobste.rs)