Industrial XP -> Evolutionary Design

Evolutionary Design

The following comes from a tutorial on Evolutionary Design, created by Joshua Kerievsky and Russ Rufer.
What is Evolutionary Design? For Projects, it means
  • Whole systems grow in stages
  • System Features
    • Begin life primitively
    • Selectively become mature

For Programmers, it means

  • Being Test-Driven
  • Not Over-Engineering
  • Refactoring to
    • Remove duplication
    • Simplify, clarify code
  • Being influenced by
    • Time to Market
    • Continuous Feedback
    • High-Quality Code
  • Lowering risk of modification via many automated tests

For Customers, it means

  • Rapid response to changes in priorities
  • Freedom to learn at each stage
  • Freedom to go in new directions
  • Closer contact with programmers

Evolutionary Designers

  • Don't produce rigid upfront designs
  • Communicate designs efficiently
  • Know when to ignore the saying “If it ain't broke, don't fix it”
  • Are Not Phasists (i.e. don't work in phases)

Ten Practices of Evolutionary Design

  1. Rapid Return On Investment
  2. Risk Reduction
  3. Backtracking
  4. Selective Automation
  5. Team Intelligence
  6. Walkthrough
  7. Spanning System
  8. Small Iterations
  9. Multiplicity & Selection
  10. Dead Reckoning

1. Rapid Return on Investment

To obtain Rapid ROI, ask:
  • “What can be overlooked to go live?”
  • “What can be dropped to go live?”
  • “What must be improved before going live?”
  • “What can remain primitive for now?”

2. Risk Reduction
Lower the Risk of Modifying Code by

  • Writing good tests
  • Running all tests frequently
  • Practicing
    • Test-Driven Development
    • Continuous Refactoring
    • Continuous Integration
  • Not Over-Engineering
    • Simple Design
    • You Aren't Gonna Need It
  • Using standard solutions
    • Patterns
    • Idioms

3. Backtracking
Continuously Ask or Observe:

  • “It can't be this hard!”
  • “Why do we need that?!”
  • “How did we get here?”
  • “There must be an easier way!”

After making critical observations:

  • Consider alternatives
  • Rewrite code
  • Aggressively refactor code
  • Remove dead code

4. Selective Automation
To get to production quickly, continuously ask:

  • What must be programmed?
  • What can be done manually?

Before programming a system or feature, consider living with it

  • Using a paper-based solution
  • To learn what
    • needs to be automated
    • doesn't need to be automated

5. Team Intelligence
Change anything at anytime

  • Evolve unforeseen solutions
  • Fix unsuccessful evolutions

6. Walkthrough
We spent far more time reading the JUnit code than we spent writing it”

– Kent Beck & Erich Gamma, JUnit: A Cook's Tour

Study code continuously to learn

  • How to improve it
  • Where to evolve it

7. Spanning System
An early, primitive system that

  • Provides end-to-end behavior
  • Touches everything critical
  • Helps guide evolution

8. Small Iterations
Small Iterations help teams

  • Deliver working features fast
  • Learn from code
  • Learn from Iteration Retrospectives

9. Multiplicity & Selection
Discover optimal solutions by

  • Considering proven
    • patterns
    • idioms
  • Developing
    • Workable solutions
    • Experimental solutions
    • Better solutions
  • Allowing for “Survival of the Fittest”
  • Practicing Multiplicity & Selection Economically

10. Dead Reckoning
Ships once navigated by Deduced (or ded) reckoning. For us, it means

  • Knowing where you want to go
  • Continuously assessing your direction

Industrial XP logo
Values & Practices
· Continuous Risk Management
· Project Chartering
· Project Community
· Test-Driven Management
· Sustainable Pace
· Planning Game
· Storytelling
· Storytesting
· Frequent Releases
· Small Teams
· Sitting Together
· Continuous Learning
· Iterative Usability
· Evolutionary Design
· Story Test-Driven Development
· Refactoring
· Domain-Driven Design
· Pairing
· Continuous Integration
· Collective Ownership
· Coding Standard
· Retrospectives

Send mail to with questions or comments about this web site.
Copyright © 2004 Industrial Logic, Inc. All Rights Reserved.