Long before I was creator of software products, I was a space geek. When Apollo 11 landed on the moon, my parents said their three-year old boy was fascinated. I closely followed every phase of the Apollo-Soyuz Test Project in 1975. In 1981, two friends and I petitioned NASA to allow us to "cover" the first launch of the space shuttle Columbia.
It was right around 1980 that my interest in computers and software blossomed. Later at Microsoft, I came to realize how important quality and engineering discipline is to successful products.
For the past few weeks, I have been reading Digital Apollo: Human and Machine in Spaceflight (MIT Press) by David A. Mindell. This excellent book details the development of the computer that flew on each Apollo mission. I highly recommend it. Of particular interest is how the test pilot community that was flying the spacecraft perceived the role of computers and automation. The human factors aspect of the story is fascinating to me.
Towards the beginning of Chapter 6, Mindell writes (emphasis added by me):
It has become fashionable to denigrate the computers of the past with phrases like "we flew to the moon with less computing power than I have on my wristwatch," or "can you believe the entire Apollo program fit into a mere 36k of memory?" Simply focusing on memory size, or the computer's speed, however, misses the important engineering accomplishments of the Apollo computer. For who among us would risk our lives on our desktop computers, with all their speed, accuracy, and memory, and rely on their working flawlessly for two straight weeks? The space shuttle flies with five redundant computers. Any fully digital airliner has a minimum of three. Apollo had only one. It never failed in flight.
"It never failed in flight." That is remarkable. Remember, seamstresses wove these programs into magnetic core memory. There were plenty of failures of the various pieces of Apollo hardware. When I think of the complexity of software in general, particularly of the tasks that the Apollo guidance computer was tasked with, the fact that the neither hardware nor software ever failed is astounding. Yes, unexpected things happened, like the infamous 1202 program alarms, but the software did the correct thing and continued working.
There are lessons here for everyone who creates softwares.