SlideShare a Scribd company logo
1 of 38
Download to read offline
Evolutionary
Design
Adrian Bolboacă
Programmer, trainer, coach
blog.adrianbolboaca.ro
Aythor of the Coderetreat Book
https://leanpub.com/coderetreat
Why this talk?
● Continuously improve our understanding of the world
● Push the bar of software development
● Develop living systems, rather than rigid projects
● Evolve rather than change
● Research new ways of developing software
Disclaimer
● All ideas presented are in evolution (or in progress)
● This is not a basic talk
● I love philosophy and abstract thinking
● Please ask questions whenever you like
What I learned to get
Evolutionary Design
● Unit Testing
● Design Patterns, and how to use them
● The Four Elements of Simple Design
● Pairing
● Team collaboration
● Test Driven Design (TDD)
● TDD Schools: Chicago, London, DDD, etc
● Behavior Driven Development
● Business Analysis
● Domain Driven Design
● Automated acceptance testing
● Exploratory Testing
● … and much more
Contents
1) Evolutionary Design Defnition
2) Evolution
3) Simplicity
4) Focus on problem, not solution
5) Theory of Centers
6) Symmathesy
7) Solution Navigation
8) Transformations
1) Evolutionary Design
Evolutionary = heritable characteristics over
successive generations
Design = building useful objects for specifc
needs
So: how to build objects that continuously
change, but keep its existing functions intact
1) Evolutionary Design
“The art of growing a system by observing its
natural traits and then normalizing, optimizing
and maximizing its growth”
Adrian Bolboaca
Why Evolutionary
Design?
● Build systems that are resilient to change
● Adapt your pace to the business needs
● Manage growing complexity
a. Normalizing Growth
● Observe irregular developments
● Refactor system’s growth to normalize it
● Balance system’s growth
● Setup practices and guidelines
● Create standards of growth
b. Optimize Growth
● Choose a growth objective
● You cannot optimize for everything
● Compromise
● Focus on business needs
● Observe, pro-act, re-act
c. Maximizing Growth
● Make the most out of each optimization
● Understand when it’s the “fertile” moment
● Observe patterns like Low Coupling,
High Cohesion, Structural Duplication, etc
● Use coherent strategies
2) Evolution
Behavior Slicing
● Identify your evolution focus
● Look at Outputs
● Find corresponding inputs
● Organize from simple to complex
Many thanks to Alex Bolboaca
3) Simplicity
The art of fnding the simplest options
● Evolve to the simplest solution you can
● Remove rather than add items to the system
● Use The 4 Elements of Simple Design
● Use Behavior Slicing
● The simplest solutions are natural ones
4) Focus on problem,
not on solution
Test After – solution focus
Design Code Test→ →
Test First Programming – solution focus
Design Test Code→ →
Test Driven Design – problem focus
Test Code Design→ → → Solution evolves
5) Theory of Centers
A bottom-up approach, which places users
of buildings as builders of their environments
through the process of co-creating a
common ground with the collective consensus
of a “shared pattern language”; to give users
better control over the spaces they dwell in.
from Christopher Alexander
https://nourdiab.wordpress.com/2011/02/23/the-theories-of-christo
pher-alexander
5) Theory of Centers
● Observe system’s behavior
● Find similarities and particularities in
decentralized systems
● Identify hubs around which systems
occur in living structures
from Christopher Alexander
Many thanks to Emmanuel Gaillot
6) Symmathesy
Symmathesy = Mutual Learning in Living
Systems
A word in progress
from Nora Bateson
https://norabateson.wordpress.com/2015/11/03/symmathesy-a-word-in-progress
Many thanks to Jessica Kerr
6) Symmathesy
For Evolutionary Design
● Feedback is a learning mechanism
● The designer uses techniques to learn
from the software system
● Identify patterns and heuristics (similarities,
duplication, coherence, etc)
● Maybe in the future the system might be
able to learn from the designer
7) Solution Navigation
Navigation-related structural change in the
hippocampi of taxi drivers.
“The role of the hippocampus is to facilitate
spatial memory, in the form of navigation”
https://www.tutor2u.net/psychology/reference/maguire-2000
Many thanks to https://twitter.com/sleepyfox
7) Solution Navigation
● Practice to identify possible solutions
(Solution Seeker
http://blog.adrianbolboaca.ro/2014/02/pair-programming-game-solution-seeker )
● Pair with experienced navigators
● Extend your comfort zone for heuristics
● Work on design studies
● Read a lot of code
● Choose possible solutions based on
objective factors
● Feed your brain with practice
8) Transformations
During an evolution, transformations are the
essence:
● Transformation Priority Premise
● Levels of Abstraction
● Levels of Coupling
● Inductive vs Deductive
● ...
8) Transformations
But how do we have transformations?
We put pressure on existing design
Tests are pressure on existing design. We
need to look at the patterns and evolve the
system organically
Tests are not the only type of pressure
8) Transformations
Transformation Priority Premise
“As the tests get more specifc, the code gets
more generic.”
from Robert C Martin
https://8thlight.com/blog/uncle-bob/2013/05/27/TheTransformationPriorityPremise.html
8) Transformations
Transformation Priority Premise
● ({}–>nil) no code at all->code that employs nil
● (nil->constant)
● (constant->constant+) a simple constant to a more complex constant
● (constant->scalar) replacing a constant with a variable or an argument
● (statement->statements) adding more unconditional statements.
● (unconditional->if) splitting the execution path
● (scalar->array)
● (array->container)
● (statement->recursion)
● (if->while)
● (expression->function) replacing an expression with a function or algorithm
● (variable->assignment) replacing the value of a variable.
8) Transformations
Levels of abstraction
Depending on which abstraction level you want to
evolve the system, you might use diferent heuristics
Use encapsulation to abstract communication
between levels
● complex systems
● system
● subsystem
● module
● (optional) namespace / package
● interface / superclass
● class / enum / struct
● feld / constant
● variable
● value
8) Transformations
Levels of Coupling
Depending on the coupling your system can evolve
naturally more or less
● Conventions
● Transient
● Events
● Composition
● Inheritance
● Class scope
● Function scope
Inductive vs Deductive
Inductive
● Start from the atomic part and refactor++.
● Use refactoring heuristics to normalize
growth
● No design up-front
Deductive
● Start from scafolding
● Use heuristics to optimize growth
● More design up-front
Inductive vs Deductive
Inductive (usually)
● TDD as if you Meant It
● Bottom-up
● Take few decisions at a time
● Middle-top (DDD)
Deductive (usually)
● Walking Skeleton
● Outside-in
● Take structural decisions
● Middle-bottom (DDD)
Inductive vs Deductive
I had a very long talk in Paris Oct 2017
about Inductive vs Deductive Evolutionary
Design
Read at
https://medium.com/@cyrillemartraire/adrian-bolboaca-on-evoluti
onary-design-inductive-vs-deductive-approaches-a7cead4bdd20
Thanks to Cyrille Martraire for the write-up
Selection Pressure
● Pressure = business metrics
● Use business tests to grow your system
● Similar with TDD as if you Meant It, but with
business focus
Many thanks to Julian Ghionoiu
Code cast
http://blog.adrianbolboaca.ro/2018/01/remotepairprogramming-ep-005
-evolutionary-design-selection-pressure
Recap
1) Evolutionary Design Defnition
2) Evolution
3) Simplicity
4) Focus on problem, not solution
5) Theory of Centers
6) Symmathesy
7) Solution Navigation
8) Transformations
What’s Next for me?
Evolve the topic
Write more articles
Publish more code casts
Write a book on Evolutionary Design
What’s Next for you?
Let’s talk about this topic
(Continuously Evolving) series of articles
and code casts
http://blog.adrianbolboaca.ro/evolutionary-design
Remote Pair with me
http://blog.adrianbolboaca.ro
Share your experiences
https://twitter.com/adibolb
About me
When not thinking about philosophical
topics I still:
Write software
Help companies and teams
Mentor, train and coach
Workshop
Join Evolutionary Design Workshop
25-26 June in Paris
https://mozaicworks.com/public-trainings-and-workshops/evolutionary-de
sign-workshop
Mozaic Works Design
School
Join the Mozaic Works Design School
How? Contact me!
Contact me
Adrian Bolboacă
Programmer, trainer, coach
adrian.bolboaca@mozaicworks.com
@adibolb

