Benefits of Versioning your Software

Benefits of Versioning your Software

I think versioning your software product releases is always a good idea. With all software products, whether we’re talking about websites, API’s, multi-platform mobile apps, software programming to embed into a specialized hardware device, or whatever, versioning your releases of each product can provide some benefits to you, your team, and sometimes the product’s users too.

One Suggested Approach

Why Bother with Versioning?

What benefits can be realized using software release version numbers and the suggested approach?

· A preview of contents of an upcoming release according to current plans — this is especially beneficial for testers to prepare test cases but could also be useful for any desired preparations in other roles, even potentially expanding into customer service and marketing.

· You have a narrowed scope of code commits to search through when developers look for possible causes for an issue reported as found in a specific version.

· Clear and easy visibility into each environment’s active version, displayed in the product, and (via the release documentation) what features should exist in that environment.

· An always accessible label for the exact codebase to deploy (or redeploy so you have something to fall back to) for a release, assuming you use Git and you tag the commit representing the release with the version number; doing that makes it much easier to set up automation for some types of products for lower environment deployments that are triggered by the creation of such a tag.

· Insight into project progress via a list of releases (for project managers or other product stakeholders), starting at a high-level view of releases, with the ability to drill down into details in each release.

· Quick diagnosing in any specific environment of what should be expected or not regarding recent feature additions, including which environments have which product version — one just needs to match the displayed version in any environment to the corresponding release documentation; this also allows one to verify the success of a deployment.

· For developers of software products that utilize yours who need to manually upgrade their version usage, those developers will be able to know, at a glance, which version upgrades will need special attention for breaking changes: only the major version increases (after 1.0); additionally, they’ll be able to tell by the numbering and available versions how many versions they are behind the current one.

· Due to the always increasing version numbers, it is perfectly clear which version represents the latest, both overall and under a particular major release number (2.1.0 is a more up-to-date version than 1.18.0 or 1.4.3 or 0.26.1 or any of the versions between those).

Quite often, programmers are developing features in one branch of the source code simultaneously to testers validating expected functionality in one or more deployed environments, so without documentation, it’s more difficult for testers and/or users to know what features they should expect to be available in their current version and what features should not be available. The combination of applying software versioning in code (Git tags and in project code) and in task tracking, and associating features/tasks to the version number they get completed in (inaccessible documentation that could be mostly generated by your task tracking system) and making the version number visible within the software product, solves this problem, and others too. With this setup, after a deployment is made and a tester is made aware (could be notified by an automated trigger on a release or a status change on tasks or a simple message to a group like “Product ABC version 1.4.0 is deployed to the Test environment” or even just “Deployed” could be sufficient in the right context), a tester could see the version number on the product, see and refer to the release documentation listing the newly completed features and fixes associated with the version number, and test with confidence, assured of what is supposed to be included. Not only that, but anyone on the team can do the same. Also, with that approach and information available prior to the deployment, your testers can prepare test cases in advance, because they have the knowledge of what is going to be released next. If your version number is visible in the product, then anyone, even a user in Production can include the extremely helpful specific product version number in which they first encountered any problem they report.

Stay Consistent

If you vary your versioning drastically, you’re going to create some confusion all around. For example, the expectations about the version compared to the previous one will be off, there will be confusion about what boundaries a version does or doesn’t cross, and the meaningfulness of the versioning will be reduced drastically. Can I execute programs in Windows XP that I currently use in 2000? How many major versions behind is 2000 from 10? If I upgrade now, when might the next version come out? In two years? In two months? Consistency in version naming and at least approximate regularity in release schedule are both key factors in molding and meeting the expectations of those who rely on your software product.

Start applying versioning to your software products today and reap some of these benefits for your team, clients, and users. If you already use versioning, then you’ve seen some of these benefits in action. Maybe you could also consider a few variations in documentation or automation to improve your processes even further. Happy versioning!