De um modo geral, para projetos de longo prazo que podem ter várias liberações durante o ciclo de vida dos produtos e requerem suporte de produtos anteriores, qual é a melhor maneira de lidar com versões de produtos e ramificações da base de código?
Em um sentido mais específico, suponha que o controle de versão distribuído adequado esteja em vigor (ou seja, git) e que as equipes sejam de tamanho pequeno a grande e que o desenvolvedor possa estar trabalhando em vários projetos ao mesmo tempo. O principal problema que está sendo enfrentado é que existe uma obrigação contratual de oferecer suporte a versões antigas, uma vez que existiam na época, o que significa que o novo desenvolvimento não pode corrigir o código antigo (os produtos do Microsoft Office podem ser um exemplo disso, você só obtém patches para o ano que você possui).
Como resultado, a versão atual do produto é um pouco complicada, pois cada produto principal possui várias dependências, cada uma com suas próprias versões, que podem ser alteradas entre as liberações anuais. Da mesma forma, embora cada produto tenha seu próprio repositório, a maior parte do trabalho não é realizada no tronco de origem principal, mas em uma ramificação para o ano em que o lançamento do produto é feito com uma nova ramificação quando o produto é liberado para que possa ser suportado. Isso, por sua vez, significa que obter a base de código de um produto não é uma questão simples, como se pode pensar ao usar o controle de versão.