Flags to enable a web service call or the like is clutter most developers can live without.
I find architects perceive them as the perfect fix for release management. To me, they result in too much config bloat with minimal value.
Flags to enable a web service call or the like is clutter most developers can live without.
I find architects perceive them as the perfect fix for release management. To me, they result in too much config bloat with minimal value.
Also, a flag can be used as a permanent control to disable a part of the system (like an external call) if that part of the system is having problems. Imagine if you had a github activity feed integration, and you wanted to be able disable that feature when a github outage caused that call to take a very long time. Being able to easily disable that feature without needing to change your code can be immensely useful.
nb- I work for LaunchDarkly.
One surprising use case that I have had great success with, though, is in database migrations. I detailed my approach here, if you are interested: http://blog.launchdarkly.com/feature-flagging-to-mitigate-ri...
The SDK maintains these rulesets in memory, and when you need to evaluate a flag for a given user, the ruleset is evaluated. This way, there is no I/O at the time that a rule is evaluated, so there is no real performance impact. At the same time, because of the way we stream the rulesets to the SDK, any rule changes take effect immediately.
https://launchdarkly.com/performance.html has some diagrams, etc, detailing this (sorry for the marketing fluff :)
Performance issues in the browser are rare, and have nothing to do with the number of users using the application.
Flags set via config files require constant updates to said files, not a problem in a small team.
Work in a secure environment where config is controlled? You now need a process for controlling all these new flags.
Have hard dependencies on config (this flag MUST exist)? You tie your application to your config, both now need to be released at the same time.
Code clutter? Yes and it is avoidable. Also flags are not suitable to every type of feature so you're in a half way house anyway. Something which requires a DB change COULD be done via a flag but not worth the effort.
My experiences are mostly around CD pipelines that start breaking because of complexity. Feature flags might suit some application deployments and that's great. In everything I've worked on, they can be replaced by incremental (non-breaking) updates. In that situation anyone can do the release, no deep-feature knowledge required.
A personal example: we were developing a new insurance billing workflow. Since it was a huge change, and very risky, and not all health insurance companies make it easy to test, we rolled it out practitioner by practitioner or customer by customer.
We got to about 95% 'enable_improved_billing_flow=True'. The remaining 5% were turning into a huge project to migrate due to the specifics of their practice / their primary insurance companies / multitude of business reasons (those ~5% were an outsized percentage of our revenue). In the end, we ended up having to maintain two billing flows.