Adaptive Software Development is part 1 of our 12 Principles of Agile Development series.
Adaptive software development (ASD) is a software development process that grew out of the rapid application development work by Jim Highsmith and Sam Bayer. ASD is centered around the principle that continuous adaptation of the process to the work at hand is the normal state of affairs.
The Adaptive software development concept is a replacement for the waterfall cycle of plan, build, design. Instead, ASD leverages a repeating cycle of speculate, collaborate, and learn cycles. This dynamic cycle allows for continuous learning and adaptation to the emergent state of the project. It is a life cycle dedicated to continuous learning and oriented to change, reevaluation, peering into an uncertain future, and intense collaboration among developers, management, and customers.
A waterfall development life cycle, based on an assumption of a relatively stable business environment, becomes overwhelmed by high change. Planning is one of the most difficult concepts for engineers and managers to reexamine. For those raised on the science of reductionism (reducing everything to its component parts) and the near-religious belief that careful planning followed by rigorous engineering execution produces the desired results (we are in control), the idea that there is no way to “do it right the first time” remains foreign. The word “plan,” when used in most organizations, indicates a reasonably high degree of certainty about the desired result. The implicit and explicit goal of “conformance to plan” restricts a manager’s ability to steer the project in innovative directions.
Speculate gives us room to explore, to make clear the realization that we are unsure, to deviate from plans without fear. It doesn’t mean that planning is obsolete, just that planning is acknowledged to be tenuous. It means we have to keep delivery iterations short and encourage iteration. A team that “speculates” doesn’t abandon planning, it acknowledges the reality of uncertainty. Speculation recognizes the uncertain nature of complex problems and encourages exploration and experimentation. We can finally admit that we don’t know everything.
The second conceptual component of ASD is collaboration. Complex applications are not built, they evolve. Complex applications require large volumes of information be collected, analyzed, and applied to the problem—a much larger volume than any individual can handle by him- or herself. Although there is always room for improvement, most software developers are reasonably proficient in analysis, programming, testing, and similar skills. But turbulent environments are defined in part by high rates of information flow and diverse knowledge requirements. Building an eCommerce site requires greater diversity of both technology and business knowledge than the typical project of five to ten years ago. In this high-information-flow environment, in which one person or small group can’t possibly “know it all,” collaboration skills (the ability to work jointly to produce results, share knowledge, or make decisions) are paramount.
Once we admit to ourselves that we are fallible, then learning practices—the “Learn” part of the life cycle—become vital for success. We have to test our knowledge constantly, using practices 175 like project retrospectives and customer focus groups. Furthermore, reviews should be done after each iteration rather than waiting until the end of the project.
The six characteristics of an ASD life cycle are:
- Mission focused
- Feature based
- Time boxed
- Risk driven
- Change tolerant
For many projects, the requirements may be fuzzy in the beginning, but the overall mission that guides the team must be well articulated. The Mission Statement acts as a guide to encourage exploration in the beginning but narrows the focus over the course of a project. A mission provides the project boundaries rather than a fixed destination. Without a good mission and a constant mission refinement practice, iterative life cycles can easily become oscillating life cycles—swinging back and forth with no progress. Mission statements provide direction and criteria for making critical project trade off decisions.
The ASD life cycle focuses on results, not tasks. The results are identified as application features. Features are the customer functionality that is to be developed during an iteration. While documents could be defined as a deliverable, they are always secondary to a software feature that provides direct results to a customer. A customer-oriented document such as a user manual is an example of a feature. Features may evolve over several iterations as customers provide feedback.
The practice of time-boxing, or setting fixed delivery times for iterations and projects, has been abused by many who use time deadlines incorrectly. Time deadlines used to bludgeon staff into long hours or cutting corners on quality can be a form of tyranny as they undermine a collaborative environment. Time-boxing is minimally about time. It is really about focusing and forcing hard trade off decisions. In an uncertain environment in which the rate of change is high, there needs to be a periodic forcing function to get work finished.
ASD is also change tolerant, not viewing change as a “problem” but seeing the ability to incorporate change as a competitive advantage.
From a conceptual perspective, ASD is based on complex adaptive systems (CAS) theory, which Brian Arthur and his colleagues at the Santa Fe Institute have used to revolutionize the understanding of physics, biology, evolution, and economics. It is rooted in agents, self-organization, and emergent outcomes. From a practical perspective, the ASD framework is based on years of experience with traditional software development methodologies; consulting on, practicing, and writing about rapid application development (RAD) techniques; and working with high-technology software companies on managing their product development practices.
If you are looking for assistance with any type of software development, please schedule an appointment to speak with one of our project managers.