TWITTER: @jamesshore EMAIL: jshore@jamesshore.com WEB: jamesshore.com GITHUB: github.com/jamesshore YOW! Conferences December 2019 Sydney/Brisbane/Melbourne, Australia
Evolutionary Design Animated James Shore TWITTER: @jamesshore - - PowerPoint PPT Presentation
Evolutionary Design Animated James Shore TWITTER: @jamesshore - - PowerPoint PPT Presentation
Evolutionary Design Animated James Shore TWITTER: @jamesshore jshore@jamesshore.com YOW! Conferences EMAIL: jamesshore.com December 2019 WEB: github.com/jamesshore Sydney/Brisbane/Melbourne, Australia GITHUB: jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
Max Value
jamesshore.com
Cost of each change → # of changes →
Traditional sofuware development XP’s assumption
“This is one of the premises of XP. It is the technical premise of XP… If a flattened change cost curve makes XP possible, a steep change cost curve makes XP impossible.”
—Kent Beck Extreme Programming Explained, 1st ed.
jamesshore.com
jamesshore.com
jamesshore.com
Cost of each change (hrs) → # of changes →
Pointer (12 hrs) Lines (6.5 hrs) Clear button (2.75 hrs) Touch pointer (0.5 hr) Disappearing pointer (0.75 hr)
jamesshore.com
Evolutionary Design
How to achieve the enabling technical premise of modern development.
jamesshore.com
Evolutionary Design
- 1. Simple Design
- 2. Continuous Design
- 3. Reflective Design
all enabled by fast & reliable automated tests
}
How to achieve the enabling technical premise of modern development.
jamesshore.com
When Not to Use Evolutionary Design
Avoid when refactoring is diffjcult or expensive
- Not for interfaces exposed to other teams
- unless you can directly change their code
- implementation can use evolutionary design
- For use within teams, not across teams
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
Simple Design
Design for exactly the features you have now
- Start with a walking skeleton
- Do The Simplest Thing That Could Possibly Work
- You Aren't Gonna Need It
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
Think Red Green Refactor
jamesshore.com
jamesshore.com
Continuous Design
Constantly review and improve the design
- Merciless Refactoring
- Collective Ownership
- Pairing and/or Mobbing
- Continuous Integration
jamesshore.com Adapted from Domain-Driven Design by Eric Evans
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
Simple Design
Design for exactly the features you have now
- Start with a walking skeleton
- Do The Simplest Thing That Could Possibly Work
- You Aren't Gonna Need It
- Simple, not sloppy
jamesshore.com
Rules for Simple Design
“When, not if, I need to change this decision in the future, how hard will it be?”
- Every concept Once.
- …And Only Once (Don’t Repeat Yourself)
- Design intent clear and obvious
- Concrete, not speculative
- Cohesive: code that changes together, stays together
- Decoupled: if it’s out of sight, it’s safely out of mind
- Isolated: if it’s widely used, it’s abstracted by an interface
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
Reflective Design
Focus your refactoring where it will do the most good.
jamesshore.com
Traditional Design
- 1. Imagine the features that the application will support.
- 2. Imagine a design that can be cleanly extended to
support all possible features.
- 3. Implement the design incrementally, leaving design
“hooks” for features you haven’t added.
jamesshore.com
Reflective Design
Focus your refactoring where it will do the most good.
- 1. Review the code you're about to work on.
- 2. Identify flaws (“code smells,” diffjculty understanding).
- 3. Reverse engineer design of code, if necessary.
- 4. Imagine how to improve the design of the code.
- 5. Incrementally refactor the code to reach desired design.
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
jamesshore.com
Continuous Design
Constantly review and improve the design
- Merciless Refactoring
- Collective Ownership
- Pairing and/or Mobbing
- Continuous Integration
- Camp Site Rule: Don’t make it perfect; just make it
better.
jamesshore.com
Continuous Design
Constantly review and improve the design
- Merciless Refactoring
- Collective Ownership
- Pairing and/or Mobbing
- Continuous Integration
- Camp Site Rule: Don’t make it perfect; just make it
better.
- Be prepared to be surprised!
jamesshore.com
jamesshore.com
jamesshore.com
Evolutionary Design
- 1. Simple Design
- 2. Continuous Design
- 3. Reflective Design
all enabled by fast & reliable automated tests
}
How to achieve the enabling technical premise of modern development.
jamesshore.com
Simple Design
Design for exactly the features you have now
- Start with a walking skeleton
- Do The Simplest Thing That Could Possibly Work
- You Aren't Gonna Need It
- Simple, not sloppy
jamesshore.com
Continuous Design
Constantly review and improve the design
- Merciless Refactoring
- Collective Ownership
- Pairing and/or Mobbing
- Continuous Integration
- Camp Site Rule: Don’t make it perfect; just make it
better.
- Be prepared to be surprised!
jamesshore.com
Reflective Design
Focus your refactoring where it will do the most good.
- 1. Review the code you're about to work on.
- 2. Identify flaws (“code smells,” diffjculty understanding).
- 3. Reverse engineer design of code, if necessary.
- 4. Imagine how to improve the design of the code.
- 5. Incrementally refactor the code to reach desired design.
jamesshore.com
Cost of each change (hrs) → # of changes →
Pointer (12 hrs) Lines (6.5 hrs) Clear button (2.75 hrs) Touch pointer (0.5 hr) Disappearing pointer (0.75 hr)
jamesshore.com
TWITTER: @jamesshore EMAIL: jshore@jamesshore.com WEB: jamesshore.com GITHUB: github.com/jamesshore YOW! Conferences December 2019 Sydney/Brisbane/Melbourne, Australia
Evolutionary Design Animated
James Shore
“Flight of the Bumblebee” by Nikolai Rimsky-Korsakov
Royalty-free recording courtesy of videvo.net