According to this is a popular question on Programmers – Stack Exchange, a user once asked a programmer the innocent question, “Why isn’t software as reliable as a car”?
The highest voted and overly pedantic answer is, “it isn’t: cars themselves have software that is far more reliable than the mechanical parts of the car”. I guess that’s what you get when you leave it to programmers to answer such a question.
Maybe some software is reliable, but I bet you’ve used a custom software system that was far less reliable than your car, haven’t you? I know I have. I’ve built a few them in my past. I’ll take my Honda over some custom software systems any day!
Why is my custom software system so unreliable?
Of course, there are several answers, and I am a programmer, so can’t just answer this with a single sweeping generalization. The reason software can be unreliable is as complex as unreliable software is – and therein lies the answer!
At Headspring, we’re big fans of the book “The Mythical Man-Month” by Fred Brooks. It’s one of the most important and influential works on the human elements of software engineering. Even our sales and marketing folks have read it – ask them about it!
There are two passages in the Mythical Man-Month that I believe best answer this question.
Plan to throw one away
You don’t need to be a vehicle manufacturing expert to understand that to successfully build a new car, you need to go through multiple rounds of designing, prototyping, and testing. Early prototypes are “thrown away” each time until eventually the manufacturer has produced a car that meets all of the design, safety and performance goals. Your Camry is so reliable because it wasn’t the first thing Toyota bolted together.
Yet custom software is often treated differently. “Project after project designs a set of algorithms and then plunges into construction of customer-deliverable software on a schedule that demands delivery of the first thing built. …In most projects, the first system built is barely usable. It may be too slow, too big, awkward to user, or all three.” (Brooks, p.116) You’d never buy a car that was the first prototype out of the design shop, but I bet you’ve purchased or used software that is.
One reason the custom software system you use is less reliable than a car is because its creators likely never planned to throw one away. They delivered the throwaway product to you.
Complexity and maintenance difficulty
The other reason software can be unreliable is complexity and maintenance difficulty. “Software entities are more complex for their size than perhaps any other human construct, because no two parts are alike. …software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound.” (Brooks, p.182)
It may not seem like it, but in some ways software is orders of magnitude more complex than a car. The mechanics of a car engine are constrained by the physical world in ways that software is not. This complexity also makes it hard to maintain systems.
When a mechanic is changing your car’s oil, you can be confident he’s not introducing a defect in your windshield wipers. When you are repairing a flat, it’s unlikely that you’re going to inadvertently cause your radio to lose its station presets. Because software can be so complex, fixing it is far less reassuring: Brooks suggests that fixing a defect has a substantial (20-50%) chance of introducing another. (p.122)
Reliable custom software
If you have a custom software system that you don’t trust as much as your car, I wouldn’t be surprised. Software can be immensely complex and built in a way the nearly ensures a lack of reliability. And for every bug fixed, another one might be introduced. Custom software isn’t for the faint of heart.
At Headspring, reliable custom software is our specialty. We employ agile and test-driven development methods to mitigate the challenges of custom software development. Most importantly, we understand that our job isn’t just to build software, but to deliver satisfaction to our clients. A reliable system is worth little if it isn’t the right one for the job.