Nói chung, đối với các dự án dài hạn có thể có nhiều bản phát hành trong vòng đời sản phẩm và cần hỗ trợ của các sản phẩm trước đó, cách tốt nhất để xử lý các phiên bản sản phẩm và phân nhánh của cơ sở mã là gì?
Theo một nghĩa cụ thể hơn, giả sử rằng đã có kiểm soát phiên bản phân tán phù hợp (ví dụ như git) và các nhóm có kích thước từ nhỏ đến lớn và nhà phát triển có thể đang làm việc trên nhiều dự án cùng một lúc. Vấn đề chính đang phải đối mặt là có nghĩa vụ hợp đồng hỗ trợ các phiên bản cũ khi chúng tồn tại vào thời điểm đó có nghĩa là sự phát triển mới không thể vá mã cũ (các sản phẩm của Microsoft Office có thể là một ví dụ về điều này, bạn chỉ nhận được các bản vá cho năm tính năng bạn sở hữu).
Do đó, phiên bản sản phẩm hiện tại là một liên lạc phức tạp vì mỗi sản phẩm chính có nhiều phụ thuộc, mỗi phiên bản có thể thay đổi giữa các phiên bản hàng năm. Tương tự, trong khi mỗi sản phẩm có kho lưu trữ riêng, hầu hết các công việc không được thực hiện trên thân nguồn chính mà là trên một nhánh cho việc phát hành sản phẩm năm đó với một nhánh mới được tạo ra khi sản phẩm được phát hành để có thể hỗ trợ. Đến lượt điều này có nghĩa là việc có được cơ sở mã của sản phẩm không phải là vấn đề đơn giản như người ta có thể nghĩ khi sử dụng kiểm soát phiên bản.