Ever shipped a feature that looked perfect in staging, only to watch it spectacularly fail for thousands of users? Yeah, me too. It's that stomach-dropping moment when you realize your "minor update" just broke the checkout flow for half your customers.
This is exactly why percentage-based rollouts exist. Instead of going from zero to 100% instantly, you can release features to just 1% of users first, then gradually increase that percentage as you gain confidence. Let's dig into how this actually works and why companies like Monzo use it to ship over 100 times per day without breaking things.
Think of percentage rollouts like testing the water temperature before jumping in the pool. You're introducing new features to a small group of users first, watching what happens, then slowly expanding access as you verify everything's working smoothly.
Here's the basic idea: instead of flipping a switch and giving everyone your new feature at once, you start with maybe 5% of users. If things look good after a day or two, bump it to 20%. No fires? Go to 50%. This gives you multiple checkpoints to catch problems before they affect everyone.
The magic happens through feature flags - little toggles in your code that control who sees what. Without touching any code, you can turn features on or off for specific user segments. It's like having a remote control for your application. The Reddit community has some , but for percentage rollouts, they're essential.
What's really cool is seeing how this plays out at scale. pushes code to production over 100 times daily using this approach. They're not cowboys - they've built solid automation, use microservices to isolate changes, and monitor everything obsessively. As , this kind of deployment frequency only works when you've got your testing and monitoring game on point.
The biggest win with percentage rollouts is simple: when something breaks, it only breaks for a few people. Remember that checkout flow disaster I mentioned? With a 5% rollout, that's 50 unhappy customers instead of 1,000. Much easier to apologize to 50 people than deal with a full-scale meltdown.
But it's not just about damage control. You're essentially running a live experiment every time you roll out a feature. Here's what you can learn:
How users actually interact with your new feature (spoiler: it's never what you expected)
Performance impacts under real-world conditions
Edge cases your QA team missed
Whether the feature even solves the problem you thought it would
This feedback loop is gold. Say you're rolling out a new search feature. At 10% rollout, you notice users are typing queries you never anticipated. You can actually fix these issues before the other 90% of users ever see the feature. It's like having a time machine for bug fixes.
Feature flags make all this possible by decoupling your code deployment from feature releases. You can push code to production that's completely invisible until you're ready to show it. And if something goes sideways during rollout? One click and you're back to safety. No emergency deployments, no rollback procedures - just flip the switch off.
This whole approach fits perfectly with continuous delivery practices. You're shipping small changes frequently instead of massive updates quarterly. Less risk, faster feedback, happier users. What's not to love?
are powerful, but they can quickly turn into technical debt if you're not careful. Start by treating them as temporary - every flag should have an expiration date. Once your rollout hits 100% and runs stable for a few weeks, remove the flag and the old code path.
Here's what works well:
Name your flags clearly (feature_new_checkout_flow, not flag_123)
Document who owns each flag and why it exists
Set up alerts for flags that have been at 100% for too long
Use a proper feature flag system, not just if-statements everywhere
The key is having a kill switch ready. When go wrong, you need to react in seconds, not minutes. A good feature flag system lets you instantly turn off a misbehaving feature without touching code or waiting for deployments.
shows what's possible with the right automation. But you don't need their scale to benefit from their approach. Start small: automate your rollout percentages first. Instead of manually updating from 5% to 10% to 20%, set up a system that gradually increases exposure based on error rates and performance metrics.
Your monitoring needs to answer three questions:
Is the feature working? (errors, crashes, timeouts)
Are users happy? (engagement metrics, feedback)
Is the system healthy? (CPU, memory, response times)
Set up dashboards that compare these metrics between users with and without the feature. If any metric degrades, your automation should pause the rollout and alert the team.
are all about finding your comfort zone between moving fast and not breaking things. There's no universal formula - a cosmetic change might go from 0% to 100% in hours, while a payment system update might take weeks.
Consider this framework:
Critical features (payments, auth): 1% → 5% → 10% → 25% → 50% → 100% over 2-4 weeks
Standard features (new UI elements): 5% → 25% → 50% → 100% over 1 week
Low-risk features (analytics, logging): 10% → 50% → 100% over 2-3 days
Always have a rollback plan. And I mean always. Even for that "trivial" CSS change.
means every commit could potentially go to production. But "could" is the key word - you still choose when to release. This pairs beautifully with percentage rollouts because you can ship code whenever it's ready, then control the actual feature release separately.
The magic happens when you combine with feature flags. Your pipeline automatically deploys every change that passes tests, but features stay hidden behind flags until you're ready to roll them out. It's like having your cake and eating it too - the speed of continuous deployment with the safety of controlled releases.
Getting percentage rollouts working smoothly isn't just about the tech - it's about changing how your team thinks about releases. The shift from "big bang" deployments to gradual rollouts requires new habits.
Start by aligning your rollouts with your CI/CD pipeline. Every pull request should include not just the code changes, but also the rollout plan. Which users get it first? What metrics will you watch? What are the rollback criteria? Make these decisions before merging, not during deployment.
Monzo's engineering culture offers a great blueprint. They've made deployments so routine that shipping 100 times a day feels normal, not stressful. How? Three things: ruthless automation, microservices that limit blast radius, and a team culture that treats production issues as learning opportunities, not blame games.
Measuring your rollout process is crucial. Track these basics:
Time from code complete to 100% rollout
Number of rollbacks per month
Average time to detect issues
User complaints during rollouts
As Martin Fowler's work on metrics points out, focus on trends rather than absolute numbers. Is your rollout velocity increasing? Are rollbacks decreasing? That's what matters.
Feature flags tie everything together, but they need active management in production. Create a regular cleanup schedule - maybe every sprint, review all flags and remove the ones at 100%. Otherwise, you'll end up with hundreds of zombie flags cluttering your codebase. Trust me, I've been there, and it's not fun.
Percentage-based rollouts transform deployments from nerve-wracking events into routine, controlled experiments. Start small - pick one feature, roll it out to 5% of users, and see what happens. Once you experience the confidence that comes from gradual rollouts, you'll wonder how you ever lived without them.
The tools and practices we've covered - feature flags, monitoring, automation - they're all important. But the real shift is mental. It's about embracing the idea that production is just another environment where you can safely experiment, learn, and iterate. Companies like Statsig have built entire platforms around making this process seamless, but you can start with basic feature flags and grow from there.
Want to dive deeper? Check out Martin Fowler's continuous delivery resources, explore how other teams handle feature flags, or just start experimenting with a simple percentage rollout on your next feature.
Hope you find this useful! Now go forth and roll out gradually.