Crisis Response and Management

Crisis Response and Management

Sergey V. Zykov (National Research University Higher School of Economics, Russia)
Copyright: © 2019 |Pages: 12
DOI: 10.4018/978-1-5225-7661-7.ch001


Information technology is critically dependent on a number of technological and human factors. Software engineering processes are multi-sided; they include customer and developer parties. Conceptual misunderstanding by either party often results in the products which do not meet customer's expectations. This misconception of the software product scope usually leads to a crisis of software product delivery. To adequately manage and efficiently respond to this crisis, the authors recommend using software engineering models, methods, techniques, practices, and tools. Software engineering is a discipline which started in the 1960s as a response to the so-called “software crisis”; it combines technical and human-related skills. To manage the crisis, the authors suggest architecture patterns and instantiate them by implementation examples.
Chapter Preview


In the 1960s, the so-called “software crisis” triggered the advent of software engineering as a discipline. This term originated from the critical development complexity, which happened due to the rapid growth of computational power. At that time, the computing power of the machines became so overwhelming that a number of software development projects were over budget, late or unsuccessful. One well-known example was the first General Electric’s payroll system launched in 1954 at Louisville, Kentucky; this was late, over budget, and missing crucial features (Topi, & Tucker, 2014). Irrespective of human efforts, the complexity of the hardware and software systems was hard to cope with by means of the old methods and techniques. The challenge was so dramatic that in 1967 NATO arranged an invitation-only conference, where world leaders in IT research and practice searched for an efficient response. At the conference, the term “software crisis” was coined by F.Bauer and used by E.Dijkstra (Naur, & Randell, 1968).

Another term suggested at the conference by the same F. Bauer was software engineering. The idea was to apply the engineering methods of material production to the new domain of large-scale concurrent software systems in order to make the software projects more accurate and predictable. This software engineering approach was feasible, though the methods and practices used had to differ substantially from those used in the material production. Specifically, the experts examined bridges as the instances of complex material systems.

The attendees concluded that the distribution of time and cost by the lifecycle phases, especially for the post-delivery maintenance was very different for software and material production. This is why the new software engineering discipline was in need of new methodologies, techniques and tools.

The focus of the software engineering discipline was the “serial” production of substantially large-scale, complex and high quality software systems. Concerning software complexity, at least two dimensions were identified; these were technical and management complexity (Booch, 2006). To measure software product complexity and quality, a set of attributes and metrics was suggested. The quality attributes included performance, reliability, security, fault tolerance, usability, strategic reusability and maintainability; their importance depended on the product size and scope (Lattanze, 2008). The complexity metrics included product size in terms of lines of code, function points, nesting levels, cyclomatic complexity and a number of more sophisticated ones (Debbarma, Debbarma, Chakma, & Jamatia, 2013). These metrics assisted in the divide-and-conquer strategy; later, they this general approach transformed into elaborate product estimation techniques and software development methodologies (Jensen, 2014).

Researchers argue whether the crisis in software engineering is over yet (Colburn, Hsieh, Kehrt, & Kimball, 2008) or it still exists (Buettner, Dai, Pongnumkul, & Prasad, 2015). This happens because of the fundamental differences in the lifecycles of software and material products. One critical difference between large-scale software and material production is the distribution of time and cost by the development lifecycle phases. Therewith, maintenance is the most time and cost consuming, it often exceeds 60% of the software project expenses (Schach, 2011). The other crucial difference is that software production often depends dramatically upon human factors. These human factors relate to the management aspects of software complexity, whereas the technology factors relate to the technological aspects. Certain product categories are far more complex in terms of management than in terms of technology; however, the influence of the human factors on their development is largely underestimated. For such software product categories as enterprise information systems and defense management information systems, neglecting these human factors often results in project delays or even failures (Booch, 2006).

Complete Chapter List

Search this Book: