A software crisis is a mismatch between what software can deliver and the capacities of computer systems, as well as expectations of their users. This became a growing problem in the 20th century as computing grew by leaps and bounds and software was unable to keep pace. As the complexity of systems grows, so do the needs of users, who expect increasingly more performance from their software. Programmers may struggle to keep pace, creating a software crisis.
Consumer software typically moves through a slow series of development phases, but makes up a small portion of the volume of business in the industry. The bulk of software development is sunk into systems for specific applications, ranging from the programs that handle missile guidance aboard naval cruisers to internal record-keeping for health insurance companies. This software generally requires a substantial investment from the customer, as well as extensive programming from personnel charged with developing, testing, and maintaining it.
Such projects can run into a software crisis where they start to go over budget and take much longer than expected to develop. The programmers working on the software may have to deal with ongoing bug fixes while learning new aspects of a system, making adjustments for the client, and addressing other issues that arise. Low quality can be a concern, as the programmers may experience increasing pressure to meet budgets at all costs, even if it means the software won’t be of good quality. Less documentation tends to be produced as well.
This is not just an issue for the development of new software products. Another concern can be the need to maintain older software which may have problems related to poor development or the failure to anticipate growing needs. Programmers could be spending large amounts of time on keeping legacy software functional so a company can continue to operate. With high investment in the older software, the company may be reluctant to order a new program, even if it would better meet their needs, because this could involve more expense and problems during the changeover.
Pressure to produce complex, advanced code can be a significant contributor to a software crisis. It can be difficult to control the pressure while keeping costs under control and staying on a time table. Some measures for dealing with a software crisis can include substantial advanced planning, selection of highly qualified personnel, and ongoing updates to make sure the project stays on task and on focus.