In Chapter 1, we defined our own ten commandments for successful software development. In this chapter, we present some of the reasons why successful software development has always been so difficult in the past. The answer lies in the unique combination of people, processes, and technology that need to come together for a software development project to succeed. If you understand the dynamics of this combination, you will start to understand why there has never been, and never will be, any "silver bullets" in software development. This is a necessary starting point in understanding the difficulty surrounding successful software development. Only by learning from lessons of the past can we hope to avoid making the same mistakes in the future. Let's take a brief look at the history of modern software development and identify some of the difficulties surrounding successful software development it.
In the 1970s, development backlogs for corporate IT departments averaged eighteen months or longer. Since IT was usually the only department with the necessary resources to develop software, it owned the monopoly and wasn't often concerned about service levels or prices. In the 1980s, developers struggled with PCs, DOS, and 64K memory limitations. In the 1990s, just as many software developers thought they were starting to understand client-server software, widespread use of the Web set expectations for point and click access to any piece of corporate data. Software and network infrastructures struggled to catch up with web technology that obsoleted, literally overnight, many of even the newest client-server software architectures. One thing, however, has remained constant over time: there are no silver bullets in software development.
Successful software development starts with good requirements and a good software architecture, long before the first line of code is ever written. Even then, since software is easy to modify, compared to hardware, it often is all too easy for users to change the requirements. The impact of changing a single line of code, however, can wreak havoc on a program, especially a poorly designed one. On the people side, you'll need more than just a few good software developers for a successful project. Besides good developers, you'll also need system administrators and other support staff, such as database administrators in your development organization. As you schedule and budget a project, remember to make programmer skills the largest weighting factor, more so than the language, development tool, OS, and hardware choices you will also have to make. Finally, start planning for testing, production rollout, and maintenance of your software early in the project life cycle, or you'll never catch up. If COBOL programmers in the 1970s would have planned for users accessing their programs through a web-based front end in the year 2001, imagine where we would be today!