Many of us have serious misconceptions about the capabilities of current software approaches. Based upon surveys of corporate software projects in the United States, the realities of software development are as follows. About one third of all software projects are cancelled. Average projects expend twice as much budget and schedule as initially planned. After delivery, the majority of systems are considered unsuccessful because they have far fewer capabilities than expected. Modifying and extending systems are the most expensive cost drivers and very likely to create new defects. Overall, the outcomes of virtually all application software projects are stovepipe systems, brittle software architectures that under-perform on requirements.
The software crisis in corporate development became apparent decades ago, when procedural software technologies were popular. Subsequent, object-oriented approaches (such as the Object Modeling Technique) have been equally unsuccessful for corporate developers. These outcomes have been repeatedly confirmed by research. Three key factors are exacerbating the software crisis:
requirements change,commercial innovation and distributed computing.A significant part of the problem is rising user expectations. User requirements for systems have increased much faster than corporate developers' capability to deliver. Requirements changes are more frequent as businesses maneuver for competitive advantage with strategic corporate software.
Another confounding factor is the destabilizing force of accelerating technology innovation, both in commercial software and hardware platforms. Corporate developers have difficulty finding compatible configurations of software products, and are forced to upgrade configurations frequently as new products are released. Software maintenance due to technology upgrades is a significant corporate cost driver.
Distributed computing is an essential feature of many new applications due to predominance of the Internet and geographically diverse enterprises. Traditionally, software designers assumed homogeneous configurations, centralized systems, local communications, and infrequent failures. Today's highly distributed enterprises require heterogeneous hardware/software, decentralized legacy configurations, and complex communications infrastructure. The result is an environment with frequent partial system failures. Distributed computing reverses many key assumptions that are the basis for procedural and object-oriented software development.
The software industry has established object-orientation (OO) as the mainstream technology. OO is the technology adopted by new corporate development projects because OO is universally supported by software tool vendors. Masses of legacy programmers are training for object-oriented development (e.g. C++ and Java) as corporations create new strategic systems. Unfortunately, these developers and corporations are likely to become the next generation of disillusioned participants in the software crisis. However, the organizations that survive and thrive with this technology, must use it in sophisticated new ways, represented by componentware.