My Digital Garden


Branch by Abstraction

An approach to large-scale change in a codebase that allows ongoing releases whilst the change is in progress.

  • assume we have client code (dependent) and supplier code (dependency)
  • introduce abstraction layer between client and supplier by modifying both
  • develop new supplier code
  • migrate client code to use the new supplier code via the abstraction layer
  • remove old supplier code
  • (optional) remove abstraction layer


paul-hammant wrote about "Introducing Branch By Abstraction", 2007 blog but credits stacey-curl with coining the phrase

martin-fowler simplified and promoted the phrase in ~2014 page