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
Max Value jamesshore.com
Traditional so fu ware development Cost of each change → “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. XP’s assumption # of changes → 0 jamesshore.com
jamesshore.com
jamesshore.com
Pointer (12 hrs) Cost of each change (hrs) → Lines (6.5 hrs) Touch Clear button (2.75 hrs) pointer (0.5 hr) Disappearing pointer (0.75 hr) 0 # of changes → jamesshore.com
Evolutionary Design How to achieve the enabling technical premise of modern development. jamesshore.com
Evolutionary Design How to achieve the enabling technical premise of modern development. } 1. Simple Design all enabled by 2. Continuous Design fast & reliable automated tests 3. Reflective Design jamesshore.com
When Not to Use Evolutionary Design Avoid when refactoring is di ffj cult 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,” di ffj culty 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 How to achieve the enabling technical premise of modern development. } 1. Simple Design all enabled by 2. Continuous Design fast & reliable automated tests 3. Reflective Design 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,” di ffj culty 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
Pointer (12 hrs) Cost of each change (hrs) → Lines (6.5 hrs) Touch Clear button (2.75 hrs) pointer (0.5 hr) Disappearing pointer (0.75 hr) 0 # of changes → jamesshore.com
jamesshore.com
Evolutionary Design Animated James Shore “Flight of the Bumblebee” by Nikolai Rimsky-Korsakov Royalty-free recording courtesy of videvo.net TWITTER: @jamesshore jshore@jamesshore.com YOW! Conferences EMAIL: jamesshore.com December 2019 WEB: github.com/jamesshore Sydney/Brisbane/Melbourne, Australia GITHUB:
Recommend
More recommend