Software development projects will always be characterized by risks and uncertainties, which are ultimately the sources of the projects' failures. As in any experimental process, the ability of the experimenter to control the sources of errors will largely determine the accuracy and validity of the experimental results. Unfortunately, the innovative nature of the software development process makes it extremely difficult for the project team and its leadership to control even the identifiable risk factors, making project failures unavoidable in some cases. Consequently, for the long-term benefit of the software industry, organizations should, as a matter of policy, institute formal mechanisms for uncovering the underlying reasons for failed or abandoned projects on a regular basis. Maintenance and enhancement of successfully implemented systems are routinely undertaken in organizations because it is considered standard practice that any new system will have to undergo some changes—either corrective or adaptive—in the course of its life, if it is to continue to be useful or beneficial to the organization. By the same token, the formal practice of learning from the experiences of past failed projects, through postmortems, will produce a wealth of ideas and information that can be viewed as returns on the organizational resources invested in those failed projects. If more organizations adopt the practices of the engineering professions in dealing with systems failures, as advocated by Petroski (1992), we may see a marked decline in the number of failed projects in the software industry. Even as each new project attempts to stretch the limits of the technology, we may have a better sense of what is possible as opposed to what is not feasible in systems development efforts. Still, more studies are needed to enable us to better understand the whole constellation of issues surrounding the failure of software development projects. This information will help organizations to better understand how to plan and manage new projects to minimize the chances of failure and improve organizational performance in the delivery of new systems.