More Related Content

Similar to Evolutionary Design - NewCrafts Paris 18 May 2018

Managing software projects & teams effectively
Managing software projects & teams effectivelyManaging software projects & teams effectively
Managing software projects & teams effectivelyAshutosh Agarwal
 
Agile Development unleashed
Agile Development unleashedAgile Development unleashed
Agile Development unleashedlivgeni
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software DevelopmentAhmet Bulut
 
Introduction to Agile Software Development Process
Introduction to Agile Software Development ProcessIntroduction to Agile Software Development Process
Introduction to Agile Software Development ProcessSoftware Park Thailand
 
Contemporary Software Engineering Practices Together With Enterprise
Contemporary Software Engineering Practices Together With EnterpriseContemporary Software Engineering Practices Together With Enterprise
Contemporary Software Engineering Practices Together With EnterpriseKenan Sevindik
 
TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)Nacho Cougil
 
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)ssusercaf6c1
 
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)Nacho Cougil
 
Rouan's design principles
Rouan's design principlesRouan's design principles
Rouan's design principlesrouanw
 
Frug'Agile 2021: Agile as doctrine (and that's a good thing)
Frug'Agile 2021: Agile as doctrine (and that's a good thing)Frug'Agile 2021: Agile as doctrine (and that's a good thing)
Frug'Agile 2021: Agile as doctrine (and that's a good thing)Jason Yip
 
