Ever since the first major software systems were developed, a chronic “software crisis” has been seen either looming ahead or haunting the community (Brooks, 1975). Solutions have been sought mostly in raising the productivity of programmers, making systems less defective (e.g., process management and development approaches; Boehm, 1988; McConnell, 1996), and developing systems by methods that treat the end users as equals to the designers in the development process (e.g., participatory design, PD; Bjerkenes & Bratteteig, 1995; Grudin, 1991). In this chapter, we first discuss these approaches for organizing information systems development (ISD). This leads us to a discussion of agile software development methods that have emerged as a fresh alternative for the more rigid life-cycle-based approaches in recent years.
Extreme programming (XP) tries to address end-user participation and increased quality of work by emphasizing the use of professional work practices and ethical software development. The waterfall model emerged as a systematic, sequential solution to software development problems (Brooks, 1975; Hirschheim, Klein, & Lyytinen, 2003). The IS product was not delivered until the whole linear sequence had been completed. As projects became larger and more complex, problems like stagnant requirements and badly structured programming started to arise.
Overlapping the phases (Fairley, 1985; Pressman, 2000; Sommerville, 2001) and the introduction of the more incremental spiral model (Boehm, 1988; Iivari, 1990a, 1990b) resolved many of the difficulties mentioned earlier. This model presents the software process as a spiral, where each of the loops can be considered to represent one fundamental development step. Thus, the innermost loop might be concerned with requirements engineering, the next with design, and so on (Sommerville). The spiral model assumes a risk-driven approach to the software development rather than a primarily document-driven (waterfall) or code-driven (prototyping) approach (Boehm). Each cycle incrementally increases the system’s degree of definition and simultaneously decreases its degree of risk (Boehm, Egyed, Kwan, Port, & Madachy, 1998).