Lately there’s been a lot of news of software going haywire, pointing to the issues with the 737-MAX. Since this is an extreme example, it comes as no surprise that some are even expecting a gloomy technological apocalypse in which the world comes to an end because the software that gets more and more integrated with every aspect of our lives will one day give up entirely.
Just for the record, according to several pilots, the issue with the 737-MAX was not faulty software itself but the fact that the authorities allowed the warning light for a malfunctioning system, in this case the Maneuvering Characteristics Augmentation System, to be optional. This resulted in confusion during a critical situation which in turn resulted in loss of lives. Even after that, the authorities did not make the warning light mandatory, resulting in another 737-MAX crash that has surprising similarities with the first one.
There are several more examples that made the headlines recently and this has more reasons than the fact that more and more systems are controlled by software. According to Nancy Leveson, an MIT software-safety expert “The problem is that software engineers don’t understand the problem they’re trying to solve, and don’t care to.” This has many causes, like the fact that software is becoming more complex all the time. You have systems that have 30 million lines of code, like an Airbus, or 100 million lines of code, like your Tesla or high-end cars. That’s already becoming very, complicated but on top of that, all these systems are getting connected to one another. This adds even more to the overall complexity requiring different teams to work on small chunks of the code and causing developers to gradually lose sight of the overall picture.
Also, agile software development methodologies where every two to three weeks, a developer delivers one or multiple small pieces of software that get integrated into a system, causes them to lose oversight. An added danger is that each cycle you change parts of the code base which can have unforeseen effects in the form of regression. These incremental changes can also cause difficulties when different systems that interact need to stay aligned.
Another reason might be that today everything revolves about experiences: candidate experience, employee experience, customer experience, user experience, client experience,... This fueled by the fact that individuals have more possibilities than ever before to make these experiences known to the public might be another reason why we’re confronted with these “horror stories” more than before.
What we’re not being told is that all the examples of software gone wrong we hear of in the media, are extreme examples that did get through quality control. Some of them, like the problem with the 737-MAX were known but deemed not critical enough to fix and some of them remained undiscovered until they showed themselves when the software was live.
Not a lot of publications talk about quality control in software development while there have always been people making sure clients got what they paid for. In fact there’s an entire niche in software development focusing on QA with a lot of specializations like coordination & management, automation, process enhancement, security,… These are the the Software Quality Engineers, the front line warriors protecting you from defective software. Day after day they are pushing systems to the limit to verify they keep functioning as expected and provide objective feedback to all stakeholders involved.
It’s impossible for them to find every single bug since resources aren’t unlimited and they are human but they are the ones that will make sure there will never be such a thing as a technological apocalypse.