Easy feature flags

I recently switched to self hosting the MP3 files for the episodes of the Beyond Blocks podcast.

The first step was to upload the files, followed by updating the player on the episode pages to use the HTML audio element.

As I didn't want the player to switch immediately, I wrapped the new code in a feature flag (or feature toggle) to keep the original player active.

Later, I could swap the player by enabling the feature flag.

How I did it

Feature flagging is a straight forward concept.

You isolate the code you want to be toggleable within a conditional - i.e. an if statement - that you can easily change in the future.

My website built with Sculpin, so I can add self_host_podcast_episodes: false to my sculpin_site.yml file.

This will be available as site.self_host_podcast_episodes and I can use this in my code to show the appropriate player.

Something like:

{% if site.self_host_podcast_episodes %}
Show the new player.
{% else %}
Show the old player.
{% endif %}

Here's the thing

I like feature flags as you can separate deploying a feature from releasing it.

The code can be deployed but not active until the feature is enabled.

It's easy to enable, and easy to revert if needed.

In Drupal applications, I use the Feature Toggle module, so I can toggle feature flags by logging in and updating a checkbox.

I also wrote a module with a Twig function so I can check if a feature toggle is enabled directly in a Twig template - the same as I'm doing in Sculpin.