Just as in a kitchen, having too many software "cooks" can spoil the program.
Why does computer software have so many bugs in it? Why can't the computer industry be like a "normal" industry, and guarantee the quality of its output?
Bill Gates once famously said that if General Motors had improved its technology at the same rate as the computer industry, we would all be driving $25 cars that get 1000 miles to the gallon.
General Motors responded with a press release that said that if it had developed technology the way Microsoft did, cars would crash twice a day, and every time they repainted the lines on the road, you would have to buy a new car.
The press release went on: "Occasionally, executing a manoeuvre such as a left turn would cause your car to shut down and refuse to restart, in which case you would have to reinstall the engine. Every time we introduced a new-model car buyers would have to learn how to drive all over again because none of the controls would operate in the same manner as in the old car."
Score General Motors one, Microsoft zero. An amusing little episode, but the point was well made. Computers are marvellous things, but they are accompanied by an array of performance problems that would be unacceptable in any other field of human activity.
Most computer systems essentially automate manual processes. Manual systems have many bugs, but humans are able to work around them. But when a bug-ridden manual process is automated, we cannot do so. Bugs exist because humans and computers work in different ways.
There are many maxims in the IT industry that reflect this reality: "Computers don't do what we want them to do, they only do what we tell them to do" - or "a computerised mess is still a mess" - or the well-known "garbage in, garbage out" rule.
With computer software, humans are attempting to bend logical processes to intuitive ends. A human brain can bridge a small logical gap. A computer brain cannot. Even the smallest mistake, such as a missing comma in a line of code, is too much for a computer to handle.
How often do you hear about "computer problems", about something going wrong and being blamed on a computer system. In fact, computers themselves very rarely break down or make mistakes.
It is poorly written software that fails, and that is not a computer problem at all. It is a people problem, because it was people who programmed the computer. "Bugs" are not mechanical, they are mental.
There are very many reasons why software is not written properly. Standard reasons, that appear in all the studies, are things like underbudgeting, lack of senior management commitment, failure of individuals to accept responsibility, poor communications, unrealistic expectations, impossible deadlines and the like.
These factors are well understood in areas such as the construction industry but are less widely understood, and observed, in software. Designers and builders rarely cut corners with bridges or aeroplanes or skyscrapers. But in software "engineering", anything can happen.
Perhaps we can excuse end-user organisations for some of their development problems, But can we, and should we, excuse software companies? Software development is, after all, their specialty and their sole reason for being. Why is somuch commercial software so bug-ridden? Why do we accept it?
One problem is that many software suppliers have educated people to accept software of poor quality. Microsoft, and many other vendors, know that there are problems with their software when they release it. They actually rely on users to tell them what the problems are.
It is not hard to believe that Microsoft is unconcerned about the many bugs in its applications and operating systems. The General Motors press release was so funny because it hit the target so well. Bill Gates is on record as saying that users aren't concerned about bugs, and that new versions of software are not to fix bugs but to release new features.
There is a very understandable reason why so much commercial software is ridden with bugs. It is too complex, and too many people have worked on it. Charles Wang, the legendary founder of Computer Associates, once told me that if a software project was running late, he would take people off the project, not put more people on.
Most modern software is written by vast teams of programmers, each working on one piece of the software. The co-ordination and communication problems are enormous. The more people there are on a project, the more they need to meet with each other to ensure they are all moving in the same direction.
That is why some of the best and most elegant software comes from some of the smallest software houses. There are substantial dis-economies of scale in software development.
One of the most famous books in the history of the computer industry is The Mythical Man Month, by Frederick Brooks. First published in 1975, it describes the development of IBM's OS/360 mainframe operating system. It remains the classic work on software development and why things go wrong.
"Large programming projects suffer management problems different from small ones due to the division of labour. The conceptual integrity of the product is therefore critical." Brooks' point is like Wang's - that too many cooks spoil the broth. It is a lesson Bill Gates, and many others, have not learnt.
No comments:
Post a Comment