I do not operate a car of my own. Instead, I’m a customer of a local car sharing provider. For the X-mas family meeting, I rent a less than two years old car.
I was on the motorway in the evening hours while the weather was rainy and snowy. Not a big deal, as the car provided speed control. Very comfortable. But suddenly it told me that there was an engine error and I must visit a garage (»Motorstörung – Werkstatt«). The car switched to its fallback system, which means it was fully operational, but at a very reduced horse power (and without speed control). This was not much fun in the hilly region (known as »Kasseler Berge«) I just crossed. I hoped the car would make it until I reach my destination. So it did.
After arriving, I called the emergency service of the car sharing organisation. Thanks to some insurance policy, a garage grabbed the car at 11:30 PM and promised to take care about it as soon as possible. So they did. In the evening hours of the next day, they called and informed me that the car was repaired. Great service.
The next day I went to the garage. I asked what was necessary to fix the problem. The engine control, I was told, needed a software update. Argh.
I left the garage and started the car. It immediately stated that it needs service – right now. So I left the car and asked the garage for help again. They told me that they just forgot to reset the system. Not a big deal, they just put it back into the workshop. After a couple of minutes, the master contacted me. He told me that the bug was fixed but the remaining message referred to the inspection which was overdue since the car passed 60.000 kilometres. Great. The car sharing organisation obviously missed the maintenance date.
Back home, a relative who owns a car of the same company, stated that he knew the problem. The company does not build bad cars per se, and the issue does not only belong to this particular one. But it sheds a little light on a major issue.
In the software business, we are talking about pervasive computing. Software is everythere. It drives computers, cell phones, automated teller machines, planes and, last but not least, cars. In a couple of years, software will even drive faucets and furniture knobs.
We are used to software bugs nowadays. When we write software, we simply accept them as an inevitable evil. Not a big deal when it comes to printer drivers, photo editing software, text processors or the firmware of your favorite music stick. But engine drivers are another class of software. Do we really want to commit our lifes and healths to some buggy car software? Well, that’s out of the question.
The software of the car I rent likely met a situation it was not prepared to. Maybe a sensor delivered an unexpected value, or several sensors delivered values that the software didn’t know to interpret.
I told the story a friend of mine who is a software engineer and owns a rather dated car. Of course he has never seen such an issue :) . But the question is not whether we should avoid using software in cars (or other machines), as we want to build »intelligent« and efficient products. The question is how we can ensure our software does what we intend it to do, even if an edge condition occurs.
During the next decades, the software industry will provide more and more technologies which will help us to perform automated testing. Testing (and quality assurancy) is not an issue of manual work. It is an issue which needs automation because it otherwise would not be done. If you are working in the software business, you already might know things like »Test Driven Development« (TDD) or unit tests. That’s only the beginning. Nowadays we see the customer as a software tester still. But this will change soon, and the ones who understand this first will be the ones that stay in business. And it will be very hard to get »Customers are not software testers« into the heads of your developers.
Not convinced yet? OK, let’s talk about the issue in five years from now.

On a lighter note, I’m kind of disappointed that you didn’t ssh into the cars computer and fixed the problem yourself…