Practice: Evolutionary Design
This practice describes an approach to design that assumes that the design will evolve over time, minimizing documentation while still providing guidance for making design decisions and communicating those decisions.

The Evolutionary Design practice reduces time-to-market for agile teams by incrementally formulating the design while implementing the software. It improves productivity, innovation, and time-to-market by leveraging refactoring and patterns to improve quality and maximizing reuse opportunities.

The application of evolutionary, iterative, and incremental development methods for software dates back to the 1950s. Evolutionary development is an alternative to a waterfall process. In the waterfall process, each past step or phase in the process was considered complete before moving on to the next. The waterfall implies it is not possible to re-enter previous phases to perform rework on any part of the project. The evolutionary design process realizes a solution by enhancing and changing its structure and capabilities incrementally. This practice fits well within the framework of an incremental, iterative or spiral development process, but can be used in any methodology.
Main Description

The Essence of Evolutionary Design

During each pass of the design, you will add, refine, and refactor your solution. The following steps summarize the evolutionary design practice:

  • Understand new requirement details
  • Identify design elements
  • Determine how elements collaborate to realize the scenario
  • Refine design decisions
  • Design internals
  • Communicate the design
  • Understand the architecture
  • Evaluate the design
How to read this practice

Become familiar with its overall structure. Be sure that you understand what it is in it and how it is organized.

Review all of the key concepts to understand the terminology used in this practice, including:

Read the Task: Design the Solution to understand what needs to be done. Finally, review the associated guidelines for more information on the overall workflow.

See Using Evolutionary Design in Context for more information.

Additional Information

Meyer, B., Object-Oriented Software Construction, Prentice Hall, 1997

A primer on OO basics.

Gamma, E., Helm, R., Johnson, R., Vlissides, J., Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley Professional; 1995

The "bible" on learning what patterns are and how to describe them.

Shalloway, J., Trott, J. Design Patterns Explained A New Perspective on Object-Oriented Design, Second Edition, Addison Wesley, 2005

This book describes how to evolve a design via design patterns.

Richard E. Fairley, Mary Jane Willshire, "Iterative Rework: The Good, the Bad, and the Ugly," Computer, vol. 38, no. 9, pp. 34-41, Sept., 2005.

Martin Fowler, "Is Design Dead?" Retrieved 8 August 2008

Craig Larman, Victor R. Basili, "Iterative and Incremental Development: A Brief History" Computer, vol. 36, no. 6, pp. 47-56, Jun., 2003.