S’il est une chose que j’apprécie beaucoup c’est bien cela.
Récemment j’ai eu à faire des refactoring conséquents (et critique, genre système de sécurité de vol) dans une application. Plutôt que de faire une nouvelle branche qui aurait duré plusieurs semaines (avec tout ce que ça comporte comme problème de rebase, synchro, etc) on l’a développé directement dans la branche principale. La nouvelle architecture a été introduite en complément de l’ancienne. Au début non active.
Petit à petit les sous-systèmes ont migré, un à un, de l’ancienne architecture vers la nouvelle, tout en douceur.
Une fois tout migré, l’ancienne architecture a été supprimée.
C’est un confort très appréciable, et cela supprime d’office toute crainte au moment où on ferait une bascule d’un système vers l’autre puisque tout est compilé/testé en même temps depuis le début et que le passage de l’un à l’autre est très progressif.

Sur le sujet il y a aussi les (nombreux) écrits de Paul Hammant, particulièrement :
– Branch by Abstraction : http://paulhammant.com/categories.html#branch_by_abstraction,_etc
– Trunk Based Development : http://paulhammant.com/categories.html#trunk_based_development