Evolutionary Design
Why?
In a dynamic world we cannot assume we can design up front, because the context is changing faster and faster. Then we need to start with a minimum design and adapt it while growing and improving as we go. Evolutionary Design can help us.
What?
Evolutionary Design is an approach to incrementally grow a system while observing growth patterns and focusing on normalizing, optimizing and maximizing the growth.
Articles
- What is Evolutionary Design
- Organizational Evolutionary Design
- 1. Evolutionary Design: Normalizing Growth
- (Soon) Evolutionary Design – Behavior Slicing
- (Soon) Evolutionary Design – Focus on Problem, not on Solution
- (Soon) Evolutionary Design – Transformations with Levels of Abstraction
- (Soon) Evolutionary Design – Transformations with Levels of Coupling
- (Soon) Evolutionary Design – Inductive and Deductive
- (Soon) Evolutionary Design – Selection Pressure
- (Soon) Evolutionary Design – Solution Navigation
- (Soon) 2. Evolutionary Design: Optimizing Growth
- (Later) 3. Evolutionary Design: Maximizing Growth
Video
- Evolutionary Design – Evolve your Code like growing a live organism (Paris 18 May 2018)
Codecasts
- TDD as if you Meant It:
- Episode 1: Think -> Red -> Green -> Refactor
- Episode 2: I care about behavior and not about representation
- Episode 3: Refactor Primitives to Concepts
- Episode 4: Refactor to a new Class
- Episode 5: Refactoring to Builder
- Episode 6: Some Traditional TDD – part 1 (design alternative to Episode 5)
- Episode 7: Some Traditional TDD – part 2 (design alternative to Episode 5)
- Episode 8: Create Duplication in order to remove it
- Episode 9: Experiment Design Alternatives when Stuck
- Episode 10: Add Missing Tests for Untested Branches
- Episode 11: Refactor and Clean-Up
- Episode 12: Separate Production from Test Code
- Episode 13: Clean-Up before next Triangulation
- Episode 14: Refactor, but in Small Steps Now
- Episode 15: Remote Live Coding with Grenoble
- Remote Live Coding
Quotes
- “Evolutionary Design is like helping your plants grow, knowing what measures to take so they will be fruitful”
- “When evolving the design of a system we observe growth patterns that simplify the resulting system”
- “TDD as if you Meant It doesn’t guarantee full test coverage, you need to have tools and use them to check your work”
- “Taking only one decision at a time is Taking Baby Steps for Evolutionary Design”
- “First normalize, then optimize and only then maximize growth.”
- “Evolve rather than change”
- “If you are rigid, your software system will be rigid”