Branch By Abstraction is a development technique whereby an introduction of a destructive change is preceded by an abstraction phase. This abstraction phase involves abstracting the affected code, updating its dependent code to use the abstraction, introducing a second unit-tested implementation, updating the code again and, lastly, deprecating and destroying the old implementation. I did something like this back in my Java days in code which was crippled by Java’s static typing. I haven’t required this technique in years. My code is usually loosely-coupled, uses an agnostic naming convention, and leverages libraries which, in turn, abstract further functionality. I don’t code so much anymore; I just put the right pieces together in a pleasing fashion. It’s like playing blocks. Don’t tell my employer.