Why is using build number instead of x.x.x versioning in a web app a bad idea

versioning

I have to start using versioning for my project which is a web app so compatibility isn't really a problem. I think using a

Major.minor.revision.build

is too cumbersome. I am almost convinced to do it with just the build number.

I don't care for hotfixes, feature releases, etc. This is a web app. I will never have one big update, it will always be a set of incremental updates. All my "clients" will always use one and only one version of my app which will be under my control on my server. So using that Major.minor.revision.build doesn't make much sense to me.

Is there anything I am missing here?

Best Answer

Is there anything I am missing here?

Yes. You are missing the fact that you are human and lack perfect foresight. One day you will find that you did many things that were just plain wrong or that prevent you from making forward progress.

When that happens (and it does happen to almost every software project of sufficient complexity), you will have to break backwards compatibility. You need some mechanism to tell your users that (for example) release #13 provides a number of new features, fixes a huge number of formerly unfixable bugs, but does so at the cost of requiring your users to rewrite some of the software that uses your package.

The build number, which monotonically counts from one (or zero) hand pwards doesn't communicate much. You need something that tells the users of your package how much work they need to do to take advantage of your latest release. At a minimum, I'd recommend you use a major.minor numbering scheme. This may suffice if the project remains small. Note that the build number is absent from this scheme.

If your project has the chance of growing beyond a one person project, you might want to advance to a major.minor.patch numbering scheme. This is the approach taken in semantic versioning. Once again, the build number is absent from this scheme.

Telling your users that they may have to rewrite significant chunks of their software that uses your package (a bump in the major release number) conveys a lot of information. Telling your users that they need to watch for behavior they relied on that was in fact a bug (a bump in the minor release number) also conveys a lot of information. Telling your users that behavior that everyone has avoided up until now because everyone knew that your software used to choked (a bump in the patch number) also conveys a lot of information.

The build number, on the other hand, doesn't convey much information at all.

Related Topic