A significant part of software literature is devoted to stories of software failures. The best classics of our industry like Fred Brooks’s “The Mythical Man-Month” are based on the analysis of the failures of software projects. Software engineering was created as a way to reduce the number of abandoned projects and keep budgets and timelines under control. In recent decades, there has also been a focus on difficult user interfaces in desktop applications and web sites.
Introspection is good for any profession and there is still much scope for improvement in the software field. But we have come a long way in the last several years and it is time to look at the progress that we have made.
First, software development has never been easier and of greater quality. This has been the result of many important developments such as the sophistication and maturity of software development environments (compilers, IDEs, refactoring tools, testing tools), widespread use of object-oriented programming, automatic garbage collection, virtual machines, availability of high-quality open source software and more.
Second, Agile practices have moved us away from the old metrics used to measure success. We have smaller, but more frequent development targets that have made it easier for meeting them. In other words, our approach to building software has moved away from big-bang construction to incremental, achievable goals. Our failures are fewer and because they are smaller, they are simpler to correct.
Third, we have been able to take care of much of the “low-hanging fruit” in usability problems. Software applications and websites have become much more intuitive. We will continue to have innovation in user interfaces, but usability problems are fewer today. Take any 1990s book about UI problems – many of those issues have disappeared today.
The problems that we see today are less specific to software development. Software failures are increasingly “business” failures. By that, I mean, software is developed on time and under budget, but it is not what the market wants. The iPhone App store has 50,000 applications: many will disappear because of insufficient marketing. Many online web applications will fail because of competition, not because they were poorly developed. More and more, software development seems to resemble manufacturing: the more resources you can spend on marketing and production, the better the outcome will be.
So, like other disciplines, the technical specifics of software development will become only one pillar in the operation of software firms. We will operate at a high level where the biggest challenge will be understanding the needs of our customers and marketing to them rather than how to write the software without bugs. The scope for improving coding practices will always be there, but it will be a sideshow.