Application success depends on delivery speed, product quality and perceived value, but it’s hard to get all three right. Faster release cycles often equate to lower code quality and the “value” developers think they’re providing may fail completely from the end user’s point of view. Progressive Delivery helps by taking the guesswork out of what works, what doesn’t and why.
“Historically, you’d deploy a new version of software and everybody would see it. For a lot of reasons, this ends up being less than optimal,” said John Kodumal, CTO and co-founder of LaunchDarkly, a feature flag management company. “One of the biggest reasons is risk because if there’s a problem, error or suboptimal behavior, that’s going to be exposed to your entire user base.”
What Is Progressive Delivery?
Progressive Delivery refines the release step, separating it from deployment so the potential damage caused by a bug or poor application design can be limited to a much smaller user base than the entire population. What’s more, teams can decide just how granular they want the level of control to be.
Regardless of how granular they choose to get, the concept is the same: start small and then roll out to progressively larger cohorts. That way, the impact of a change can be assessed before it becomes a liability.
RELATED CONTENT: Progressive delivery: Testing software through limited releases
“The two core ideas driving Progressive Delivery are release progression and delegation,” said Kodumal. “Release progression allows you to adjust the number of users and what they are able to see. Delegation progressively delegates the control of a feature to the owner who is most responsible for an outcome.”
- Developers can decouple deploys from releases and test in production
- Data scientists can experiment and run A/B tests
- Sales and customer success can ensure appropriate entitlement and manage plans
- Operations can invoke kill switches and safety valves
- Security can ensure role-based access control and compliance
- Product owners can do dark launches and beta testing
- Marketing can synchronize launches and target markets
There are two ways to affect Progressive Delivery: using feature flags or canary deployments.
“With feature flags, you can observe a change over a longer period of time and compartmentalize the change. Feature flags also provide the smallest level of granularity such as an individual commit, an individual developer’s work or the most engaged customers,” said Kodumal. “Canary releases are really just the aggregation of all the changes from the last deployment to the new deployment, but with either mechanism, you can do something as simple as a percentage rollout.”
Feature management is essential to achieve Progressive Delivery because canary releases alone can be too constraining. It’s almost impossible to do several canary releases simultaneously, but with feature management, changes can be segregated at any level of granularity, such as squad-based, team member-based, or commit-based, for example. The isolated changes can then be measured independently.
“Feature management essentially gives you the benefit of a canary process, but on a per-change basis as opposed to a per-deploy basis,” said Kodumal. “It gives you more ability to parallelize more availability in a bigger team and pinpoint what changes connect to a positive or negative impact.”
With a canary release, it also may not be possible to identify the cause of a negative impact. However, if the change is guarded by a feature flag, then the feature flag can simply be turned off with the rest of the deployment kept live. Organizations with hundreds of engineers working in parallel find the level of precision greatly beneficial because they can control releases, very precisely, without adding an unwieldy level of complexity that’s hard to manage. Product quality also tends to improve.
Continuous Delivery and Progressive Delivery Go Hand in Hand
Many organizations have adopted CI/CD for competitiveness reasons. Typically, their industry has been disrupted by cloud-native companies that deliver software orders of magnitude faster. In fact, elite companies ship software 106 times faster and their applications fail seven times less often than slower-moving companies. They’re also doing 208 times more code deployments and can recover from incidents 2,604 times faster.
While continuous deployment remains out of reach for most organizations, they’re still able to hone their DevOps practices and CI/CD pipelines. Progressive Delivery is simply the next step.
In fact, Continuous Delivery and Progressive Delivery are not mutually exclusive. Continuous Delivery accelerates release frequency and it can help improve product quality. However, in the absence of Progressive Delivery, Continuous Delivery can’t guarantee that the most recent updates will resonate with customers.
“Most people think of Continuous Delivery as the steps up to deployment. Progressive Delivery expands the life cycle by allowing you to minimize changes and react quickly to change beyond the deployment phase and into the runtime phase,” said Kodumal. “Continuous Delivery allows you to achieve a faster cycle time to production by reducing the size of changes that are pushed to production. Progressive Delivery is a dynamic version of that.”
In fact, the organizations that are in the best position to take advantage of Progressive Delivery are those that are already doing Continuous Delivery, but it isn’t an absolute requirement. For example, if an organization releases software every quarter, they can minimize the risk associated with code changes if the changes are protected by feature flags.
“Regardless of where teams are in their journey, they all tend to want the same thing,” said Kodumal. “They want to deploy when they want and release when their customers are ready.”
Adding Progressive Delivery to Continuous Delivery enables teams to push a change to production quickly and measure the impacts of that change right away. The rapid feedback cycles allow teams to have more confidence in the changes they’re making.
Benefits of Progressive Delivery
A surprising benefit of Progressive Delivery is that it enables teams who have not adopted CI/CD yet to adopt it safely. Progressive Delivery also enables DevOps because it provides collaborative capabilities and helps increase release velocity without interfering with system reliability.
“When software teams adopt DevOps and CI/CD, they often see the speed benefit, but they’re less confident about code quality, user perceptions and whether they’ve done enough to minimize the risk of security vulnerabilities,” said Kodumal. “Progressive Delivery enables you deploy new code faster and with an unprecedented level of confidence because it gives you the safeguards you need to minimize risk potential.”
Risk is the main reason why highly regulated companies have been slow to adopt even Agile practices, let alone DevOps or CI/CD. They want assurances that if their release velocity increases, the price of that speed won’t be incidents, outages, lawsuits or regulatory fines. Using Progressive Delivery, they’re able to limit risk exposure in a manner that’s auditable while delivering value faster to customers.
The operative word when it comes to Progressive Delivery is control. Using feature flags, organizations can control:
- Which capabilities groups or even individual users can access and experience
- When those changes are delivered to different customers
- Who can release features
- The impact of less-than-optimal code
In fact, Microsoft reduces its launch risks using ring deployments, which is a Progressive Delivery technique. Specifically, it starts with a core group (which is actually a canary deployment). If the deployment meets the target performance criteria, then it moves to the next ring, which involves more users, and so on.
GitHub starts with “staff ships,” which are also canary deployments. That way if a deployment misses the mark, it can be fixed before any customers see it. If the deployment is successful, then the rollout continues among customers.
Software teams deploying microservices applications to Kubernetes clusters can take advantage of Progressive Delivery using service meshes or feature management. If using a service mesh, the process starts with a blue-green deployment in which an old version of the software and a new version of the software run on separate servers. The service mesh runs a canary test by routing a subset of users to the new application and the rest of the users to the old application. If the canary test fails, then all traffic is routed to the old version. Feature management provides more control.
The Best Way to Adopt Progressive Delivery
Feature flagging software is readily available, but as with any tool, the results depend on a combination of people, processes and tools.
“If you’re in the planning phase of a Progressive Delivery practice, make sure it’s a collaborative exercise with the team,” said Kodumal. “Your PM, your designer, your engineering – collectively the trio that is in charge of delivering a new change or a new piece of functionality – should talk about how to expose that feature to users.”
For example, they might decide to roll a change out gradually over a 10-day period in 5% increments on a daily basis. If any of the metrics indicate a negative impact, then the change could simply be rolled back.
Alternatively, if the situation involves a rebrand or other initiative involving non-software assets such as documentation or a marketing site, they might choose a rollout strategy.
“You want to bring culture and process change thinking into your planning phase so you’re clear about why you’re releasing a change and what would be considered a positive impact. You also want to consider the metrics so you can understand whether the release is working the way you expect it to,” said Kodumal. “A feature management tool enables you to do all that quickly and efficiently.”
As with many things, teams can decide whether to use open-source tools, build their own tool or license a tool from a company such as LaunchDarkly. The teams using open source or homegrown tools tend to discover they need enterprise capabilities such as a collaboration layer, security and permissions.
“Ultimately, Progressive Delivery software controls how users experience your product, what features they’re seeing and what features they’re not seeing. It’s a mission critical piece of your stack,” said Kodumal.
Transform Your Application Portfolio
Companies that have become adept at Progressive Delivery aren’t just using feature flags to minimize risks. They’re also using it as a means of controlling software over the long term. That way, they can have one codebase that delivers multiple product experiences.
For example, companies offering different subscription or on-premises product levels might have gold, silver, and bronze plans, each of which offers different functionality or capabilities that can easily be controlled using feature flags. Without feature flags, there may be multiple code branches or arcane controls that determine what an individual user sees.
“Customers are now running longer-term experiments, doing A/B testing, optimization and personalization. It’s amazing how many capabilities you can unlock once you have a good feature management practice in place,” said Kodumal. “Once you begin to practice feature management, it fundamentally transforms the way you build software for the better.”
Learn more at www.launchdarkly.com.
Content provided by SD Times and LaunchDarkly