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

Split bigger items into smaller items before making design improvements.


Cutover

Cutover

Cutover from an old way to a new way gradually and gracefully.


Retreat

Retreat

Recognize when you are fighting a losing battle and safely retreat to safer ground.


Narrow

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

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

Resequence the steps in a design when doing so will simplify the design.


Duplicate

Duplicate

Duplicate anything that is only partially different to enable removing larger quantities of duplication.


Refactoring album

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.