A colleague asked me a couple of days ago: “So we roll version numbers forward only with breaking changes, right?”
Well, the best approch for any sane project in 2017 is to follow Semantic Versioning. That is not a long document to read, but here is a summary. In a nutshell, version numbers have three facets, major.minor.patch.
- If your new release breaks something that used to work, increment major.
- If your release adds new functionality that clients might want to rely on, increment minor.
- If your release only fixes a bug, increment patch.
This is an excellent, simple and battle-proven system.
It’s not used as universally as it should be, due to of widespread confusion between software version numbers (which are part of a project’s engineering) and marketing version numbers — where going to version 1.0 is a Whole Big Deal. As a result, some engineers are scared of moving their packages to a non-zero major number. And as a result of that, you sometimes see projects releasing both breaking and non-breaking changes within the 0.x series.
Folks: don’t do that. Use semantic versioning. No ifs, no buts. Let the marketing people bundle the whole thing up periodically and call it “Release 3, ‘Kaylee'” if they want to. Doesn’t matter to us.