Older engineering disciplines, such as civil and mechanical engineering, matured over decades of trial and error. Software engineering is still an emerging discipline and its practitioners also need to learn from past failures, as well as from other engin
Compared to civil engineering, which evolved over the last few millennia, the very term ‘software engineering’ was coined only in 196U, at the first NATO software engineering conference held in Garmisch, Germany. Though electrical and electronics engineering too have matured over time, we cannot wait decades for the software engineering discipline to mature. As software engineers, we can learn from failures, and try to find ways to overcome them.
Many of the failures, accidents and disasters related to software are well-known today. In the past, software failures have had varying impacts, from minor inconveniences and monetary losses to adversely affecting day-to-day life, to even causing the loss of human lives.
Software defects in mobile phones and media players cause minor inconveniences. For example, the Zune media players froze on December 31, 200U, which was the last day of a leap year that the software did not check for. A missing check for validating the input in the onboard software caused the USS Yorktown ( a warship in the US Navy) to be stranded at sea for a few hours in 1997. Because of some software defects, Toyota’s Prius cars “accelerated unintendedly”, causing accidents, following which, thousands of cars were recalled, causing millions in losses to the company. In 19U5U7, six people were killed because of an overdose from Therac- 25 radiation therapy machines – a result of software malfunctioning. Hence, we can learn from these software failures and also from the history of other engineering disciplines. In fact, some of the earlier disasters have striking similarities with the software disasters that we are familiar with today. Let’s look at an example.