The following situation:
- a product which consists of multiple components, each component
versioned individually (all artefacts of the same component having the same version) - POs are talking of product version X and plan releases X.a, X.b containing specific functionality
- each sprint a new release is made (that potentially is installed on a demo environment)
- sprint releases increase the patch version e.g. 1.0.0, 1.0.1
- the minor version would be increased once we start development on next release planned by POs e.g. X.a = 1.0 and X.b = 1.1
We started the discussion about introducing semantic versioning (http://semver.org/) for the components but there are some doubts.
- Some find it makes it more complicated if the dev has to decide if the minor or patch version must be increased and raised the point that some bug fixes are introducing new functionality (don't ask)
- Some are rejecting the idea of increasing the minor version as the release planned by POs may not be achieved yet i.e. it's not yet feature complete
- With current versioning engineering can easily see which environment potentially needs to be updated depending on whether the version is 1.0.x or 1.1.x
- Releasing according to semantic versioning after each sprint we would reach high major and minor versions which some dislike also because some curious customers check the versions
What practices do other companies apply when it comes to versioning in a scrum environment? Do you release a version after each sprint? Where do you see the advantages of the approach you chose?
EDIT: Maybe it was not clear from my description but the component versions do not exactly align with the product versions, the only correlation between the two is the timing when major/minor will be increased e.g.:
- product 1.0
- component A 3.2
- component B 4.5
- product 1.1
- component A 3.3
- component B 4.6
- product 2.0
- component A 4.x
- component B 5.x
I agree that the product version should have nothing to do with the technical version – it's a label. That's why I am trying to find out how others solved this and what the arguments were. 😉
Best Answer
A simple solution, not just for agile teams, is to separate the engineering version from the marketing version. One well-known instance of this is Microsoft's versioning for Windows NT:
major == 6
to figure out whether to enable post-XP features, and rather than breaking all those apps, Microsoft decided to revert the major version to 6. During the keynote, they joked that Windows 8 would have version 6.1.1, and so on, for the same reason.)[Note that Microsoft also has release numbers as well as monotonically increasing build numbers, none of which show up in the marketing versions.]
So, you follow SemVer for your engineering versions (which, in an agile project will likely lead to high version numbers), and the marketing department is free to chose their versioning scheme however they want. You can think of a marketing version as a human-readable short label for a set of features that just so happens to be formatted like a version number.