No software is perfect. Software bugs have existed ever since the creation of early electromechanical computers. So even the most carefully checked and continuously tested software project can experience flaws, no matter how smoothly it has been operating before that. An unanticipated set of glitches might come up at any time, throwing hours, days and even weeks of work down the drain. No one is immune, but everyone should be ready to react appropriately to such circumstances when necessary. As Andrew Hunt points out in his book “The Pragmatic Programmer: from Journeyman to Master”; “You Can’t Write Perfect Software. Did that hurt? It shouldn’t. Accept it as an axiom of life. Embrace it. Celebrate it. Because perfect software doesn’t exist. No one in the brief history of computing has ever written a piece of perfect software. It’s unlikely that you’ll be the first. And unless you accept this as a fact, you’ll end up wasting time and energy chasing an impossible dream.” It’s not that Hunt tries to discourage developers. On the contrary. He encourages them to accept the programming reality as it is and urges them to shift their focus from something that is impossible to something that is doable. Programming shouldn’t be a race for perfection but a battle for correctness, functionality and efficacy.
Because of the prevalence and the seriousness of some software faults, the global economic impact is huge. The total cost of debugging has reached the impressive figures of $312 billion per annum. According to a research conducted at Cambridge University, programmers spend 50% of their development time finding flaws and fixing them. It truly is a lot of time. But still, we don’t want to have another disastrous computer error, right? The world has witnessed plenty of them already.
Here are 5 examples of historical and expensive software bugs:
NASA – Mariner 1
Back in 1962 the US planned to send the first spacecraft of the American Mariner program to Venus. Unfortunately that didn’t happen according to plan. Shortly after its launch, the rocket unexpectedly changed its intended course and stopped responding to commands sent from the guidance systems on the ground. The reason for the malfunction? A code error, of course. The most well-known explanation for the mid-course manoeuvre of Mariner 1 was that one of the software engineers missed a superscript bar when transcribing a handwritten formula into the computer code. Due to the omitted smoothing function indicated by the bar, the software interpreted the variations of velocity wrongly. Thus, instead of treating them as normal, the implementation treated them as serious. Respectively, it led to incorrect guidance signals, a rocket that veered off course and self-destruct commands issued by a NASA range safety officer.
Mariner 1 failure cost $18.5 million.
Soviet Union Early-Warning Satellite System
A possible nuclear holocaust and World War III almost happened in 1983 when Soviet early-warning system signaled 5 incoming US ballistic missiles. “An alarm at the command and control post went off with red lights blinking on the terminal. It was a nasty shock,” Lt. Col. Stanislav Petrov told Moscow News in 2004. “Everyone jumped from their seats, looking at me. What could I do? There was an operations procedure that I had written myself. We did what we had to do. We checked the operation of all systems — on 30 levels, one after another. Reports kept coming in: All is correct.” He was the duty officer at that moment and, luckily, he trusted his gut and reasoned that the alarm was, in fact, false. Later on it was confirmed that the wrong missile-detection and alarm was caused by a bug in the Soviet software which detected sunlight on high-attitude clouds as missiles.
That cost almost all humanity.
Black Monday
Black Monday is related to October 19, 1987, when stock markets all around the globe experienced a massive breakdown. Because of this financial crash, Dow Jones Industrial Average lost 22.6% of its total value, while the S&P 500 stock market index dropped 20%. There are various causes for this dramatic decline, among which is the use of computer technology and program trading. The rapid transmission of stocks and mass exodus started by investors overwhelmed the computer programs. That made the market system crash, leaving people practically unable to observe what is happening with the sell orders.
This drop from peak to bottom resulted in a loss of $500 billion in a single day.
The Millennium Bug
The Millennium Bug (also known as Y2K) is a problem that occurred in the coding of computerized systems at the beginning of the year 2000. Legacy software and programs written in the early days of computing were designed to store four-digit years as two digits instead in order to save computer storage space. So 1988 would be interpreted as “88”, 1999 as “99” and so on. However, major and rather costly issue arose when systems weren’t able to indicate “00” as the year 2000. Instead, it was recognized as 1900.
That cost $500 billion and a lot of confusion.
Toyota’s Unintended Acceleration
Since 2009, the Japanese automotive manufacturer made several recalls all of which were due to a software flow and not because of a mechanical issue. During the summer the same year, a Lexus ES350 was reported to have accelerated to more than 100 mph all of a sudden. Because of the tragic ending, Toyota dealers had to made a few changes, including shortening the gas pedals and upgrading the integrated computers with a new software. In 2010, the carmaker had to recall more than 9 million of its vehicles around the world because of a software bug in the anti-lock-brake system.
All of that cost Toyota $3 billion.
It’s been nearly two centuries since Ada Lovelace wrote the first ever description of a computer program and it’s now when we can see how things have evolved. Software is no longer sneaking into our daily routines. Software is already there and it’s ruling. Taking into account the abundance of software developments, it is hard to imagine all of them running without deviations or complications. Simply, a perfect software does not exist. It is always vulnerable to errors and developers must accept that. What really matters at the end is not whether the software will turn out to be absolutely and unquestionably error-free. What matter is whether the program will do what is supposed to do, whether it can handle possible flaws without dying completely and whether it is easy to debug.