This is a uber-geeky. You are warned.
Version numbers consist of four numbers at their most complex: Major.Minor.Revision.Build. They’re very important, especially when you have multiple releases in the wild. They let you track what code is running on the users machine, so if they have a version that contains a bug, you can tell if it’s a new bug, or if it has been fixed in a later release.
Suppose you were part of a software team that writes components which other teams in the company use to create products. Suppose you release fairly often and the possibility that you may have to support multiple versions of the same library, and may even continue releasing multiple versions.
Let’s say you have ComponentX.dll whose latest version is 1.6.7.0. The next release is a bug fix release with no added functionality, so the next version released is 1.6.8.0. Once version 1.6.8.0 is released, there will be a branch release, 1.6.8.1, and the next bug fix release, 1.6.9.0. A further release on the 1.6.8.1 branch is required; it will be 1.6.8.2.
Starting to see the pattern?
OK, now what if your team were to impose a daily build with this versioning scheme?
One of you wants to increment the build number on every build; this creates havoc for the system above, so you must come up with an intricate set of rules to govern version numbers that requires lots of lost time to explain the whole system. Another thinks the daily builds shouldn’t be versioned at all, because once the daily build is institute, he’s going to bring continuous integration into the mix. This would potentially mean several builds a day, that really only reflect the health of the code in the repository; they’re throwaway builds that will never be released.
What do you do for your builds at your shop? Whose side would you be on?
Now playing: The Philosopher Kings – Last Stand