I'm finally getting up to date with a non-trivial backlog of pending talks to watch, and today I watched one that resonated so much with me that I wanted to a) express how interesting it is and b) keep some notes about it in the blog, because it is so nicely explained.
If you like concepts like Test-Driven Development, the old Extreme Programming, or simply like to do true lean development and real iterative software building, I'm confident you will enjoy it. But I encourage everybody to watch it, even if you don't fully share the principles 1.
The talk is Evolutionary Design Animated, by James Shore, presented at YOW! 2019. Consists of two parts, each around 25 minutes: Part I, Part II
Notes:
Evolutionary design:
- Simple Design
- Continuous Design
- Reflective Design
All of them enabled by fast & reliable automated tests
Simple Design
- Start with a walking skeleton
- Do the simplest thing that could possibly work
- You Aren't Gonna Need It
- Simple, not sloppy
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
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
Reflective Design
- Review the code you're about to work on
- Identify flaws ("code smells", difficulty understanding)
- Reverse engineer design of code, if necessary
- Imagine how to improve the design of the code
- Incrementally refactor the code to reach desired design
-
I disagree with the speaker's point of view regarding using existing open-source solutions vs building your own, as a DIY approach also can carry heavy maintenance burdens, and not all open-source software has high maintenance costs. ↩
Tags: Architecture Development Patterns & Practices Resources Testing