{"id":40227,"date":"2021-12-24T10:00:02","date_gmt":"2021-12-24T15:00:02","guid":{"rendered":"https:\/\/simpleprogrammer.com\/?p=40227"},"modified":"2021-12-24T07:40:01","modified_gmt":"2021-12-24T12:40:01","slug":"release-feature-flags","status":"publish","type":"post","link":"https:\/\/simpleprogrammer.com\/release-feature-flags\/","title":{"rendered":"3 Ways To Make the Most of Release Feature Flags"},"content":{"rendered":"<div class=\"cl-preview-section\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-40231\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2021\/12\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags-square.png\" alt=\"release feature flags\" width=\"280\" height=\"280\" \/>Feature flags are being called one of the next big things in development, and for good reason. Not only are they a key to a true continuous delivery cycle, they can remove the anxiety from a high-stakes release, enable developers to ship new features with confidence and allow for the incremental release of features to test their impact. It\u2019s no wonder, then, that a\u00a0<a href=\"https:\/\/www.forrester.com\/blogs\/feature-management-is-hot-feature-experimentation-is-just-warming-up\/\">Forrester survey<\/a>\u00a0found 31% of teams said feature management is critical to their software development initiatives. What\u2019s more, the\u00a0<a href=\"https:\/\/cloud.google.com\/blog\/products\/devops-sre\/announcing-dora-2021-accelerate-state-of-devops-report?blaid=2273156\">latest report<\/a>\u00a0from Google\u2019s DORA team shows elite performers\u2013those using\u00a0<a href=\"https:\/\/simpleprogrammer.com\/release-trunk-based-development\/\">trunk-based development<\/a>, including feature flags\u2013deploy 973 times more frequently.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>In the world of feature management, release feature flags\u2014also known as feature toggles\u2014are one of the most predominantly used. Release feature flags separate a new feature release from deployment and ensure\u00a0<a href=\"https:\/\/www.amazon.com\/Continuous-Delivery-Deployment-Automation-Addison-Wesley\/dp\/0321601912\/ref=sr_1_1?crid=2SNNMF6U1OV9Z&amp;keywords=continuous+delivery&amp;qid=1638825729&amp;s=books&amp;sprefix=continuous+%2Cstripbooks%2C809&amp;sr=1-1\">continuous delivery<\/a>\u00a0of code. They can be used to ship incomplete code, control the rollout of releases, merge incomplete code into your main branch without interfering with your test or release process, and release whenever you\u2019re ready.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>Here\u2019s how release feature flags can be applied in three different scenarios:<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<ol>\n<li><strong>Shipping Incomplete Code To Production<\/strong><\/li>\n<\/ol>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>Release feature flags allow you to ship incomplete, untested, or otherwise unready code to production without needing to turn them on. Because of this, feature flags are an effective way to reduce the number of times you need to deploy new code to production.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>When you are looking to make continuous updates, you want a strategy rooted in\u00a0<a href=\"https:\/\/www.amazon.com\/Continuous-Delivery-Docker-Jenkins-applications\/dp\/1838552189\/ref=sr_1_1_sspa?crid=2BI11AY6FNXKV&amp;keywords=continuous+integration+and+delivery&amp;qid=1638825788&amp;s=books&amp;sprefix=continuous+integ%2Cstripbooks%2C255&amp;sr=1-1-spons&amp;psc=1&amp;spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEzRTNXVzhGR1RaMllKJmVuY3J5cHRlZElkPUEwMjQwOTkwMVIzMUhIV0c3S1U4UyZlbmNyeXB0ZWRBZElkPUEwNTY4ODczMlcwWVhSTjFWNVBFJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==\">continuous integration<\/a>\u00a0and deployment (CI\/CD). Feature flags can be used to continuously validate your changes on a subset of users. This use-case allows you to release features faster and more confidently, while minimizing risk.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>You get faster releases, higher-quality features and minimize the risk of bugs. With feature flags, you can deploy new versions through CI\/CD. As you\u2019re ready, you can turn on the new features without pushing an update to production, making it easier for you to roll out changes such as bug fixes or new features.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<ol>\n<li><strong>Control Feature Release and Rollouts<\/strong><\/li>\n<\/ol>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>Feature flags bring great efficiency to the release of new features, enabling features to be released both rapidly and safely. Implementing release flags is a best practice that allows product managers to control the release and rollout of a feature on their own schedules. It also allows software development teams or other stakeholders, such as product and marketing teams, to set up a release schedule ahead of time.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>Once your feature is ready, you can directly test it in production. You can target your feature to be visible to only internal users, the users who use it the most, QA testers, or beta customers. It\u2019s also possible to target a feature to internal teams, by location, or any custom attribute.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>A critical developer habit is to get feedback from your customers before\u00a0<a href=\"https:\/\/simpleprogrammer.com\/best-practices-deployment\/\">releasing a new feature<\/a>\u00a0to your entire user base, as well as to control whether a subset of users can use the feature. You can then assess performance based on the chosen KPIs, while avoiding any risk of damage from a buggy feature being shown to all your users.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>With a percentage rollout, you release a new feature to only a portion of the user base and then gradually roll it out to more users. You can then decide how large a percentage of your entire customer base you want to release the new feature to. You can also decide what percentage of those users will receive it at first, and then roll it out to others over time.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<ol>\n<li><strong>Speed up How You Merge Into Your Main Branch<\/strong><\/li>\n<\/ol>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>Release feature flags make it possible to merge incomplete code into\u00a0<a href=\"https:\/\/simpleprogrammer.com\/release-trunk-based-development\/\">main branches<\/a>\u00a0without interfering with testing or a continuous release process. This methodology is an integral part of trunk-based development, a development style where several developers work in isolation on small batches of code and then merge their work into the trunk once or even several times a day. In trunk-based development, code is pushed directly to the trunk, which enables greater version control and helps teams avoid the \u201cmerge hell\u201d that\u2019s more common with the Gitflow (AKA feature branch development) model.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>With Gitflow, there are more branches and larger commits. Every developer gets their own branch and they merge it into the main trunk when they\u2019re done. Not only is it more difficult to merge these long-lived branches together, there\u2019s inevitably conflict because teams are blind to the changes that others are making and could affect them.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>Release feature flags, particularly when used with trunk-based development, vastly increase the speed and safety of developing and releasing new features and lends well to continuous delivery. Because feature flags can be turned on and off at any second, code can be pushed safely to production, even if it\u2019s not complete, which greatly speeds cycle time. These types of feature flags also allow for gradual releases, so code can be tested with partial groups of users to gauge its impact before it\u2019s executed to everyone.<\/p>\n<\/div>\n<div class=\"cl-preview-section\">\n<p>With the ability of release feature flags to help you ship more and worry less, they are becoming an integral part of every developer\u2019s toolkit, and the key to a safe and successful continuous delivery cycle. Expect release feature flags to continue to change the face of software development and delivery in the coming years.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Release feature flags are becoming an increasingly popular technique in the software development world because they make it possible to toggle a feature on and off at any point, even after the code has been deployed.<\/p>\n","protected":false},"author":1406,"featured_media":40230,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[162231890,524297,8915,415,162231298,120,162229803,126441,53511,12,53079],"tags":[],"class_list":["post-40227","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-app-development","category-code-reviews","category-deployment","category-guest-post","category-iot","category-mobile","category-programming","category-release-management","category-source-control","category-testing","category-validation"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>3 Ways To Make the Most of Release Feature Flags - Simple Programmer<\/title>\n<meta name=\"description\" content=\"Release feature flags are an increasingly popular technique that can toggle a feature on and off, even after the code has deployed.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/simpleprogrammer.com\/release-feature-flags\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"3 Ways To Make the Most of Release Feature Flags - Simple Programmer\" \/>\n<meta property=\"og:description\" content=\"Release feature flags are an increasingly popular technique that can toggle a feature on and off, even after the code has deployed.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpleprogrammer.com\/release-feature-flags\/\" \/>\n<meta property=\"og:site_name\" content=\"Simple Programmer\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-24T15:00:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2021\/12\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"3 Ways To Make the Most of Release Feature Flags\",\"datePublished\":\"2021-12-24T15:00:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/\"},\"wordCount\":913,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2021\\\/12\\\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png\",\"articleSection\":[\"App Development\",\"Code Reviews\",\"Deployment\",\"Guest Post\",\"IoT\",\"Mobile\",\"Programming\",\"Release Management\",\"Source Control\",\"Testing\",\"Validation\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/\",\"name\":\"3 Ways To Make the Most of Release Feature Flags - Simple Programmer\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2021\\\/12\\\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png\",\"datePublished\":\"2021-12-24T15:00:02+00:00\",\"author\":{\"@id\":\"\"},\"description\":\"Release feature flags are an increasingly popular technique that can toggle a feature on and off, even after the code has deployed.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/#primaryimage\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2021\\\/12\\\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png\",\"contentUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2021\\\/12\\\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/release-feature-flags\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpleprogrammer.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"3 Ways To Make the Most of Release Feature Flags\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/\",\"name\":\"Simple Programmer\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/simpleprogrammer.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/author\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"3 Ways To Make the Most of Release Feature Flags - Simple Programmer","description":"Release feature flags are an increasingly popular technique that can toggle a feature on and off, even after the code has deployed.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/simpleprogrammer.com\/release-feature-flags\/","og_locale":"en_US","og_type":"article","og_title":"3 Ways To Make the Most of Release Feature Flags - Simple Programmer","og_description":"Release feature flags are an increasingly popular technique that can toggle a feature on and off, even after the code has deployed.","og_url":"https:\/\/simpleprogrammer.com\/release-feature-flags\/","og_site_name":"Simple Programmer","article_published_time":"2021-12-24T15:00:02+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2021\/12\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Written by":"","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/#article","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/"},"author":{"name":"","@id":""},"headline":"3 Ways To Make the Most of Release Feature Flags","datePublished":"2021-12-24T15:00:02+00:00","mainEntityOfPage":{"@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/"},"wordCount":913,"commentCount":0,"image":{"@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2021\/12\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png","articleSection":["App Development","Code Reviews","Deployment","Guest Post","IoT","Mobile","Programming","Release Management","Source Control","Testing","Validation"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/simpleprogrammer.com\/release-feature-flags\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/","url":"https:\/\/simpleprogrammer.com\/release-feature-flags\/","name":"3 Ways To Make the Most of Release Feature Flags - Simple Programmer","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/#primaryimage"},"image":{"@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2021\/12\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png","datePublished":"2021-12-24T15:00:02+00:00","author":{"@id":""},"description":"Release feature flags are an increasingly popular technique that can toggle a feature on and off, even after the code has deployed.","breadcrumb":{"@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpleprogrammer.com\/release-feature-flags\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/#primaryimage","url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2021\/12\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png","contentUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2021\/12\/3-Ways-To-Make-the-Most-of-Release-Feature-Flags.png","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/simpleprogrammer.com\/release-feature-flags\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpleprogrammer.com\/"},{"@type":"ListItem","position":2,"name":"3 Ways To Make the Most of Release Feature Flags"}]},{"@type":"WebSite","@id":"https:\/\/simpleprogrammer.com\/#website","url":"https:\/\/simpleprogrammer.com\/","name":"Simple Programmer","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/simpleprogrammer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"","url":"https:\/\/simpleprogrammer.com\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/40227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/users\/1406"}],"replies":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/comments?post=40227"}],"version-history":[{"count":0,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/40227\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media\/40230"}],"wp:attachment":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media?parent=40227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/categories?post=40227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/tags?post=40227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}