The development of software products are often managed through the use of Version Control Systems (VCS). VSCs allow for versioning of source code and manage the process of merging newly developed code into the product primarily through the use of branches. The branching architecture and the development processes used by the product groups are inter-related and have often evolved over many releases to reflect unique aspects of the product, the development preferences of the team, and the structure of the development organization. Within Microsoft, there is a lot of commonality in the development tools used by the product teams, but there is great diversity in the development processes, and the structure and use of branching. This diversity in the development processes across Microsoft provides a unique learning platform to characterize the effectiveness of specific practices when applied to specific product developments.
Understanding the characteristics of different software development processes is becoming increasingly important as a number of product groups are migrating from developing a box set product to simultaneously developing a product deployed as a service, released as a stand-alone product, and shared as a component with other product groups within Microsoft. To assist the product group in making their decisions regarding the most appropriate branching architecture for their product, this document examines the benefits and drawbacks for different branching architectures. It also delineates the issues product groups often have in managing the simultaneous development and release of multiple products that share the same code base. The document should aid engineering teams in choosing the best branch structure for the software product they are developing and in understanding the requirements for sharing code between products.