What are the moves you make when improving the design of software?
Over the past 4-5 years, I’ve been observing, naming and using a set of design transformation strategies that have provided guidance and a handy vocabulary for making and talking about software changes.
Like the 7 Samurai, or Snow White’s 7 Dwarfs, I currently have 7 Strategies that I’ll briefly describe below.
Split
Split bigger items into smaller items before making design improvements.
Cutover
Cutover from an old way to a new way gradually and gracefully.
Retreat
Recognize when you are fighting a losing battle and safely retreat to safer ground.
Narrow
Narrow the number of places needed to make a design change before making the change to pave the way for an easier/safer design change.
Parallel
Parallel an old way of doing something with a new way, then safely cutover from the old way to the new way, then remove the old way.
Resequence
Resequence the steps in a design when doing so will simplify the design.
Duplicate
Duplicate anything that is only partially different to enable removing larger quantities of duplication.
The above seven strategies have proven to be quite useful in transforming the design of real systems.
I’ve explained these strategies in text and video in our Refactoring album.
My colleagues and I have found that these same strategies are helping us navigate the design waters we now occupy as a result of implementing Continuous Delivery (CD).
I hope to document how these strategies relate to CD in a forthcoming album about CD.