Currently the semantics 😎 we use are:
major: new functionality, bumped typically once per year, currently synchronized with the age of #OpenStreetMap , saved state changes only happen for major releases.
minor: new functionality, typically 3-4 times a year, at least once prior to August for the mandatory update of the Android version we compile against, which can be anything from weeks of work to harmless.
patch: configuration updates and bug fixes.
This works out to 12+ releases annually, not counting beta and test releases (more on those later).
Android apps need to be able to save their state and restart where they left off at any time.
For an #OpenStreetMap editor this is rather painful as there is a lot of state and some functionality changes require adding or changing what we save. While it would be nice to be to migrate seamlessly between versions, it is currently not feasible. That's why we only change this for major versions.