Crisis Management for Software Development and Knowledge Transfer
Crisis is a burning issue; this is not a phenomenon, which can be conquered forever. Current approach to crisis is an optimized collaboration, which allows for manageable, measurable and predictable software development. Crisis is a new reality to live and work with. The current software development crisis dates back to the 1960s. The root cause of crisis is misbalance between resources and options. Understanding the nature of crisis helps to understand the reasons for the future crises.
This book is a navigator in lifecycle models, methodologies, principles and practices for predictable and efficient software development in crisis, i.e. under rapid requirement changes, resource deficit and other uncertainties. Therefore, the starting chapters suggest the major approaches to software development and their applicability in crisis. Further narration is case-based; it involves large-scale software implementations in different industries and knowledge transfer processes in IT education. The book suggests a set of principles that potentially marry the client’s and the developer’s views of the future software product in order to avoid or to mitigate the crisis.
The book will be helpful for students, postdocs, theorists and practitioners in software development. It suggests approved principles and practices of crisis management for software development.
In this chapter, we discuss software development methodologies. These are adaptive process frameworks adjustable to software product size and scope. They usually include a set of methods, principles and techniques, and software development tools. Each of the methodologies can implement any of the lifecycle models. We discuss the difference between formal and agile methodologies. The formal methodologies include more artifacts; they have a rich set of complex processes, which include larger workflows and smaller activities. For each activity, every role assigned to it produces a deliverable. In crisis conditions, such as hardly formalizable problems, rapidly changing requirements and other uncertainties, agile methodologies, which are more adaptive and flexible in terms of artifacts, are applicable. The agile methodologies rely on self-disciplined and self-manageable teams, and consequently they are more constrained in terms of human-related factors. Similar to lifecycle models, there is no “silver bullet” in software development methodologies. Due to rigorous processes and more artifacts, formal methodologies are suitable for large-scale product development. Agile methodologies require special techniques and high level of discipline; otherwise, they can likely result in a low quality of software production.
The chapter discusses lifecycle models for software development in more detail. These include build-and-fix, waterfall, incremental, object-oriented and spiral. We present a more detailed description of the lifecycle models application for software development. We compare benefits and shortcomings of the models discussed. We confirm that there is no “silver bullet”, i.e. a universal lifecycle model equally applicable to any software product. Consequently, lifecycle model choice is dependent upon product size and scope; each project requires a unique combination of features. In crisis, we recommend to combine prototyping with the other models that we discussed in order to achieve a common understanding of the key product features and to reduce project risks. The lifecycle model choice determines project economics, time to market, product quality and overall project success. However, the product success essentially depends on human factors, which include common vision of the critical product functions, transparent communication and feedback. We analyze applicability of the lifecycle models to large-scale, mission-critical software systems, which is essential in crisis. Finally, we introduce a methodology, which includes a spiral-like lifecycle and a set of formal models and visual tools for software product development. The methodology helps to optimize the software product lifecycle, which is mission-critical in crisis. The methodology is applicable to large-scale, complex software products for heterogeneous environments.