The source system is built as a series of branches off of a trunk, and there are two sets of operations that occur, when a change is made to the trunk, the changes are “forward integrated” to the branches. New feature development goes on in the branches, and when the feature is ready for “prime time”, the work is “reverse integrated” back into the trunk, and those changes are subsequently forward integrated into the various other branches.The primary reason for this structure is to ensure that the trunk always has a high level of quality, the branches may be of varying quality levels and are regarded as unstable, but the trunk always remains defect free.
When a feature is “Reverse Integrated” into the trunk, code has to go through a series of what are called “Quality Gates”. The quality gates are in place to ensure a consistent level of engineering quality across the product, among other things, it ensures that the feature has an up to date test for development specifications, accurate and complete threat model, that the tests for the feature have a certain level of code coverage. There are a bunch of other gates beyond these, but they’re related to internal processes that aren’t relevant.
The quality gates may seem like a huge amount of bureaucracy to go through, and they can be difficult, but their purpose is really worthwhile – the quality gates ensures that no code is checked into the trunk that doesn’t meet the quality bar for being a part of a release.
Daily builds are generated at 5pm from the trunk and each build increments the build number by 1, branches never increment the build number and a branch build number is equal that of the trunk when a “Forward Integration” process from the trunk takes place. Builds only take place on working weekday’s, no builds take place on weekends or public holidays.
When a product is regarded as “Ready for Release”, (e.g. beta, release candidate, RTM), the source code is branched from the trunk, these branches are not “reverse-integrated” back into the trunk. Hotfixes are also special branches that are branches off of the trunk. Different from special release branches, hotfixes are “reverse-integrated” back into the trunk, and these changes are “Forward integrated” into all other branches’ including the special release branches.
“Release to Web or Manufacture” products normally have their build numbers bumped to a value that can be dividable by both 100 and 16. For more information please read a related article written after this post about version numbers here.