As I promised myself in my Reading journal: Refactoring, by Martin Fowler I shall find out more about this concept, because:
- I am having confusion on how much (if any) I should leave spaces for future changes in my programme, or should I just focus on what is currently needed.
- I want to know if this concept will offer me more insights in understanding requirements and creating/understanding user stories.
What is Evolutionary Design
Evolutionary Design is:
- one of these techniques that helps us grow a system well by understanding its current characteristics.
- an approach to incrementally grow a system, while
- observing growth patterns
- normalising and optimising the growth
To practice evolutionary design we:
- add the minimum amount of code to satisfy the business needs in an iterative and incremental approach.
- Continuously evolve the code structure to optimize for change, thus allowing a constant speed of development for longer periods of time.
Evolutionary Design Cycle
Red -> Green -> Refactor.
Pass the test, then refactor the code to optimise.
Refactoring means changing the existing structure of the code without changing its behavior. Unit Testing is our safety net when refactoring the code with TDD.
Patterns of growth
The three steps of growth patterns, discussed by Adi Bolboaca:
Normalizing growth
Normalizing Growth is the process of observing irregular developments in a system, and refactoring it so it grows nice and balanced.
Optimizing growth
Optimizing Growth means we choose a growth outcome.
Optimization means compromising, choosing your way.
Software system cannot be very easy to change and with great performance. Often you need a balance between the two.
Maximizing growth
We want to make the most out of each optimization.
Often the blooming period is critical. With our software system we need to understand when that moment arises.
We can observe patterns of evolution like Low Coupling, High Cohesion(凝聚), Testing Strategy, and many others.
Adi recommends Transformation Priority Premise by Robert Martin as an example for identifying such a pattern. – Will do.