Feature Flags, Rollbacks, and Damage Control.
Learner, Love to make things simple, Full Stack Developer, StackOverflower, Passionate about using machine learning, deep learning and AI
Search for a command to run...
Learner, Love to make things simple, Full Stack Developer, StackOverflower, Passionate about using machine learning, deep learning and AI
No comments yet. Be the first to comment.
Hard-earned lessons on why breaking changes cause real damage in production, and how experienced engineers design new features that respect the past.
How to remove features safely without breaking trust. Introduction: Nothing ever really dies in software In theory, deprecation is simple: Mark something as deprecated Wait Remove it In reality, deprecated things live far longer than expected. O...
Move beyond traditional RESTful thinking. Learn how to design APIs specifically for MCP (Model Context Protocol) servers. This guide covers the shift in mindset, a practical OpenAPI 3.1 example, and a Spring Boot implementation to make your services ...

Extending Kestra to Every Corner of Your Data Stack. Introduction: The Power of Plugins Imagine you're a master chef. You don't just have one knife - you have specialized tools for every task: a paring knife for delicate work, a chef's knife for chop...
Mastering Complex Orchestration Scenarios. Introduction: The Orchestrator's Toolkit Imagine you're conducting a symphony. You don't just wave your baton - you cue sections, adjust tempo, handle surprises, and ensure harmony. That's what advanced work...
From Data Extraction to Loading - A Practical Guide Introduction: Why ETL Still Matters in the Modern Data Stack Remember when data engineering was "extract, transform, load"? Some say ETL is dead, replaced by ELT, reverse ETL, and data mesh. But her...
Building Blocks of Declarative Orchestration. Introduction: The Power of Simplicity Imagine trying to build a house without understanding bricks, beams, and blueprints. That's what using an orchestration tool without understanding its core concepts f...
How experienced teams ship changes safely—and recover when things go wrong
No matter how good your design is, production will surprise you.
Real users behave differently
Real data exposes edge cases
Real traffic finds weak spots
The difference between mature teams and struggling teams is not who makes fewer mistakes.
It’s who can recover faster.
Feature flags, rollbacks, and damage control are not advanced techniques.
They are survival tools.
If you deploy code that cannot be turned off, you are gambling.
Feature flags give you:
Control after deployment
Separation between deploy and release
A way out when assumptions fail
They don’t prevent bugs.
They reduce the blast radius.
Feature flags are best used for:
Turning new behavior on and off
Gradual rollout
A/B testing (carefully)
Emergency shutdowns
They are not:
Permanent configuration
A replacement for design
An excuse to skip testing
You introduce a new pricing rule.
Without feature flag:
Deploy code
Issue found
Rollback required
Database changes complicate rollback
With feature flag:
Deploy code (flag OFF)
Enable for 5% users
Observe metrics
Roll back instantly if needed
Very different outcomes.
Feature flags don’t need complex systems.
Sometimes a simple check is enough:
if (featureFlags.isEnabled("new_pricing")) {
applyNewPricing();
} else {
applyOldPricing();
}
The power comes from control, not sophistication.
If rollback is painful, it won’t happen fast enough.
Rollbacks fail when:
Schema changes are irreversible
Data formats change silently
Old code can’t run on new data
If you can’t roll back in minutes, you don’t have a rollback plan.
You deploy:
New code
New schema
Data migration
A bug appears.
Code rollback:
Old code doesn’t understand new schema
Data is already changed
Rollback fails.
Lesson:
Feature flags don’t save you if the data is incompatible.
When something breaks in production, panic makes things worse.
Experienced teams follow a simple order:
Stop the bleeding
Stabilize the system
Understand what happened
Fix forward carefully
Feature flags help with step one.
A background job starts consuming too much CPU.
Without kill switch:
Restart servers
Scale nodes
Hope for improvement
With kill switch:
Disable the job
System stabilizes
Root cause analysis begins
No heroics required.
Flags that never get removed become:
Dead code
Confusing logic
Maintenance burden
Flags should have an expiry date.
If no one owns a flag:
No one cleans it up
No one knows when it’s safe to remove
No one remembers why it exists
Every flag needs an owner.
Feature flags cannot fix:
Poor data models
Breaking API changes
Irreversible migrations
They are seatbelts, not engines.
Instead of:
Prefer:
Internal users first
Small percentage of traffic
Gradual increase
Problems surface early.
Impact stays small.
Feature flags without metrics are blind.
You should observe:
Error rates
Latency
Business metrics
User behavior
If you can’t see the impact, you can’t control it.
Before releasing a flagged feature:
Can we turn it off instantly?
Does old code still work?
Is rollback tested?
Are metrics in place?
Who owns this flag?
If any answer is “no”, pause.
Confidence feels good.
Control saves systems.
Feature flags, rollbacks, and damage control are not signs of weakness.
They are signs of experience.
The best teams don’t hope nothing goes wrong.
They prepare for when it does.
More such articles:
https://www.youtube.com/@maheshwarligade