The world of DevOps is always moving forward, in an effort to enable developers and the organizations they work for to get better software out faster.
Among the emerging approaches for accelerating DevOps is progressive delivery. The term was coined by RedMonk analyst James Governor in a 2018 blog post as an attempt to define an approach that forward-thinking DevOps teams were starting to use.
At its most basic level, progressive delivery is about enabling organizations to progressively deliver incremental features to users. Progressive delivery makes use of multiple tools that are common in DevOps today, including continuous integration and continuous deployment (CI/CD) tools. It also involves the use of feature flags, which let developers deploy features to a subset of users and then roll back those features if they don't work as planned.
The Intersection of Continuous Delivery and Progressive Delivery
Progressive delivery is linked to the concept of continuous delivery, according to Tracy Miranda, executive director of the CD Foundation, a vendor-neutral home for CI/CD projects.
Continuous delivery is a software development practice in which teams release software changes to users safely, quickly and sustainably, Miranda told ITPro Today. Progressive delivery falls under the continuous delivery umbrella, she said, adding that a lot of people use the terms interchangeably. Miranda explained that progressive delivery at its essence is about disconnecting the software deployment stage from the release to users. That is, software is deployed, but not all software features are automatically available for users to use.
"With progressive delivery techniques, new software features may be deployed to a subset of users, then evaluated before rolling them out to more users or rolling them back if not matching some key metrics," she said. "The feedback decision loop is critical to progressive delivery and reduces risk by limiting the blast radius for changes."
There are business and operational implications to progressive delivery as well, according to Miranda. If it is done well, it can take developers off the critical path for feature releases and shifts ownership to product or release managers, she said.
Tools and Processes That Enable Progressive Delivery
There are a number of tools and processes that help progressive delivery.
According to John Kodumal, CTO and co-founder at LaunchDarkly, the two key components of progressive delivery are release progression and delegation. Release progression is the rollout of a new feature to users over time, while delegation is assigning the controls for each feature to the person working most closely to it, he said.
A foundational capability for enabling progressive delivery is the use of feature flags. In the past, teams might have used a canary release to make new software features available to a limited selection of users ahead of a wider release, Kodumal said. With feature flags, the canary release can be accomplished with significantly less risk.
"When teams use feature flags, they can isolate individual changes at the application layer, providing a higher level of granularity," Kodumal told ITPro Today. "Ultimately, feature management’s ability to work on a per-change basis as opposed to a per-deploy basis makes it essential for successful progressive delivery.”
Best Practices for Progressive Delivery
While progressive delivery can reduce risk when deploying new capabilities, taking such an approach is not without its own set of challenges.
"Without a doubt, the biggest challenge is culture and way of working," Ethan Jones, director of product management at Harness, told ITPro Today.
While good tools can help teams adapt, changing the way developers and organizations work can often take time. Jones noted that a lot of the work his company does when onboarding people to its tools isn’t related to how the solution works. The difficult part is figuring out how the organization goes from one team to all the teams using the same solution.
Much like progressive delivery is all about implementing incremental changes, Jones suggested that a best practice for progressive delivery adoption is to build its key elements incrementally.
"Some organizations may need to introduce source code management practices first before even discussing progressive delivery," he said. "It all depends on the level of maturity for a given organization."
Understanding how best to use progressive delivery is another challenge for some organizations. According to Kodumal, for large, risk-averse companies, the ability to ship code quickly can be intimidating at first, and those companies may not be taking full advantage of the benefits of progressive delivery.
"When an enterprise really embraces progressive delivery, the options are endless," he said. "It can be used to enable longer-term experiments, A/B testing and personalization, but only if these companies are willing to experiment and learn the tools.”
In Kodumal's view, progressive delivery is all about enabling speed with control, and once organizations embrace this, they’re on their way.
"The best advice I can give companies new to progressive delivery is to make the process of learning about it a collaborative experience," he said. "Because there are so many ways it can be used, siloing your organization’s understanding of it to only a handful of people on the development team is going to limit your ability to take full advantage of its features.”