Feature flags aren't about continuos deployment
Although they do easily overcome a common objection.“We couldn’t possibly do continuous deployment here. We have too many big features that take weeks to prepare. Deploying daily just wouldn’t work.”
I hear this argument pretty frequently.
But every time it comes up, someone whips out a silver bullet which makes this objection go away: Feature flags!
Sometimes that someone is me.
Yes, feature flags absoultely can allow you to work on a large, weeks, or even months-long feature, while integrating at least daily.
Just put all of your new fangled feature work behind a if NEW_FANGLED_FEATURE
flag, and you’re golden! Hack away on your new feature, merging every 30 minutes, and when it’s finally ready, set NEW_FANGLED_FEATURE=true
, and poof! Now your customers can see it.
The ability to deploy partial features, and keep them hidden from your customers, is almost magical.
But do you want to know a secret? You usually don’t need feature flags to do this.
I talk about feature flags far more often than I use them. And I usually talk about them in the context described above. That is, I use them as an easy-to-grasp answer to the “But what about our big features?” objection to continuous integration and continuous deployment.
But in practice, I almost never use feature flags. And when I do use them, it’s not because I need them for continuous deployment.
When working on backend code, or really, anything except the actual visual representation in a UI, all you need to do when working on an incomplete feature is simply not call the new functionality.
Adding a new endpoint? Just add it. As long as it’s not exposing sensitive data (and if it is, fix that. NOW!), it doesn’t matter if it’s listening for requests that nobody sends. Building a new menu structure for your UI? Cool. Leave the old one in place, and don’t call the new one until it’s ready.
Some of this takes some skill. But you can learn it. Sometimes it takes some discipline to leave the old in tact while building the new. But you can do that, too.
Feature flags are great. But they aren’t really about continuous deployment. Even though that’s a really easy way to overcome a common objection.