Kevin Lynch has an interesting analysis and discussion of computer bugs and software development. He discusses two ideas about how to reduce the number of bugs in developed software.
The first is that by creating smaller applications, i.e., applications with less code, we can reduce the number of opportunities to induce errors or bugs. The development of 4GL programming languages has already allowed us to create more complex software applications and dramatically reduce the number of lines of code to create these applications.
The second is that by understanding what people want and designing user interfaces that are usable and enjoyable we can impove the quality of software (and the experience of using it). This increase in quality should also reduce the number of bugs and design decisions that are percieved as bugs.