I recently came across a number of interesting articles that seemed to intersect. A recent Economist magazine issue contained a series of articles about software complexity. The point made in these articles was that software — and, in particular, the user interfaces to software — had reached a point at which people were beginning to revolt, and that many companies, especially consumer companies, are becoming concerned that their customers will begin to turn to other forms of product.

A separate, although related, article appeared in the New York Times, and was entitled “What’s Bugging the High-Tech Car?” This article pointed out that automobiles, particularly high-end luxury German automobiles, have recently been having significant problems with reliability — normally one of their strongest points. A large number of these new problems stem from onboard computers that increasingly run the car. In most automobiles today, as in a wide variety of other equipment, computers play a growing role. But, in a lot of cases, computers are not as reliable as are the mechanical controls that they replace.

So here we have two instances where software difficulties seem to be retarding progress. None of this is a surprise to anyone. All of us face problems with software that is either too complex to deal with or too unreliable for the task at hand. As a software designer and architect, I feel especially frustrated, since I know it doesn’t have to be this way.

Just the other day, I was in a cell phone store trying to get a part for my cell phone. I overheard a customer complaining about the fact that her cell phone was constantly overheating, to the point that she couldn’t hold it up to her ear because it was too hot. The service representative asked the customer where she lived. When she told him, he responded, “Well, that could be the problem, you live in an area that doesn’t have very good coverage. The cell phone may be constantly trying to reestablish contact and when it does that, it often heats up.”

As a software designer, I expect cell phone software designers to recognize when their phones are overheating. As a software designer, I expect automotive software designers to build ultra reliable software and to be able to deal with malfunctioning sensors and other conditions. And as a software designer, I expect software that I and millions of others deal with daily to be elegantly simple in terms of their user interfaces.

This brings me to the Apple iPod. Not everyone can be a Steve Jobs or another member of the Apple team and design something as elegant and useful as the iPod. But everybody can recognize after- the-fact the nature of good design. The iPod has but one button and one kind of elegant dial, which allows the user to select a variety of functions in an intuitive fashion with a very short learning curve. What Jobs and his engineers at Apple have done is to bring the best of industrial engineering into user interface design — something that Apple has been famous for for over 25 years.

Unfortunately, for the last 10 or 15 years, it seems to me that software has become more and more enamored of complexity. We have, as an industry, focused on reusability rather than usability. We have lost track of the end user and the end use. If we don’t recover our focus soon, our entire economy will suffer — not to mention our companies. We cannot afford to have unreliable software running our cars, our elevators, our power plants, or our electrical networks. There are far too few good software engineers and architects today, and not nearly enough good training for those who do come out of our colleges and universities. We have to change our focus and we have to do it now.

— Ken Orr, Fellow, Cutter Business Technology Council