Learn the Benefits, Challenges, and Common Practices
We live in an era of breathtaking and relentless change, driven by software innovation.
Software is more strategic and critical than ever, leading to tremendous pressure to compress release cycle times. In response, the practice of Continous Delivery uses automation, tight version control, and collaboration to speed software changes through the deployment pipeline into production.
As Continuous Delivery adoption accelerates, DevOps teams must find ways to mitigate the risk of releasing defective code into production environments.
Introducing Progressive Delivery
Progressive Delivery extends Continuous Delivery by enabling more control over feature delivery. The process uses feature flagging to deploy features to a subset of users, then evaluates key metrics before rolling out to more users or rolling back if there are issues.
Progressive delivery introduces two core tenets, release progressions, and progressive delegation.
Release Progressions uses a variety of deployment strategies to deploy features to a subset of users at a pace sustainable for the business. This facilitates the creation of checkpoints for testing, experimenting, and gathering user feedback.
With Progressive Delegation, control of a feature is delegated to the owner who is most closely responsible for the outcome. As the feature transitions from development, test, and production, the ownership changes from engineering to a role closer to the end-user(usually the product manager).
How it works
Incremental delivery and feature management are critical enablers of Progressive Delivery. They provide fine-grain user exposure control to a new feature. This exposure is referred to as the “blast radius.” Limiting the blast radius limits the set of users exposed to a bad outcome.
The decision to proceed or fall back is based on testing criteria and careful monitoring. You might use canary analysis, A/B testing, observability, or other methods to meet the service objectives and success criteria.
For example, using a release progression with canary, you can select a small blast radius, 1-5% of the entire user population, and then gradually increase to 10%, 20%..etc., based on the feature performance and user feedback in each stage. If there are critical issues, you can either turn that feature off or roll back to the baseline version.
The progressive delegation lifecycle would start in pre-production environments. Developers and test engineers would own the feature and associated toggle support, ensuring that it performs to its expected specifications. Once the feature goes live, ownership transitions to the product manager to review and determine if the feature is delivering the expected outcomes.
Once the feature is deployed to all users, the management of the feature returns to development so they can remove the feature toggle and ensure the new feature is part of the new baseline version.
Release features faster and with control
Progressive delivery helps DevOps teams deploy features faster to production. It provides safeguards and controls to “Go Live” incrementally and rollout features at a pace that supports the business. Development teams can work independently, delivering different features and different release frequencies.
Lower deployment risks and improves quality
Limits blast radius and users are affected if features have problems or don’t work as expected. Only a small subset of users are impacted by limiting the blast radius. Developers get faster feedback and reduce break/fix cycle times, improving the quality of the features as they get deployed across the user community.
Faster decision-making and better collaboration
With progressive delegation, real-time feedback and control of a feature are routed to the team most responsible for the outcome. This improves both technical and business outcomes.
Reduce pre-production testing
Organizations can save time and money since features can safely be tested by actual users instead of QA engineers. Feedback would be directly from the users in a real-world production environment.
Moving fast without breaking things
Testing in production poses real risks. You cannot rely on automated testing to catch every issue before it hits production. Still, testing in production can be complex, degrade the user experience, and slow down your development team. It can take a long time to be confident in your release. You might have a new team of developers that are not that familiar with the application. Perhaps traffic is slow, or there are many features and code paths to exercise. Aligning the product team to a fast release cadence may force a time constraint, and impatience will lead to poor quality and broken glass.
Becoming complacent and deferring to the production environment
Once Progressive Delivery has been adopted, it’s easy for teams to get lazy and wait until the feature is deployed into production to do all of their testing. Fixing a defect is cheaper if found on the developer’s desktop or during integration testing in a pre-production environment. Progressive delivery enables you to get additional validation, but it should not be an excuse to cut corners.
Adds complexity to your release process and production environments
Progressive Delivery is complex and adds another practice layer to Continuous Delivery. You will have multiple application versions running simultaneously – potentially for hours or even days. Your code and shared resources need to be forward and backward compatible. If you don’t have the basic CI/CD fundamentals down, it could be a recipe for disaster. A strong Continuous Delivery practice and a tightly integrated DevOps toolchain are required.
Collaborate when defining release progressions
When you are in the planning phase of developing your Progressive Delivery practice, make sure it’s a collaborative exercise with the product team. Development, product management, and marketing should be involved in defining how to expose a new feature to the users. You want to make sure everyone is clear about why you are releasing the feature and what a positive or negative outcome is.
Automate your workflows for faster decision-making during deployment
The key to progressive delivery is quickly making data-driven decisions about whether to roll back or roll forward a feature. The data to drive that decision is typically dispersed across many different tools within the DevOps toolchain. It might take hours to approve or reject a canary. That is why it’s widespread for organizations and teams to use a solution that automates workflows, securely deploys codes while meeting all compliance requirements, and provides an automated risk assessment.
Eliminate human intervention as much as possible
The main principles of Continuous Delivery are a prerequisite. Implementing a progressive delivery practice is challenging. Integrated toolchains and automation lay the foundation for the incremental delivery of features. Leveraging orchestration tools that can aggregate data-driven analysis and approval cycles are required to scale delivery.
If you feel comfortable with Continous Delivery, Progressive Delivery might be your next step in upgrading your software delivery process. Organizations that use this practice are able to release faster, reduce risk, and improve the customer experience.
OpsMx can help you as your software delivery journey evolves. The OpsMx Intelligent Continuous Delivery Platform provides end-to-end insights and control over the software delivery process through a single pane of glass. The solution dramatically increases the productivity of development, DevOps, and operations personnel by intelligently increasing the velocity and accuracy of releases, enhancing security and compliance for development teams and their workflows, and automating the Continuous Delivery process.