Use Design Principle to Improve code quality
Use Design Principle to Improve code qualityUse Design Principle to Improve code quality
Use Design Principle to Improve code qualityHebin Wei
 
TDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekTDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekNacho Cougil
 
Introduction To Agile Refresh Savannah July20 2010 V1 4
Introduction To Agile Refresh Savannah July20 2010 V1 4Introduction To Agile Refresh Savannah July20 2010 V1 4
Introduction To Agile Refresh Savannah July20 2010 V1 4Marvin Heery
 
Open agile is free and open source community agile-
Open agile  is free and open source community agile-Open agile  is free and open source community agile-
Open agile is free and open source community agile-Agile Tour Beirut
 
Software Development Methodologies
Software Development Methodologies Software Development Methodologies
Software Development Methodologies Frances Coronel
 

Similar to Evolutionary Design - NewCrafts Paris 18 May 2018 (20)

Managing software projects & teams effectively
Managing software projects & teams effectivelyManaging software projects & teams effectively
Managing software projects & teams effectively
 
Agile Development unleashed
Agile Development unleashedAgile Development unleashed
Agile Development unleashed
 
What is xp
What is xpWhat is xp
What is xp
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software Development
 
Better java with design
Better java with designBetter java with design
Better java with design
 
Introduction to Agile Software Development Process
Introduction to Agile Software Development ProcessIntroduction to Agile Software Development Process
Introduction to Agile Software Development Process
 
Contemporary Software Engineering Practices Together With Enterprise
Contemporary Software Engineering Practices Together With EnterpriseContemporary Software Engineering Practices Together With Enterprise
Contemporary Software Engineering Practices Together With Enterprise
 
It's XP, Stupid
It's XP, StupidIt's XP, Stupid
It's XP, Stupid
 
TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)
 
Agile
AgileAgile
Agile
 
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
 
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
 
Rouan's design principles
Rouan's design principlesRouan's design principles
Rouan's design principles
 
Frug'Agile 2021: Agile as doctrine (and that's a good thing)
Frug'Agile 2021: Agile as doctrine (and that's a good thing)Frug'Agile 2021: Agile as doctrine (and that's a good thing)
Frug'Agile 2021: Agile as doctrine (and that's a good thing)
 
