Release Management Process and Best Practices
Release Management Process and Best Practices
Managing risk
Coordinating IT resources
The responsibilities for release management include everything from requirements gathering to
managing planning, scoping, building, testing, and deploying. Release management has
evolved with advances in technology and best practices but remains an essential process for
both IT service management (ITSM) and software delivery. The focus or scope of release
management has also shifted in that time from a cutover focus originally to an end-to-end
process today. While the implementation will vary by SDLC, here are the standard components
of the release management process:
Release Management Process Components
Release Pipeline:
A specific release process from feature planning to delivery
Release Policy:
The definition of release types, standards, governance requirements for an organization
Release Template:
A single, repeatable workflow process for release pipeline that includes human and automated
activities and follows an organization’s release policies.
Release Plan:
An instance of a release template developed for a specific release
Deployment Plan:
Activities to deploy a release to the production environment.
Release unit:
The set of artifacts released together to implement a specific feature
Release package:
A combination of one or more release units deployed together as a single release due to
interdependencies, scheduling, or business priorities.
Major Releases:
Infrequent release packages that include often include many release units that have a high or
critical business impact
Minor Releases:
More frequent release packages with fewer release units that do not include mission critical
components.
Regardless of their background, release managers work with business leaders, product owners,
IT project teams, and operations staff to ensure every release contains the correct features that
meet the technical requirements through pre-production environment testing, coordinates and
schedules release unit dependencies into release packages and orchestrates a seamless release
deployment. This includes working constantly to minimize any impacts to the customer
experience. From proactive testing, to fostering team collaboration, to monitoring the health of
the release can all improve release quality.
This structure changes with transitions to agile development and DevOps. Ultimately, in DevOps
continuous delivery each release carries minimal risk and automated tests verify requirements
compliance. At this stage a CAB would dramatically slow development. The transition to
DevOps is coupled with a shift away from change management to product management working
in concert with release management. This transition is categorized by three phases:
1. CAB approves software requirements changes and inspects work after development.
Illu
stration of the overlap between the change and release management process
In Agile methodologies, the central role of the CAB is often replaced by a more decentralized
change management process that can adapt requirements sprint by sprint. For example, in the
scaled agile framework (SAFe), a popular Agile framework for large enterprises, release units
are delivered every sprint cycle and a release package is deployed to production over 10-12
weeks of sprints. Through this release management process, SAFe allows enterprises to gain
the benefits of agile with the control of waterfall. The release manager is the cornerstone of
this process, continually coordinating with business stakeholders to ensure that the scope of each
sprint aligns with business priorities and works with the development and operations team to
coordinate their development, testing, and delivery. If you want to learn more about Release
Management and scaled agile framework (SAFe) take a look of our white paper: An Introduction
to Release Management and Scaled Agile Framework (SAFe)
Deployment Planning
Cutover, or go-live, events in Agile likely include release packages containing several release
units that need to be deployed in a specific sequence. These events can quickly become complex,
increasing their risk of failure. To avoid long, stressful manually coordinated cutovers
organizations implement Deployment Management & Orchestration solutions. These
solutions enable teams to document the entire cutover process beforehand including each
activity’s dependencies. The process is then streamlined by automating as many tasks as
possible. With the deployment plan and task automation complete, cutover events can easily be
orchestration in real-time. These solutions deliver work visibility to the entire teams, enabling
everyone involved to see the status of each activity. This allows independent teams to act
confidently throughout the cutover event, accelerating the process and reducing risks.
While still critical, the release management process in DevOps looks different. Many large
enterprises adopting DevOps implement a continuous integration and continuous delivery
(CI/CD) pipeline but not continuous deployment. This allows enterprises to retain a level of
centralization through release policies that include RACI requirements that incorporate
leadership in deployment plans.
At the same time, DevOps cultures emphasize collaboration, experimentation, and continuous
improvement through tight feedback cycles. This breaks down work and information silos,
creating decentralized, product-oriented teams. Further, DevOps aims to constantly reduce the
size of software changes to reduce the risk of disruption from any release. The automation of
testing, building, integration, delivery, and other processes reduce the human activities in every
release as well as the amount of management and coordination required. In these situations, the
product owner often takes on the role of release manager, acting as the bridge between business,
product, development, and operations. Additionally, a centralized release management team can
work with product owners to ensure that organization release policies are met and spread best
practices across teams. This adaption of roles is reflected in ITIL V4’s practices describing sets
of value streams and processes interacting differently depending on the circumstances.
Plutora, the leading value stream management platform for enterprise IT, includes release
management and deployment planning solutions. Plutora’s flexible release management module
makes it easy to implement best practices in any SDLCs, including those with a mix of
methodologies across the enterprise. From standardizing release requirements to real-time
orchestration of pipeline activities, Plutora empowers enterprises to confidently streamline their
release processes. Plutora also includes a Deployment Management & Orchestration module.
This module provides deployment planning, automation features, and real-time orchestration of
cutover activities. Using Plutora, enterprises accelerate deployments, while making them
more predictable and lower risk.
Guide: Software Release
Management For Small
Teams
Formalizing The Release Management Process
(If There’s Any)
In some team configurations, especially ones that are found in startups, there
are no DevOps, nor infrastructure engineers, to provide support when
releasing a new version of the product.
You may be familiar with the idea of a checklist for some operations, as per
the Checklist Manifesto, a book by Atul Gawande. I believe a formal release
process (like many other tasks in the software development world) provides
developers with an opportunity to implement this protocol. A release process
checklist should be kept in a shared document, preferably in the form of a
collaborative wiki, or a spreadsheet on Google Drive.
By sharing this vital document with the team, and by granting editing
permissions, every member has access to the formally defined release process.
This allows them to understand how the process works. Moreover, following
discussions with other team members, it empowers the team to improve upon
it every now and then. This should bring transparency and allow the entire
team to have real-time access to what’s going on during the release, what steps
have been completed, and by whom.
In this section, I’ll propose some steps you can use to build your own checklist
for your release process. Some of these steps are by no means mandatory.
Each app is different and each organization works in a different way, so feel
free to adapt and make changes that will fit better into your workflow.
It’s likely that you are familiar with the concept of Git Workflow, or with the
idea of release branches, a topic that has been explained in a previous blog
post.
Ideally, you should have at least three branches:
It is important to say, as well, that if you code some bug fixes into the release
branch, you should not forget to merge them back to develop. The main
purpose of the release branch is to have a preview snapshot of how the app
should behave after it goes into production.
2. Bump Version
The next step would be to bump (modify or increase) the version number on
the release branch.
You should open the AndroidManifest.xml / package.json / pom.xml / or
wherever the app’s version is stored in your project (YMMV), update the
version number, and then commit the changes to the current release branch.
It is important to update the version number for two reasons.
First, you can track and map the features that were introduced in each version,
and second, you will be aware of the version they are using should they need to
do some troubleshooting or to contact you for support. If you are building a
mobile app, the version number you are updating in this step is usually
displayed on the user end, in the About section or in Google Play or Apple
App Store.This step is also a good opportunity to update environment-
dependent-configuration files (although I’d suggest keeping those in a
separate repository), such as making the branch point to the production
database, or any other tweaks needed on the build process.
Finally, it is recommended that you push the release branch to origin, so it is
available for your other developers:
$ git push -u origin release/x.y.z
included'
Tags are useful because you are persisting this specific point in history in the
git repository, and you can come back later to recreate a separate branch off a
particular tag.
3b. Use a pull request to merge the release branch
Some tools that allow you to implement pull requests into your workflows
are GitHub, Bitbucket and GitLab (merge request as they call it on the latter).
With these tools, you don’t type the git commands manually, instead, you use
a web interface to set the source branch (release) and the destination branch
(master), and then you add one or more reviewers, all of whom will be able to
write inline comments on these new changes, suggest improvements, and so
on.
After all the reviewers approve the pull request, you can automatically merge
the changes into master by pressing a button on the UI.
6. Changelog Generation
There should be a file at the root of your project named CHANGELOG.md (or
an equivalent) where you should add a new entry whenever there is a new
release in order to document everything that’s included in it, like bug fixes,
new features, known issues, and any other relevant information in the form of
release notes. This is really useful for users and contributors to see what
changes have been made between each release (or version) of the project.
The changelog entry includes the date, version number and some notes about
the release. The entries should be kept in reverse chronological order. Here’s a
simple template I’ve been using that you can adapt to your project:
Let the team know via an internal messaging tool (e.g.: Slack) that a new
release has been completed. I recommend creating a new channel
(i.e.: #releases) for the sole purpose of communicating release related
events. It is easy to add hooks in a Slack channel to post a message after
an action has been taken.
Alternatively, send an email to the stakeholders with a link to the
changelog, or the changelog file attached.
Write a blogpost (if you have a blog for your app or product) or a tweet.
More actions can be taken depending on the nature of your organization. The
important thing is not forgetting to communicate that a new version of your
product is available.
After a release is executed, you will probably need to update the status of some
of your tickets to keep track of the bug fixes, or features, currently in
production. Generally, this involves changing some tags (for small projects I
use a release-pending tag, which I remove after the release is completed).
If you use milestones for each new version you’ll probably need to update their
status or mark them as completed. Some issue trackers even let you plan the
release and align it with sprints, track whether a bug is blocking a release, and
other useful information.
It all depends on how you use the tool. I simply want to point out that the task
of updating the information in the issue tracker should be included in your
release checklist.
The reader might have noticed that, apart from the changelog step outlined
above, many of the aforementioned steps can be automated, too.
The ability to automate some parts of the release process is a huge win and
saves a lot of time. I suggest creating scripts, or figuring out how to automate
individual steps and then work towards a continuous delivery goal.
Continuous delivery can reduce risk, reduce costs, and reduce the time
developers need to spend in managing the release. Consequently, you’ll be
able to release more often and be more productive in terms of the hours
allocated for development.
The holy grail of DevOps companies is to be able to launch a new version by
pressing a button (or running a command) that would trigger the release
process automatically, or even better, a system that would release a new
version of your software at a designated time. Of course, this is difficult to
achieve because you also need to automate a lot of the testing process, but it is
not impossible.
A fully automated software release? It’s not as farfetched as some
believe.
In this section I’ll describe a couple of recommended practices that I’ve found
convenient, either to make the release process smoother or for taking safety
measures in case something goes wrong.
Another important thing to mention if you are managing a web app, is to know
the time zone the majority of your users are located. You should time the
release during a low traffic period to minimize the potential damage if
something fails. Sometimes, this can be tricky when your user-base is spread
across the whole world, but anyway, you should do some research and decide
on the best time.
Backup Your Database Before A New Release
Staged Rollouts
Facebook has been doing this for a long time. It tests a new feature on five or
10 percent of its users, gradually increasing it until they reach 100 percent of
the user-base. During the staged rollout phase, you’ll need to look closely at
user feedback and crash reports. With this information, you can then postpone
the release, or fix errors, before they affect every user.
There’s a nice tool on the Android’s Developer Console that implements staged
rollouts for your Android apps.
After that, start thinking about how to automate parts of the process. Think
about areas that can be improved. Explore ways of reducing the release time
by incorporating small optimizations. Automation should be your ultimate
goal; however, don’t plan that from the start, or you will fail by attempting
such a big leap. As with with every process, it is better to improve it gradually.
Do you have any other tricks or guidelines you use for launching new versions
of your app? If so, let me know. I don’t come from the DevOps world, I am just
a developer who happens to be quite organized and structured, but compared
to many veterans, I am still a novice in this respect, so feel free to comment or
contact me if you have something to add.