Smoke testing is a rapid regression test of major functionality to detect early errors and indicate whether the product is ready for further testing.
Ring deployment is a form of gradual rollout where new features are released gradually to different groups of users to mitigate risk.
Jezz Humble first introduced this concept in his book Continuous Delivery.
It is referred to as a ring as these groups of users are represented as an expanding series of rings, starting with a small group of users to eventually encompass all users.
Rings allow developers to evaluate the impact on those users, also referred to as ‘blast radius’ through observation, testing and gathering user feedback.
When executing a ring deployment, the group of users you choose will be based on similar attributes. The first step is to carefully consider your primary users and which users are suited for each ring by assessing the level of risk at each stage.
For example, you can choose to release to internal users within your organization first to validate the release. Afterwards, you can move on to the next ring which will have more users and so on.
The users within the rings will then receive the new feature. Your impact, or blast radius, will increase as your feature moves through the rings.
As mentioned previously, you can envision this process as a series of rings, where the first release can be to the ‘internal users’ ring.
Then, as you get a bit more confident, the feature will be released to your ‘early adopters’ ring, who are more tolerant in case problems arise during testing and then finally to your ‘all users’ ring. This final ring can also be done in stages, such as all your users in a certain country. The names of the rings as well as the deployment pattern can vary depending on your preferences and objectives.
New releases would be deployed to each ring over time. Between each ring there is a wait period where the team analyzes the release and monitors for any issues. If the deployment stays as it is and is not delayed or cancelled, the next ring will be deployed.
The main benefit of such a technique is risk mitigation which seeks to minimize impact on end-users by gradually releasing your feature without affecting all users instead of opting for one big-bang release.
Using ring deployment, you can identify issues early-on while limiting the blast radius of disruption on your users in case of any problems that might occur during testing.
By gradually releasing your feature, you would be able to gather feedback from your most relevant users and allow you to detect bugs before all your users have access to it.
Now, the question you may be wondering is whether to use rings or feature flags.
The simple answer would be to use both. The main aim of feature flags is to release changes to specific groups of people. Therefore, using both rings and feature flags will help you to progressively expose your features.
So, for example, you can use feature flags in ring deployment to hide certain features in a ring that you’re not fully confident about.
Then, if something goes wrong, you can roll back the release while you fix the issue and then release again whenever you’re ready.
Therefore, ring deployment using feature flag management tools will help you to release your features strategically and efficiently starting with your low-risk user segments.
For example, a feature flagging platform such as Flagship by AB Tasty allows you to assign specific flag values to different user segments so certain users, such as your internal users, will be presented with one value and other users will be presented with another value. As such, this will allow you to create and manage rings easily and allocate users to each ring accordingly.
Ring deployment is an effective, risk-free method of progressive delivery where you can pick which features you want to expose to which users. Using feature flags alongside ring deployment, rolling out and rolling back features have now become easier than ever!
Version control, or source control, is the practice of managing and tracking changes to software code.