Evolutionary design is an approach to growing a system through incremental changes by observing its natural traits and optimizing its growth over time. It involves taking design decisions one step at a time by writing a failing test, making it pass in the simplest way, and choosing the next step by considering all options and their pros and cons. The tests apply pressure that molds the production code, and observing how the system evolves through this process can lead to designs that are simplified.
5. Evolutionary Design Ideas
◊
The tests are pressure applied to existing design
◊
The production code is like clay that gets molded
depending on the pressure applied to it
◊
When evolving the design of a system we observe growth
patterns that simplify the resulting system
◊
Evolutionary Design is like helping your plants grow,
knowing what measures to take so they will be fruitful
7. Design Flow
In positive psychology, flow, also known as the zone, is the mental state of
operation in which a person performing an activity is fully immersed in a
feeling of energized focus, full involvement, and enjoyment in the process of the
activity
For Design:
◊
We know next few steps
◊
We understand the direction
◊
We see the directions (options) not to take
8. Take one decision: mechanics
1)Write one failing test
2)Make it pass in the simplest way
3)Write comments with all the possible next
steps
4)Decide pros and cons and choose the best
next step
5)Go back to 3
Remember: Only one design decision at a time
11. Anti-Patterns
◊
Focus on implementation details and not on
design concepts
◊
Consider that tests are the essential output of
TDD, and not well structured design elements
◊
Consider you know exactly the resulting
design, and don’t listen to the design smells
◊
Focus on the solution and not on the problem
12. What’s Next?
◊
Experiment both Deductive and Inductive
approaches during katas or coderetreats
◊
Try both Deductive and Inductive approaches
in your production environment
◊
Watch my codecasts on TDD as if you Meant It
& more
blog.adrianbolboaca.ro/evolutionary-design
◊
Pair with many people and learn from them
15. Join Mozaic Works
Software Design School
◊
Join the level you want:
ҩ Fundamentals
ҩ Paradigms
ҩ Test Driven Design
ҩ Evolutionary Design
ҩ Improve Existing Design
ҩ Optimize Software Design
◊
From the basics to the most advanced & avant-garde
◊
Want to join? adrian.bolbaca@mozaicworks.com