Usable Software Design
Usable Software DesignUsable Software Design
Usable Software Design
 
Use Design Principle to Improve code quality
Use Design Principle to Improve code qualityUse Design Principle to Improve code quality
Use Design Principle to Improve code quality
 
TDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekTDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech Week
 
Introduction To Agile Refresh Savannah July20 2010 V1 4
Introduction To Agile Refresh Savannah July20 2010 V1 4Introduction To Agile Refresh Savannah July20 2010 V1 4
Introduction To Agile Refresh Savannah July20 2010 V1 4
 
Open agile is free and open source community agile-
Open agile  is free and open source community agile-Open agile  is free and open source community agile-
Open agile is free and open source community agile-
 
Software Development Methodologies
Software Development Methodologies Software Development Methodologies
Software Development Methodologies
 

More from Adi Bolboaca

Stop Task Switching
Stop Task SwitchingStop Task Switching
Stop Task SwitchingAdi Bolboaca
 
Evolutionary Design: Take Only One Decision at a Time
Evolutionary Design: Take Only One Decision at a TimeEvolutionary Design: Take Only One Decision at a Time
Evolutionary Design: Take Only One Decision at a TimeAdi Bolboaca
 
Behind Agile Practices
Behind Agile PracticesBehind Agile Practices
Behind Agile PracticesAdi Bolboaca
 
Architecture for Disaster Resistant Systems @I TAKE Unconference 29 05 2015
Architecture for Disaster Resistant Systems @I TAKE Unconference 29 05 2015Architecture for Disaster Resistant Systems @I TAKE Unconference 29 05 2015
Architecture for Disaster Resistant Systems @I TAKE Unconference 29 05 2015Adi Bolboaca
 
Coderetreat @AgileFinland Turku 2014 11 15
 Coderetreat @AgileFinland Turku 2014 11 15 Coderetreat @AgileFinland Turku 2014 11 15
Coderetreat @AgileFinland Turku 2014 11 15Adi Bolboaca
 
Coderetreat @AgileFinland Helsinki 2014 11 13
Coderetreat @AgileFinland Helsinki 2014 11 13Coderetreat @AgileFinland Helsinki 2014 11 13
Coderetreat @AgileFinland Helsinki 2014 11 13Adi Bolboaca
 
Coderetreat @AgileFinland Tampere 2014 11 12
Coderetreat @AgileFinland Tampere 2014 11 12Coderetreat @AgileFinland Tampere 2014 11 12
Coderetreat @AgileFinland Tampere 2014 11 12Adi Bolboaca
 
Refactoring Dojo @AgileWorks Bucharest 21 May 2014
Refactoring Dojo @AgileWorks Bucharest 21 May 2014Refactoring Dojo @AgileWorks Bucharest 21 May 2014
Refactoring Dojo @AgileWorks Bucharest 21 May 2014Adi Bolboaca
 
Sherlock Holmes and Pairing @Romanian Testing Conference 2014 05 15
Sherlock Holmes and Pairing @Romanian Testing Conference 2014 05 15Sherlock Holmes and Pairing @Romanian Testing Conference 2014 05 15
Sherlock Holmes and Pairing @Romanian Testing Conference 2014 05 15Adi Bolboaca
 
TDD Mini Workshop @ Bucharest JUG 2014 04 24
TDD Mini Workshop @ Bucharest JUG 2014 04 24TDD Mini Workshop @ Bucharest JUG 2014 04 24
TDD Mini Workshop @ Bucharest JUG 2014 04 24Adi Bolboaca
 
Coderetreat Slides on the Global Day of Coderetreat, Bucharest, December 2013
Coderetreat Slides on the Global Day of Coderetreat, Bucharest, December 2013Coderetreat Slides on the Global Day of Coderetreat, Bucharest, December 2013
Coderetreat Slides on the Global Day of Coderetreat, Bucharest, December 2013Adi Bolboaca
 
