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 揑f 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:
  • 揥hat can be overlooked to go live??
  • 揥hat can be dropped to go live??
  • 揥hat must be improved before going live??
  • 揥hat 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:

  • 揑t can't be this hard!?
  • 揥hy do we need that?!?
  • 揌ow did we get here??
  • 揟here 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 揝urvival 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
?/b> Continuous Risk Management
?/b> Project Chartering
?/b> Project Community
?/b> Test-Driven Management
?/b> Sustainable Pace
?/b> Planning Game
?/b> Storytelling
?/b> Storytesting
?/b> Frequent Releases
?/b> Small Teams
?/b> Sitting Together
?/b> Continuous Learning
?/b> Iterative Usability
?/b> Evolutionary Design
?/b> Story Test-Driven Development
?/b> Refactoring
?/b> Domain-Driven Design
?/b> Pairing
?/b> Continuous Integration
?/b> Collective Ownership
?/b> Coding Standard
?/b> Retrospectives

Send mail to with questions or comments about this web site.
Copyright ?2004 Industrial Logic, Inc. All Rights Reserved.
万丰彩票 临海市 湖北省 钟祥市 大同市 兰溪市 湘潭市 松滋市 铁力市 彭州市 厦门市 宜春市 邹城市 彭州市 山东省 金昌市 平度市 海南省 双滦区 忻州市 葫芦岛市 十堰市 平度市 潞城市 临沂市 阜新市 普兰店市 汉川市 兴城市 都匀市 枣庄市 安达市 烟台市 高邮市 梅河口市 江油市 白银市 丰城市 孝义市 石首市 池州市 葫芦岛市 福建省 金华市 梅河口市 胶州市 上虞市 大石桥市 江阴市 吉首市 大庆市 铁力市 深州市 山西省 厦门市 项城市 永州市 原平市 明光市 耒阳市