Unleash

How to think about release management

Release management controls how and when features become available to users, which differs from deployment itself. While deployment moves code into production, release management determines when that code affects user experience. The distinction matters because conflating the two creates unnecessary risk. Understanding different release strategies helps teams navigate this complexity.

Deployment is not release

Traditional software development treated deployment and release as the same event. You would merge code, run tests, deploy to production, and hope for the best. When problems arose, rolling back meant rebuilding, retesting, and redeploying, which could take hours while users encountered broken functionality.

Modern teams separate these concerns entirely. Code can exist in production without being active, which means a new search algorithm can sit dormant behind a feature flag, an analytics dashboard redesign can stay hidden, or an experimental recommendation engine can deploy but never trigger. This separation fundamentally transforms how teams manage risk.

When deployment and release are separate, you gain meaningful control over how features reach users. You can turn features on for internal users first, test with 5% of traffic, target specific customer segments, and disable functionality instantly if problems appear, all without touching your deployment pipeline.

Why this matters in practice

Consider a team shipping a new checkout flow for an e-commerce platform. Under traditional release management, they would merge the code, deploy it, and watch conversion metrics. Problems would require deploying a fix or rolling back, both time-consuming options.

With proper release management, they deploy the checkout flow behind a feature flag and enable it progressively: first for QA, then internal employees, then 1% of users. When monitoring shows conversion dropping, they pause at 5%, investigate, find a confusing button label, and fix it without redeploying.

This works because release management operates at a different level than deployment. While deployment moves code between environments, release management decides when users actually encounter new functionality. Most issues that emerge aren’t technical bugs but rather mismatches between what you built and what users need.

Building a release management practice

Effective release management requires structure. Teams often start using feature flags tactically, toggling things as needed. This works until you have dozens of flags with no clear ownership.

Define roles clearly from the start. Each flag needs an owner, production rollouts need approval, and someone needs to monitor metrics and decide when to advance to the next stage. These responsibilities vary by organization, but making them explicit prevents confusion and ensures accountability.

Release templates standardize the process. Define a pattern once (internal testing, beta users, 10% rollout, 50% rollout, full release) and new features follow it automatically. Teams save time and reduce errors through consistency.

Standardized processes naturally improve communication across teams. When every feature follows the same milestones, stakeholders know what to expect at each stage. Product managers can time marketing campaigns appropriately, support teams can prepare for user questions, and engineering leadership can track release velocity. This structure also improves retrospectives by making it easier to compare how different features performed at the same rollout stages.

Common problems teams encounter

Flag sprawl tops the list of common problems. Features ship, flags remain, and eventually nobody knows what can be safely removed. Your codebase fills with purposeless conditional logic. Treating flag cleanup as part of the release process requires discipline but improves maintainability.

When creating flags, define their end states upfront. Temporary flags that only exist during rollout need retirement dates, while permanent operational toggles need clear documentation about their purpose and ownership.

Poor rollout stages cause problems. Jumping from internal testing to 50% of users skips learning opportunities. When something breaks, half your user base sees it. Progressive rollout works when you start small enough that issues affect few users while still surfacing problems.

Without clear success criteria, teams struggle to know when to advance or pause a rollout. Defining these upfront enables confident decision-making. For example: “Proceed to 25% if error rate stays below 0.1% and P95 latency increases less than 50ms.”

Feature flags as infrastructure

Feature flags need the same reliability as your database or load balancer. An outage could revert all features to default states and potentially disable critical functionality.

Run feature flag infrastructure redundantly, cache flag states in your application, and design for graceful degradation. Your application needs a sensible fallback if the flag service is unreachable. The right choice (using the last known state, defaulting to enabled, or defaulting to disabled) depends on the feature and its blast radius.

Flag evaluation must be fast, since milliseconds add up when every request checks multiple flags. Most systems let applications cache flag states and poll for updates periodically. Flag changes take seconds to propagate rather than being instant, but this approach avoids making network calls on every request.

Access controls need to match your organizational needs, since the ability to toggle features carries both power and risk. Not every developer should have the ability to flip production flags. Some organizations require approval workflows for production changes, while others trust teams to operate independently. The key is matching your controls to your culture and risk tolerance.

Practical implementation considerations

Getting release management right involves several technical and organizational factors:

  • Instrumentation and monitoring: You can’t manage what you can’t measure. Every feature behind a flag needs metrics. Track not just errors and latency, but business metrics like conversion rates, engagement, or whatever matters for that feature. Set up alerts so you know immediately if things go wrong.
  • Integration with existing tools: Feature flags shouldn’t be isolated. Connect them to your issue tracker so you know which ticket relates to which flag. Link to your documentation system so others can understand what a flag does. Feed flag state changes into your incident management tools so on-call engineers have context.
  • Rollback procedures: Know how to disable a feature quickly. This should be a one-click operation, not a five-step process involving multiple screens and confirmations. In an incident, speed matters. Test your rollback procedures before you need them.
  • Team training: Everyone touching the release process needs to understand how it works. This includes how to create flags, how to configure rollout strategies, what the approval process looks like, and when to escalate issues. Document this and run through scenarios as a team.

Moving forward

Release management becomes manageable when you treat it as a distinct practice. Teams with smooth releases have invested in making the process repeatable, visible, and safe.

This doesn’t require massive tooling investments. Start with small changes: add a feature flag to your next release, define clear rollout stages, assign an owner. See how it changes your relationship with production.

The goal isn’t eliminating all risk, since software will always involve some uncertainty. Rather, the goal is making risk manageable. When you can activate and deactivate features independently of code deployment, release management transforms from a high-stakes gamble into a measured process. That shift makes better software and less stressed teams possible.

Frequently asked questions

What’s the difference between deployment and release?

Deployment moves code into production. Release makes features available to users. These are separate operations. You can deploy code behind a feature flag so it exists in production but remains inactive. This separation lets you control when and how users encounter new functionality without touching your deployment pipeline.

How do I know when to advance to the next rollout stage?

Define success criteria before you start. For example, “Proceed to 25% if error rate stays below 0.1% and P95 latency increases less than 50ms.” Monitor both technical metrics (errors, latency) and business metrics (conversion rates, engagement). Without clear criteria, teams either advance too quickly or stall unnecessarily. The criteria should reflect what matters for that specific feature.

What happens to feature flags after a release completes?

Temporary flags should be removed once a feature is fully released and stable. Define retirement dates when you create the flag. Permanent operational toggles (like kill switches for high-load features) stay in place but need clear documentation about their purpose and ownership. Flag sprawl happens when teams don’t treat cleanup as part of the release process.

Do I need a dedicated tool for release management?

Release management requires infrastructure that’s as reliable as your database. While you can start with simple boolean flags in your codebase, teams quickly need centralized flag management, caching, access controls, and integration with monitoring tools. The investment depends on your scale and risk tolerance, but most teams benefit from dedicated tooling once they have more than a handful of flags.

How fast should a progressive rollout be?

It depends on your feature and risk profile. Some teams move from internal testing to 1%, 5%, 25%, 50%, 100% over days. Others take weeks. The key is starting small enough that issues affect few users while still surfacing real problems. Critical infrastructure changes warrant slower rollouts. Low-risk UI tweaks can move faster. Let your success criteria determine the pace.

Share this article

Explore further

Product

Continuous delivery for machine learning workloads

Deploying machine learning models breaks most assumptions about continuous delivery. Unlike a typical API or web service, an ML model can degrade without any code changes. Your pipeline passes all tests, but the model starts making worse predictions because the data distribution shifted. This creates problems that traditional CD workflows weren’t designed to handle. The […]