Sherlock Holmes and Pairing @Bucharest JUG 2013 11 21
Sherlock Holmes and Pairing @Bucharest JUG 2013 11 21Sherlock Holmes and Pairing @Bucharest JUG 2013 11 21
Sherlock Holmes and Pairing @Bucharest JUG 2013 11 21Adi Bolboaca
 
Sherlock Holmes and Pairing @Wlidcard Conference 2013 09 13
Sherlock Holmes and Pairing @Wlidcard Conference 2013 09 13Sherlock Holmes and Pairing @Wlidcard Conference 2013 09 13
Sherlock Holmes and Pairing @Wlidcard Conference 2013 09 13Adi Bolboaca
 
Code retreat @AgileWorks Bucharest 7 September 2013
Code retreat @AgileWorks Bucharest 7 September 2013Code retreat @AgileWorks Bucharest 7 September 2013
Code retreat @AgileWorks Bucharest 7 September 2013Adi Bolboaca
 
Coderetreat @AgileWorks Bucharest 2012 07 06
Coderetreat @AgileWorks Bucharest 2012 07 06 Coderetreat @AgileWorks Bucharest 2012 07 06
Coderetreat @AgileWorks Bucharest 2012 07 06 Adi Bolboaca
 
Legacy Coderetreat @Budapest 2013 02 16
Legacy Coderetreat @Budapest 2013 02 16Legacy Coderetreat @Budapest 2013 02 16
Legacy Coderetreat @Budapest 2013 02 16Adi Bolboaca
 
Coderetreat @Sofia 2012 10 27
Coderetreat @Sofia 2012 10 27Coderetreat @Sofia 2012 10 27
Coderetreat @Sofia 2012 10 27Adi Bolboaca
 
Coderetreat @Turku 2012 10 20
Coderetreat @Turku 2012 10 20 Coderetreat @Turku 2012 10 20
Coderetreat @Turku 2012 10 20 Adi Bolboaca
 
Coderetreat @Sibiu 2012 08 18
Coderetreat @Sibiu 2012 08 18Coderetreat @Sibiu 2012 08 18
Coderetreat @Sibiu 2012 08 18Adi Bolboaca
 
Coderetreat @Vienna 2013 06 08
Coderetreat @Vienna 2013 06 08Coderetreat @Vienna 2013 06 08
Coderetreat @Vienna 2013 06 08Adi Bolboaca
 

More from Adi Bolboaca (20)

Stop Task Switching
Stop Task SwitchingStop Task Switching
Stop Task Switching
 
Evolutionary Design: Take Only One Decision at a Time
Evolutionary Design: Take Only One Decision at a TimeEvolutionary Design: Take Only One Decision at a Time
Evolutionary Design: Take Only One Decision at a Time
 
Behind Agile Practices
Behind Agile PracticesBehind Agile Practices
Behind Agile Practices
 
Architecture for Disaster Resistant Systems @I TAKE Unconference 29 05 2015
Architecture for Disaster Resistant Systems @I TAKE Unconference 29 05 2015Architecture for Disaster Resistant Systems @I TAKE Unconference 29 05 2015
Architecture for Disaster Resistant Systems @I TAKE Unconference 29 05 2015
 
Coderetreat @AgileFinland Turku 2014 11 15
 Coderetreat @AgileFinland Turku 2014 11 15 Coderetreat @AgileFinland Turku 2014 11 15
Coderetreat @AgileFinland Turku 2014 11 15
 
Coderetreat @AgileFinland Helsinki 2014 11 13
Coderetreat @AgileFinland Helsinki 2014 11 13Coderetreat @AgileFinland Helsinki 2014 11 13
Coderetreat @AgileFinland Helsinki 2014 11 13
 
Coderetreat @AgileFinland Tampere 2014 11 12
Coderetreat @AgileFinland Tampere 2014 11 12Coderetreat @AgileFinland Tampere 2014 11 12
Coderetreat @AgileFinland Tampere 2014 11 12
 
