How to choose a versioning scheme for your software

As a developer, there comes the time were you think about how to version your software. One approach is “Semantic Versioning” which leverages the level of change on your public API. Depending on what you changed in your code, Semantic Versioning proposes different version numbers:

Given a version number MAJOR.MINOR.PATCH, increment the:

  1. MAJOR version when you make incompatible API changes,
  2. MINOR version when you add functionality in a backwards-compatible manner, and
  3. PATCH version when you make backwards-compatible bug fixes.

Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

Seems to be an appropriate scheme on versioning software. Which other schemes do you think about? Leave me a comment then I’m going to update this post accordingly.