Evolutionary Design:
Take only one Decision
at a time
Adrian Bolboacă
@adibolb
adrian.bolboaca@mozaicworks.
com
Objectives
◊
Understand Evolutionary Design ideas
◊
Use Baby steps for Evolutionary Design
◊
Have a flow while evolving the design
Evolutionary Design
The art of growing a system by observing its
natural traits and then normalizing and
optimizing its growth
Evolutionary Design
Evolutionary design is about the
transformations that take place when we add
new behaviors / tests.
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
Entry Point
The initial batch of steps when starting a
problem
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
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
Coding Time
◊
Problem: Write code Outside-In on the Bank
Kata
Coding Time
◊
Problem: Write code Bottom-Up on Poker
Game
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
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
#RemotePairProgramming
Join my #RemotePairProgramming Codecasts:
contact me and pair during a recorded
codecast with me
Join Mozaic Works
Software Design School
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
Thank you!

Evolutionary Design: Take Only One Decision at a Time

  • 1.
    Evolutionary Design: Take onlyone Decision at a time Adrian Bolboacă @adibolb adrian.bolboaca@mozaicworks. com
  • 2.
    Objectives ◊ Understand Evolutionary Designideas ◊ Use Baby steps for Evolutionary Design ◊ Have a flow while evolving the design
  • 3.
    Evolutionary Design The artof growing a system by observing its natural traits and then normalizing and optimizing its growth
  • 4.
    Evolutionary Design Evolutionary designis about the transformations that take place when we add new behaviors / tests.
  • 5.
    Evolutionary Design Ideas ◊ Thetests 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
  • 6.
    Entry Point The initialbatch of steps when starting a problem
  • 7.
    Design Flow In positivepsychology, 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
  • 9.
    Coding Time ◊ Problem: Writecode Outside-In on the Bank Kata
  • 10.
    Coding Time ◊ Problem: Writecode Bottom-Up on Poker Game
  • 11.
    Anti-Patterns ◊ Focus on implementationdetails 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 bothDeductive 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
  • 13.
    #RemotePairProgramming Join my #RemotePairProgrammingCodecasts: contact me and pair during a recorded codecast with me
  • 14.
  • 15.
    Join Mozaic Works SoftwareDesign 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
  • 16.