In senso generale, per i progetti a lungo termine che possono avere più versioni durante il ciclo di vita dei prodotti e che richiedono il supporto di prodotti precedenti, qual è il modo migliore per gestire le versioni dei prodotti e la ramificazione della base di codice?
In un senso più specifico, supponiamo che sia in atto un adeguato controllo della versione distribuita (ovvero git) e che i team siano di dimensioni da piccole a grandi e che lo sviluppatore possa lavorare su più progetti contemporaneamente. Il problema principale che si sta affrontando è che esiste un obbligo contrattuale a supportare le vecchie versioni esistenti al momento, il che significa che il nuovo sviluppo non può patchare il vecchio codice (i prodotti Microsoft Office potrebbero essere un esempio di questo, si ottengono solo patch per l'anno che possiedi).
Di conseguenza l'attuale versione del prodotto è un tocco contorto in quanto ogni prodotto principale ha dipendenze multiple, ognuna con le proprie versioni che possono cambiare tra le versioni annuali. Allo stesso modo, mentre ogni prodotto ha il proprio repository, la maggior parte del lavoro non viene eseguita sul trunk di origine principale, ma piuttosto su un ramo per quegli anni rilascio del prodotto con un nuovo ramo fatto quando il prodotto viene rilasciato in modo che possa essere supportato. Questo a sua volta significa che ottenere la base di codice di un prodotto non è una cosa semplice come si potrebbe pensare quando si utilizza il controllo versione.