With software products, it is usual to find that the software has major `bugs' and does not work reliably for some users... The lay public, familiar with only a few incidents of software failure, may regard them as exceptions caused by exceptionally inept programmers. Those of us who are software professionals know better; the most competent programmers in the world cannot avoid such problems.