Refactoring Dojo @AgileWorks Bucharest 21 May 2014
Refactoring Dojo @AgileWorks Bucharest 21 May 2014Refactoring Dojo @AgileWorks Bucharest 21 May 2014
Refactoring Dojo @AgileWorks Bucharest 21 May 2014
 
Sherlock Holmes and Pairing @Romanian Testing Conference 2014 05 15
Sherlock Holmes and Pairing @Romanian Testing Conference 2014 05 15Sherlock Holmes and Pairing @Romanian Testing Conference 2014 05 15
Sherlock Holmes and Pairing @Romanian Testing Conference 2014 05 15
 
TDD Mini Workshop @ Bucharest JUG 2014 04 24
TDD Mini Workshop @ Bucharest JUG 2014 04 24TDD Mini Workshop @ Bucharest JUG 2014 04 24
TDD Mini Workshop @ Bucharest JUG 2014 04 24
 
Coderetreat Slides on the Global Day of Coderetreat, Bucharest, December 2013
Coderetreat Slides on the Global Day of Coderetreat, Bucharest, December 2013Coderetreat Slides on the Global Day of Coderetreat, Bucharest, December 2013
Coderetreat Slides on the Global Day of Coderetreat, Bucharest, December 2013
 
Sherlock Holmes and Pairing @Bucharest JUG 2013 11 21
Sherlock Holmes and Pairing @Bucharest JUG 2013 11 21Sherlock Holmes and Pairing @Bucharest JUG 2013 11 21
Sherlock Holmes and Pairing @Bucharest JUG 2013 11 21
 
Sherlock Holmes and Pairing @Wlidcard Conference 2013 09 13
Sherlock Holmes and Pairing @Wlidcard Conference 2013 09 13Sherlock Holmes and Pairing @Wlidcard Conference 2013 09 13
Sherlock Holmes and Pairing @Wlidcard Conference 2013 09 13
 
Code retreat @AgileWorks Bucharest 7 September 2013
Code retreat @AgileWorks Bucharest 7 September 2013Code retreat @AgileWorks Bucharest 7 September 2013
Code retreat @AgileWorks Bucharest 7 September 2013
 
Coderetreat @AgileWorks Bucharest 2012 07 06
Coderetreat @AgileWorks Bucharest 2012 07 06 Coderetreat @AgileWorks Bucharest 2012 07 06
Coderetreat @AgileWorks Bucharest 2012 07 06
 
Legacy Coderetreat @Budapest 2013 02 16
Legacy Coderetreat @Budapest 2013 02 16Legacy Coderetreat @Budapest 2013 02 16
Legacy Coderetreat @Budapest 2013 02 16
 
Coderetreat @Sofia 2012 10 27
Coderetreat @Sofia 2012 10 27Coderetreat @Sofia 2012 10 27
Coderetreat @Sofia 2012 10 27
 
Coderetreat @Turku 2012 10 20
Coderetreat @Turku 2012 10 20 Coderetreat @Turku 2012 10 20
Coderetreat @Turku 2012 10 20
 
Coderetreat @Sibiu 2012 08 18
Coderetreat @Sibiu 2012 08 18Coderetreat @Sibiu 2012 08 18
Coderetreat @Sibiu 2012 08 18
 
Coderetreat @Vienna 2013 06 08
Coderetreat @Vienna 2013 06 08Coderetreat @Vienna 2013 06 08
Coderetreat @Vienna 2013 06 08
 

Recently uploaded

Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 

Recently uploaded (20)

Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 

