From 682ce312f8ec30d192e263f21a280f48404590cf Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Wed, 25 Dec 2024 01:34:37 +0000 Subject: [PATCH] Add daily email for 2024-12-22 Easy feature flags --- source/_daily_emails/2024-12-22.md | 60 ++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 source/_daily_emails/2024-12-22.md diff --git a/source/_daily_emails/2024-12-22.md b/source/_daily_emails/2024-12-22.md new file mode 100644 index 00000000..297a2c37 --- /dev/null +++ b/source/_daily_emails/2024-12-22.md @@ -0,0 +1,60 @@ +--- +title: Easy feature flags +date: 2024-12-22 +permalink: daily/2024/12/22/feature-flags +tags: + - software-development + - drupal + - php + - sculpin +cta: ~ +snippet: | + Have you tried feature flags (aka feature toggles)? This is how I used a feature flag when swapping my podcast player. +--- + +I recently [switched to self hosting][0] the MP3 files for the episodes of the Beyond Blocks podcast. + +The first step was to upload the files, followed by [updating the player][1] 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 togglable 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: + +```twig +{% verbatim %} +{% if site.self_host_podcast_episodes %} + Show the new player. +{% else %} + Show the old player. +{% endif %} +{% endverbatim %} +``` + +## 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][2], so I can toggle feature flags by logging in and updating a checkbox. + +I also [wrote a module][3] 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. + +[0]: {{site.url}}/daily/2024/12/18/self-hosting-podcast +[1]: {{site.url}}/daily/2024/12/19/working-iteratively +[2]: https://www.drupal.org/project/feature_toggle +[3]: https://www.drupal.org/project/feature_toggle_twig