{"id":796,"date":"2026-01-30T09:55:30","date_gmt":"2026-01-30T09:55:30","guid":{"rendered":"https:\/\/productive.io\/engineering\/?p=796"},"modified":"2026-01-30T09:55:30","modified_gmt":"2026-01-30T09:55:30","slug":"decoupling-deployment-from-release-with-feature-toggles","status":"publish","type":"post","link":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/","title":{"rendered":"Decoupling Deployment From Release With Feature Toggles"},"content":{"rendered":"<p   > <a href='https:\/\/productive.io\/engineering\/category\/frontend\/'>Frontend<\/a><\/p> &#8211; <p   > {{minutes}} min read<\/p> <h1   > Decoupling Deployment From Release With Feature Toggles<\/h1> <a href=\"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/\"> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/2024\/02\/T01H5BT2MCY-U03J5GHETPD-abb218b55272-512.png\"  alt=\"\" loading=lazy \/> <\/a> <a href=\"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/\"> <p   > Davor Tvori\u0107<\/p><\/a> Frontend Engineer at Productive. Excited about anything related to computer science. I spend most of my personal time reading and playing video games.<p   > January 30, 2026<\/p> <a aria-hidden=\"false\"   href=https:\/\/www.facebook.com\/sharer.php?u=https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles target=_blank rel=\"noopener noreferrer\" > <\/a><a aria-hidden=\"false\"   href=https:\/\/twitter.com\/intent\/tweet?text=Decoupling%20Deployment%20From%20Release%20With%20Feature%20Toggles&amp;url=https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles target=_blank rel=\"noopener noreferrer\" > <\/a><a aria-hidden=\"false\"   href=https:\/\/www.linkedin.com\/shareArticle?mini=true&amp;url=https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles target=_blank rel=\"noopener noreferrer\" > <\/a> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png\"  alt=\"\" loading=lazy \/> <p   > Deploying new features is a nerve-racking task, <strong>but it must be done.<\/strong><\/p> <p   > Here\u2019s an issue we\u2019ve all faced or will inevitably face in our careers. Allow me to set the scene\u2026<br><br>You\u2019ve finished your work on some features, fixed some bugs, etc. You\u2019re feeling good because some features were a bit more complicated. You decide it\u2019s high time to let your users experience these changes. You bundle up all your teams\u2019 changes and deploy them to the production server. A couple of hours later, disaster strikes!\u00a0There\u2019s a critical bug on a feature you\u2019ve worked on. Now, you have to revert to the old version of the application or deploy a new one, but without your changes.<br><br>As these situations can have a huge impact, reacting quickly is key. Unfortunately, developers usually learn how to handle this situation once it happens, so it only prolongs the agony.<br><br>Deploying and releasing at the same time isn\u2019t such an uncommon practice because, at the beginning of a project, you want your users to see the changes immediately. Many projects continue using this process, but as the project grows, it makes sense to decouple the deployment of the code and the release process (activating changes to users).<br><br>Even if this hasn\u2019t happened to you yet, we can all agree that it\u2019s a very stressful situation, and establishing a process for handling this is something you want to do ahead of time.\u00a0<br><br>But\u00a0<strong>how much<\/strong>\u00a0ahead of time are we talking about here?<\/p> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/1Vv.gif\"  alt=\"\" loading=lazy \/> <h2   > <strong>Feature toggles (aka feature flags)<\/strong><\/h2> <p   > There are many ways to handle these types of outages, and it\u2019s important to establish a rollback procedure. In addition to that, we also use something called\u00a0<strong>feature toggles<\/strong>. It\u2019s not something unique to us, but it\u2019s a pretty sweet thing to have in your toolbox. For those unfamiliar with feature toggles, it\u2019s a mechanism that allows you to turn a feature on or off for a user\u00a0<strong>without needing to deploy the whole application<\/strong>. It\u2019s really simple, but it\u2019s huge!<br><br>Although it\u2019s called a \u201cfeature toggle\u201d, it doesn\u2019t necessarily mean that you have to use them for features only. You can use them basically for anything. Whether it\u2019s A\/B testing, refactoring a part of the screen, or navigating a user to a different page entirely! I\u2019m sure you can think of a couple of more examples that would be useful to you.<\/p> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/pasted-image-0-3.png\"  alt=\"\" loading=lazy \/> <p   > This also allows us to oversee which users can access a certain change. This is helpful when trying to collect feedback or just observing how users interact with something you\u2019ve developed. Once you\u2019ve established your feature toggle system, you don\u2019t need to put in continuous work to keep it going. It\u2019s also a great way to manage the lifecycle of the change by progressively rolling it out to your canary, beta, and all users!\u00a0<\/p> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/Progressive_Rollout.png\"  alt=\"\" loading=lazy \/> <p   > You gain a lot more control over who sees what, and the best part\u00a0is that turning\u00a0toggles on or off can be done by anyone! Someone like a product manager or customer support person could decide to turn a toggle on because it\u2019s just something that the customer needs. After a feature has been fully developed, the toggle can be globally released to all customers, and everyone can enjoy the stable version.<br><br>The number of annoyed users will decrease, and valuable feedback on changes will increase.\u00a0<br><br>It\u2019s also worth mentioning that you can base your whole QA process on the toggles. We can test a change by turning a toggle on, gathering feedback, and then turning the toggle off. When you have such fine-grained control, testing on production isn\u2019t a big deal! We also use these toggles in other environments, so you can isolate a change to a specific set of users on any server.<br><br>It\u2019s a win-win for everyone!<\/p> <h2   > <strong>Okay, but what about development?<\/strong><\/h2> <p   > The main question that\u2019s probably going around in your head is how the feature toggles affect the development of a feature.<br><br>Feature toggles do complicate things a bit when writing code, but if you spend some time on planning, it can be done elegantly in most cases. You must be careful to add every change behind the toggle so nothing leaks when the toggle isn\u2019t turned on. Other people working on the feature must also be aware of using the toggle since it probably will span through multiple files and can sometimes be forgotten.<\/p> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/Snap1.png\"  alt=\"\" loading=lazy \/> <p   > Sometimes, it\u2019s not that complicated, but you gain a lot.\u00a0As I\u2019ve already mentioned, it can be used for basically anything, and complexity may increase, but it really is worth it:<\/p> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/Snap2.png\"  alt=\"\" loading=lazy \/> <p   > The added complexity isn\u2019t such a big drawback. You\u2019re getting a lot more out of feature toggles, and if that means that developers have to be a bit more careful when writing and reviewing code, so be it. It\u2019s much less stressful for a developer when they know a feature can be turned off if it\u2019s causing problems. This doesn\u2019t mean we approve of sloppy code, but sometimes, these things happen.<br><br>To conclude, feature toggles (once established) don\u2019t affect the development process as much, but they\u00a0offer a lot in return.<\/p> <h2   > <strong>Alleviating the downsides<\/strong><\/h2> <p   > The first one does introduce technical debt, but if we create a task for deleting a toggle after it\u2019s been globally released, we can be sure that it will be deleted as soon as possible. The person who created the toggle is responsible for deleting it, which is a great way to handle this efficiently. In any case, deleting a toggle usually takes significantly less time than developing it!<br><br>As for the other issue, there are two ways to handle this. We can do either of these two:<\/p> <ul   > <li>Release the first toggle globally and delete its references in the code if the feature is ready to be released or<\/li><li>Merge the toggles and consider them to be the same feature from now on<\/li><\/ul> <p   > It\u2019s not an ideal situation, but it can happen. The solution mostly depends on the state of the features, so it\u2019s impossible to determine the best way without knowing all the facts. Either way, both solutions can simplify things for development.<\/p> <h2   > <strong>Decisions, decisions<\/strong><\/h2> <p   > For us, implementing feature toggles was a no-brainer. Considering all of the benefits like the control, progressive rollouts,\u00a0and others, it seriously outweighs the downsides it introduces. Even the downsides can be managed to an extent.<br><br>It\u2019s important that\u00a0<strong>everyone<\/strong>\u00a0in the company understands the whole process and embraces why we\u2019re doing it in such a way. It\u2019s an essential part of a company like ours since every department is involved in the release process of product updates. Once people are aware of this, building an admin system to control this is up to you and your company\u2019s needs.\u00a0<br><br>Here\u2019s an example of our own. We call it the \u201cBackoffice\u201d:<\/p> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/Screen.png\"  alt=\"\" loading=lazy \/> <p   > <br>There are ~200 active feature toggles in our codebase<\/p> <p   > As a developer, I\u2019m grateful we can release features quickly and stress-free, knowing we have some wiggle room.<br><br>As for you, I hope I\u2019ve shown you why it\u2019s a good idea to think about something like this if you don\u2019t use a similar mechanism. If you need a bit more convincing, you can read more about it in\u00a0<a href=\"https:\/\/martinfowler.com\/articles\/feature-toggles.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">an article by Martin Fowler<\/a>! Even if you\u2019re\u00a0not in a position to make your feature toggle system, there are a lot of external tools and\u00a0libraries that might help you implement the same!<\/p> <a aria-hidden=\"false\"   href=https:\/\/www.facebook.com\/sharer.php?u=https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles target=_blank rel=\"noopener noreferrer\" > <\/a><a aria-hidden=\"false\"   href=https:\/\/twitter.com\/intent\/tweet?text=Decoupling%20Deployment%20From%20Release%20With%20Feature%20Toggles&amp;url=https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles target=_blank rel=\"noopener noreferrer\" > <\/a><a aria-hidden=\"false\"   href=https:\/\/www.linkedin.com\/shareArticle?mini=true&amp;url=https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles target=_blank rel=\"noopener noreferrer\" > <\/a> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/2024\/02\/T01H5BT2MCY-U03J5GHETPD-abb218b55272-512.png\"  alt=\"\" loading=lazy \/> <p   > Davor Tvori\u0107<\/p> Frontend Engineer at Productive. Excited about anything related to computer science. I spend most of my personal time reading and playing video games.<a   href=\"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/\" > More From This Author <\/a> <h2   > Related articles<\/h2> <a href=\"https:\/\/productive.io\/engineering\/how-react-ruined-web-development\/\"   > <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_react-1-768x322.png\"  alt=\"\" loading=lazy \/> <p   > Engineering \u2022 Frontend<\/p> <h2   > How React Ruined Web Development<\/h2> <\/a><a href=\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/\"   > <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember-768x322.png\"  alt=\"\" loading=lazy \/> <p   > Engineering \u2022 Frontend<\/p> <h2   > Learning Ember: The Easier Way<\/h2> <\/a> <h2   > Related jobs<\/h2> <a href=\"https:\/\/productive.io\/careers\/open-job-application\/\"  > <p  > Open Job Application<\/p><p  > <\/p> <\/a>","protected":false},"excerpt":{"rendered":"Learn how we separate deployment from release with feature toggles at Productive.","protected":false},"author":36,"featured_media":924,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"es_utils_meta_schema":"","footnotes":""},"categories":[12],"tags":[],"class_list":["post-796","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Decoupling Deployment From Release With Feature Toggles - Building Productive<\/title>\n<meta name=\"description\" content=\"Learn how we separate deployment from release with feature toggles at Productive.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Decoupling Deployment From Release With Feature Toggles\" \/>\n<meta property=\"og:description\" content=\"Learn how we separate deployment from release with feature toggles at Productive.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/\" \/>\n<meta property=\"og:site_name\" content=\"Building Productive\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-30T09:55:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1901\" \/>\n\t<meta property=\"og:image:height\" content=\"797\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Davor Tvori\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Davor Tvori\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/\"},\"author\":{\"name\":\"Davor Tvori\u0107\",\"@id\":\"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7\"},\"headline\":\"Decoupling Deployment From Release With Feature Toggles\",\"datePublished\":\"2026-01-30T09:55:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/\"},\"wordCount\":7,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/\",\"url\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/\",\"name\":\"Decoupling Deployment From Release With Feature Toggles - Building Productive\",\"isPartOf\":{\"@id\":\"https:\/\/productive.io\/engineering\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png\",\"datePublished\":\"2026-01-30T09:55:30+00:00\",\"author\":{\"@id\":\"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7\"},\"description\":\"Learn how we separate deployment from release with feature toggles at Productive.\",\"breadcrumb\":{\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#primaryimage\",\"url\":\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png\",\"contentUrl\":\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png\",\"width\":1901,\"height\":797},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/productive.io\/engineering\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Decoupling Deployment From Release With Feature Toggles\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/productive.io\/engineering\/#website\",\"url\":\"https:\/\/productive.io\/engineering\/\",\"name\":\"Building Productive\",\"description\":\"Just another Productive Sites site\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/productive.io\/engineering\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7\",\"name\":\"Davor Tvori\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g\",\"caption\":\"Davor Tvori\u0107\"},\"url\":\"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Decoupling Deployment From Release With Feature Toggles - Building Productive","description":"Learn how we separate deployment from release with feature toggles at Productive.","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:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/","og_locale":"en_US","og_type":"article","og_title":"Decoupling Deployment From Release With Feature Toggles","og_description":"Learn how we separate deployment from release with feature toggles at Productive.","og_url":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/","og_site_name":"Building Productive","article_published_time":"2026-01-30T09:55:30+00:00","og_image":[{"width":1901,"height":797,"url":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png","type":"image\/png"}],"author":"Davor Tvori\u0107","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Davor Tvori\u0107","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#article","isPartOf":{"@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/"},"author":{"name":"Davor Tvori\u0107","@id":"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7"},"headline":"Decoupling Deployment From Release With Feature Toggles","datePublished":"2026-01-30T09:55:30+00:00","mainEntityOfPage":{"@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/"},"wordCount":7,"commentCount":0,"image":{"@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#primaryimage"},"thumbnailUrl":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png","articleSection":["Frontend"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/","url":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/","name":"Decoupling Deployment From Release With Feature Toggles - Building Productive","isPartOf":{"@id":"https:\/\/productive.io\/engineering\/#website"},"primaryImageOfPage":{"@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#primaryimage"},"image":{"@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#primaryimage"},"thumbnailUrl":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png","datePublished":"2026-01-30T09:55:30+00:00","author":{"@id":"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7"},"description":"Learn how we separate deployment from release with feature toggles at Productive.","breadcrumb":{"@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#primaryimage","url":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png","contentUrl":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png","width":1901,"height":797},{"@type":"BreadcrumbList","@id":"https:\/\/productive.io\/engineering\/decoupling-deployment-from-release-with-feature-toggles\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/productive.io\/engineering\/"},{"@type":"ListItem","position":2,"name":"Decoupling Deployment From Release With Feature Toggles"}]},{"@type":"WebSite","@id":"https:\/\/productive.io\/engineering\/#website","url":"https:\/\/productive.io\/engineering\/","name":"Building Productive","description":"Just another Productive Sites site","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/productive.io\/engineering\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7","name":"Davor Tvori\u0107","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g","caption":"Davor Tvori\u0107"},"url":"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/"}]}},"featured_image":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2023\/11\/BP@2x-1.png","category":"Frontend","_links":{"self":[{"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/posts\/796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/comments?post=796"}],"version-history":[{"count":10,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/posts\/796\/revisions"}],"predecessor-version":[{"id":925,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/posts\/796\/revisions\/925"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/media\/924"}],"wp:attachment":[{"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/media?parent=796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/categories?post=796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/tags?post=796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}