Evolutionary Design - NewCrafts Paris 18 May 2018

  • 1. Evolutionary Design Adrian Bolboacă Programmer, trainer, coach blog.adrianbolboaca.ro Aythor of the Coderetreat Book https://leanpub.com/coderetreat
  • 2. Why this talk? ● Continuously improve our understanding of the world ● Push the bar of software development ● Develop living systems, rather than rigid projects ● Evolve rather than change ● Research new ways of developing software
  • 3. Disclaimer ● All ideas presented are in evolution (or in progress) ● This is not a basic talk ● I love philosophy and abstract thinking ● Please ask questions whenever you like
  • 4. What I learned to get Evolutionary Design ● Unit Testing ● Design Patterns, and how to use them ● The Four Elements of Simple Design ● Pairing ● Team collaboration ● Test Driven Design (TDD) ● TDD Schools: Chicago, London, DDD, etc ● Behavior Driven Development ● Business Analysis ● Domain Driven Design ● Automated acceptance testing ● Exploratory Testing ● … and much more
  • 5. Contents 1) Evolutionary Design Defnition 2) Evolution 3) Simplicity 4) Focus on problem, not solution 5) Theory of Centers 6) Symmathesy 7) Solution Navigation 8) Transformations
  • 6. 1) Evolutionary Design Evolutionary = heritable characteristics over successive generations Design = building useful objects for specifc needs So: how to build objects that continuously change, but keep its existing functions intact
  • 7. 1) Evolutionary Design “The art of growing a system by observing its natural traits and then normalizing, optimizing and maximizing its growth” Adrian Bolboaca
  • 8. Why Evolutionary Design? ● Build systems that are resilient to change ● Adapt your pace to the business needs ● Manage growing complexity
  • 9. a. Normalizing Growth ● Observe irregular developments ● Refactor system’s growth to normalize it ● Balance system’s growth ● Setup practices and guidelines ● Create standards of growth
  • 10. b. Optimize Growth ● Choose a growth objective ● You cannot optimize for everything ● Compromise ● Focus on business needs ● Observe, pro-act, re-act
  • 11. c. Maximizing Growth ● Make the most out of each optimization ● Understand when it’s the “fertile” moment ● Observe patterns like Low Coupling, High Cohesion, Structural Duplication, etc ● Use coherent strategies
  • 12.
  • 13. 2) Evolution Behavior Slicing ● Identify your evolution focus ● Look at Outputs ● Find corresponding inputs ● Organize from simple to complex Many thanks to Alex Bolboaca
  • 14. 3) Simplicity The art of fnding the simplest options ● Evolve to the simplest solution you can ● Remove rather than add items to the system ● Use The 4 Elements of Simple Design ● Use Behavior Slicing ● The simplest solutions are natural ones
  • 15. 4) Focus on problem, not on solution Test After – solution focus Design Code Test→ → Test First Programming – solution focus Design Test Code→ → Test Driven Design – problem focus Test Code Design→ → → Solution evolves
  • 16. 5) Theory of Centers A bottom-up approach, which places users of buildings as builders of their environments through the process of co-creating a common ground with the collective consensus of a “shared pattern language”; to give users better control over the spaces they dwell in. from Christopher Alexander https://nourdiab.wordpress.com/2011/02/23/the-theories-of-christo pher-alexander
  • 17. 5) Theory of Centers ● Observe system’s behavior ● Find similarities and particularities in decentralized systems ● Identify hubs around which systems occur in living structures from Christopher Alexander Many thanks to Emmanuel Gaillot
  • 18. 6) Symmathesy Symmathesy = Mutual Learning in Living Systems A word in progress from Nora Bateson https://norabateson.wordpress.com/2015/11/03/symmathesy-a-word-in-progress Many thanks to Jessica Kerr
  • 19. 6) Symmathesy For Evolutionary Design ● Feedback is a learning mechanism ● The designer uses techniques to learn from the software system ● Identify patterns and heuristics (similarities, duplication, coherence, etc) ● Maybe in the future the system might be able to learn from the designer
  • 20. 7) Solution Navigation Navigation-related structural change in the hippocampi of taxi drivers. “The role of the hippocampus is to facilitate spatial memory, in the form of navigation” https://www.tutor2u.net/psychology/reference/maguire-2000 Many thanks to https://twitter.com/sleepyfox
  • 21. 7) Solution Navigation ● Practice to identify possible solutions (Solution Seeker http://blog.adrianbolboaca.ro/2014/02/pair-programming-game-solution-seeker ) ● Pair with experienced navigators ● Extend your comfort zone for heuristics ● Work on design studies ● Read a lot of code ● Choose possible solutions based on objective factors ● Feed your brain with practice
  • 22. 8) Transformations During an evolution, transformations are the essence: ● Transformation Priority Premise ● Levels of Abstraction ● Levels of Coupling ● Inductive vs Deductive ● ...
  • 23. 8) Transformations But how do we have transformations? We put pressure on existing design Tests are pressure on existing design. We need to look at the patterns and evolve the system organically Tests are not the only type of pressure
  • 24. 8) Transformations Transformation Priority Premise “As the tests get more specifc, the code gets more generic.” from Robert C Martin https://8thlight.com/blog/uncle-bob/2013/05/27/TheTransformationPriorityPremise.html
  • 25. 8) Transformations Transformation Priority Premise ● ({}–>nil) no code at all->code that employs nil ● (nil->constant) ● (constant->constant+) a simple constant to a more complex constant ● (constant->scalar) replacing a constant with a variable or an argument ● (statement->statements) adding more unconditional statements. ● (unconditional->if) splitting the execution path ● (scalar->array) ● (array->container) ● (statement->recursion) ● (if->while) ● (expression->function) replacing an expression with a function or algorithm ● (variable->assignment) replacing the value of a variable.
  • 26. 8) Transformations Levels of abstraction Depending on which abstraction level you want to evolve the system, you might use diferent heuristics Use encapsulation to abstract communication between levels ● complex systems ● system ● subsystem ● module ● (optional) namespace / package ● interface / superclass ● class / enum / struct ● feld / constant ● variable ● value
  • 27. 8) Transformations Levels of Coupling Depending on the coupling your system can evolve naturally more or less ● Conventions ● Transient ● Events ● Composition ● Inheritance ● Class scope ● Function scope
  • 28. Inductive vs Deductive Inductive ● Start from the atomic part and refactor++. ● Use refactoring heuristics to normalize growth ● No design up-front Deductive ● Start from scafolding ● Use heuristics to optimize growth ● More design up-front
  • 29. Inductive vs Deductive Inductive (usually) ● TDD as if you Meant It ● Bottom-up ● Take few decisions at a time ● Middle-top (DDD) Deductive (usually) ● Walking Skeleton ● Outside-in ● Take structural decisions ● Middle-bottom (DDD)
  • 30. Inductive vs Deductive I had a very long talk in Paris Oct 2017 about Inductive vs Deductive Evolutionary Design Read at https://medium.com/@cyrillemartraire/adrian-bolboaca-on-evoluti onary-design-inductive-vs-deductive-approaches-a7cead4bdd20 Thanks to Cyrille Martraire for the write-up
  • 31. Selection Pressure ● Pressure = business metrics ● Use business tests to grow your system ● Similar with TDD as if you Meant It, but with business focus Many thanks to Julian Ghionoiu Code cast http://blog.adrianbolboaca.ro/2018/01/remotepairprogramming-ep-005 -evolutionary-design-selection-pressure
  • 32. Recap 1) Evolutionary Design Defnition 2) Evolution 3) Simplicity 4) Focus on problem, not solution 5) Theory of Centers 6) Symmathesy 7) Solution Navigation 8) Transformations
  • 33. What’s Next for me? Evolve the topic Write more articles Publish more code casts Write a book on Evolutionary Design
  • 34. What’s Next for you? Let’s talk about this topic (Continuously Evolving) series of articles and code casts http://blog.adrianbolboaca.ro/evolutionary-design Remote Pair with me http://blog.adrianbolboaca.ro Share your experiences https://twitter.com/adibolb
  • 35. About me When not thinking about philosophical topics I still: Write software Help companies and teams Mentor, train and coach
  • 36. Workshop Join Evolutionary Design Workshop 25-26 June in Paris https://mozaicworks.com/public-trainings-and-workshops/evolutionary-de sign-workshop
  • 37. Mozaic Works Design School Join the Mozaic Works Design School How? Contact me!
  • 38. Contact me Adrian Bolboacă Programmer, trainer, coach adrian.bolboaca@mozaicworks.com @adibolb