{"id":890,"date":"2022-11-23T14:51:11","date_gmt":"2022-11-23T13:51:11","guid":{"rendered":"https:\/\/affluences.com\/blog\/?p=890"},"modified":"2022-11-23T14:53:04","modified_gmt":"2022-11-23T13:53:04","slug":"feature-flags-trunk-based-development","status":"publish","type":"post","link":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/","title":{"rendered":"Feature Flags et Trunk Based Development"},"content":{"rendered":"\n<p>Chez Affluences, nous utilisons pour la plupart de nos projets <a href=\"https:\/\/www.atlassian.com\/git\/tutorials\/comparing-workflows\/gitflow-workflow\" target=\"_blank\" rel=\"noreferrer noopener\">le workflow gitflow<\/a> pour la gestion de nos r\u00e9pos. Avec l&rsquo;arriv\u00e9e de nouvelles personnes dans l&rsquo;\u00e9quipe, nous avons \u00e9t\u00e9 confront\u00e9s \u00e0 deux principaux probl\u00e8mes qui ont impact\u00e9 notre capacit\u00e9 \u00e0 livrer des fonctionnalit\u00e9s toujours aussi rapidement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Probl\u00e8mes rencontr\u00e9s par nos \u00e9quipes<\/h2>\n\n\n\n<p>Lors du processus de d\u00e9veloppement de nos nouvelles fonctionnalit\u00e9s, nous nous sommes heurt\u00e9s \u00e0 la probl\u00e9matique de ne pas avoir tous nos d\u00e9veloppements sur nos environnements de tests et de production sans avoir \u00e0 d\u00e9ployer une nouvelle version. <\/p>\n\n\n\n<p>Exemple avec le sc\u00e9nario suivant :\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Nous compilons et d\u00e9ployons une nouvelle version embarquant une nouvelle fonctionnalit\u00e9 sur notre environnement de test<\/li><li>Nous compilons et d\u00e9ployons une autre version embarquant elle aussi des nouveaut\u00e9s.<\/li><li>La premi\u00e8re version n&rsquo;est par cons\u00e9quent plus disponible.<\/li><\/ul>\n\n\n\n<p>Un jonglage entre diff\u00e9rentes versions \u00e9tait donc n\u00e9cessaire !<\/p>\n\n\n\n<p>Autre probl\u00e8me rencontr\u00e9 : lorsque nous d\u00e9veloppons de nouvelles fonctionnalit\u00e9s en parall\u00e8le, il arrive que les diff\u00e9rentes branches utilis\u00e9es pour chacune de ces fonctionnalit\u00e9s se d\u00e9synchronisent, notamment lors du d\u00e9veloppement de fonctionnalit\u00e9s importantes. Les merges de branche \u00e9taient devenues tr\u00e8s compliqu\u00e9es avec une gestion des conflits quasi syst\u00e9matique.<\/p>\n\n\n\n<p>Partant de ce constat, nous avons \u00e9tudi\u00e9 les diff\u00e9rentes options de gestion d&rsquo;un r\u00e9po et avons d\u00e9cid\u00e9 d&rsquo;impl\u00e9menter celle qui permettrait de solutionner les probl\u00e8mes d\u00e9crits pr\u00e9c\u00e9demment : le Trunk Based Development (TBD) associ\u00e9 \u00e0 des Feature Flags (FF).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Trunk Based Development et Feature Flags<\/h2>\n\n\n\n<p>Il s&rsquo;agit <a href=\"https:\/\/www.atlassian.com\/continuous-delivery\/continuous-integration\/trunk-based-development\" target=\"_blank\" rel=\"noreferrer noopener\">d&rsquo;un <strong>workflow git<\/strong><\/a> qui se base sur une seule branche principale qui contiendra le code qui doit \u00eatre pr\u00eat et livrable en prod \u00e0 tout moment.<br>Tout nouveau d\u00e9veloppement doit partir de cette branche et les branches de d\u00e9veloppements ne doivent pas avoir une dur\u00e9e de vie de plus de <strong>3 jours<\/strong> pour garder la synchronisation optimale des branches.<\/p>\n\n\n\n<p>Ce paradigme est g\u00e9n\u00e9ralement associ\u00e9 \u00e0 l&rsquo;utilisation de Features Flags : il s&rsquo;agit d&rsquo;un processus de d\u00e9veloppement qui utilise des variables conserv\u00e9es dans un endroit externe \u00e0 l&rsquo;application. Elles sont r\u00e9cup\u00e9rables de fa\u00e7on dynamique et servent \u00e0 activer ou d\u00e9sactiver des fonctionnalit\u00e9s impactant directement les environnements sans avoir \u00e0 <strong>compiler ou ni d\u00e9ployer du code<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mise en place de ces concepts<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Trunk Based Development<\/h3>\n\n\n\n<p class=\"has-text-align-left\">Le concept est simple : toutes les nouvelles fonctionnalit\u00e9s partent de la branche principale ! Celles-ci doivent \u00eatre merge \u00e0 nouveau sur la branche principale le plus vite possible pour \u00e9viter les conflits.<br><br><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"337\" src=\"https:\/\/lh6.googleusercontent.com\/u1QG_mDxa5M0guQsbEkAsMHqj4sEnZ5XDGINGwx_7BVSoZY2ikJFSgkuzQq0QESMh23-VR9Bv3EAnLH5IlfNvli1KSDY9-Dhsu8EtJAR86bSL0EuEg1X7g3eKpBufX3poT30Jdb9dWv_5WDMy4pY6VpgZTdgOe684U304WL8Kp7DqJwGf2OZArCVf28j2w\"><\/p>\n\n\n\n<p class=\"has-text-align-left\">Cette nouvelle philosophie nous a demand\u00e9 de revoir nos m\u00e9thodes de travail au quotidien : Nous essayons d\u00e9sormais de d\u00e9couper nos t\u00e2ches au maximum afin que chacune d&rsquo;entre elles soient les plus atomiques possibles de sorte \u00e0 ce qu&rsquo;elles soient les plus ind\u00e9pendantes les unes des autres.<\/p>\n\n\n\n<p>Nous avons \u00e9galement revu nos pratiques en mati\u00e8re de Merge request et de Code Review : pour qu&rsquo;une branche soit active le moins de temps possible, il faut que les revues de code soient effectu\u00e9es le plus rapidement possible. Cela n&rsquo;est possible que lorsque les Merge Request sont suffisamment petites et que l&rsquo;\u00e9quipe partage les m\u00eames conventions de d\u00e9veloppement pour se concentrer sur le fond plut\u00f4t que sur la forme du code produit.<\/p>\n\n\n\n<p><br>Enfin, nous avons renforc\u00e9 notre strat\u00e9gie de tests automatis\u00e9s pour nous assurer que la branche principale ne contient pas de code d\u00e9fectueux. Etant donn\u00e9 que c\u2019est la seule qui contient le code livrable en production, nous avons renforc\u00e9 notre batterie de tests, notamment en ajoutant des tests sur les composants front Angular que nous d\u00e9veloppons.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Feature Flags<\/h3>\n\n\n\n<p class=\"has-text-align-left\">Dans la mesure o\u00f9 nous utilisons la suite Gitlab, nous avons d\u00e9cid\u00e9 d&rsquo;utiliser <a href=\"https:\/\/docs.gitlab.com\/ee\/operations\/feature_flags.html\" target=\"_blank\" rel=\"noreferrer noopener\">les fonctionnalit\u00e9s d\u00e9j\u00e0 disponibles dans cet outil<\/a>. En effet, la plateforme met \u00e0 disposition une interface graphique pour la gestion des Features Flags :<br><br><img loading=\"lazy\" decoding=\"async\" width=\"563\" height=\"287\" src=\"https:\/\/lh5.googleusercontent.com\/dL_csjBqVrOlmQ38ed5cC4ES99BH_EqPMStuDM7emWjIssaEtmWs4edusfpQpeIio92VCikg-jaga3wgAhS_WDItrK28KiZZbBqrhoV9-As2zGuBF7oP0P-U39EXn3ogzlcYy5Dutntki9h_tvAg_hiSSw7Vr0XMU9vgSL7R0HA1cSZpViDVzVQ-OvTaiA\"><\/p>\n\n\n\n<p>Une fois les variables configur\u00e9es, il faut que notre application soit en mesure de les r\u00e9cup\u00e9rer pour les exploiter. Pour cela, Gitlab propose d\u2019utiliser <a href=\"https:\/\/www.getunleash.io\/\"><strong>Unleash<\/strong><\/a> qui agit en tant que proxy entre Gitlab et notre application. Celle-ci se connecte ainsi \u00e0 ce composant pour r\u00e9cup\u00e9rer les Feature Flags configur\u00e9s et activer ou d\u00e9sactiver des fonctionnalit\u00e9s de mani\u00e8re dynamique.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/TGJpnJpB9loDAGul3tXrRf5jvkstCuw7zaskIGUPSc22Um3Y-NG9qZ1GW3gIgsHFJpq5m_QPEFCU3vYI9PwbIPUfuASShv14xidelZZWe6HICg4RGJd_bGy6cBKFVQ1Gq04uJtonmTQjVV7_x7xXoqhzfFG9DljuvuViMja1jaeJfNn1zFl4Cq8JpOxrTA\" alt=\"\" width=\"689\" height=\"426\"\/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Avantages et perspectives<\/h2>\n\n\n\n<p>En combinant les deux solutions, nous obtenons un syst\u00e8me efficace et solide :&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Moins de stress sur la gestion du code<\/li><li>Gestion des fonctionnalit\u00e9s disponibles sur l\u2019application en temps r\u00e9el avec la possibilit\u00e9 de filtrer par groupe d&rsquo;utilisateurs ou par attributs<\/li><li>Am\u00e9lioration de notre processus de d\u00e9veloppement et de la qualit\u00e9 de nos productions.<\/li><\/ul>\n\n\n\n<p>Nous avons appliqu\u00e9 avec succ\u00e8s ce principe sur notre plus grosse application sur laquelle plusieurs d\u00e9veloppeurs travaillent r\u00e9guli\u00e8rement en m\u00eame temps. Notre ambition est d\u00e9sormais de r\u00e9pliquer ce mode de fonctionnement sur d&rsquo;autres applications et micro-services que nous produisons afin d&rsquo;homog\u00e9n\u00e9iser nos pratiques de d\u00e9veloppement au sein de l&rsquo;\u00e9quipe tech et de b\u00e9n\u00e9ficier des avantages que procurent ces proc\u00e9d\u00e9s !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chez Affluences, nous utilisons pour la plupart de nos projets le workflow gitflow pour la gestion de nos r\u00e9pos. Avec l&rsquo;arriv\u00e9e de nouvelles personnes dans l&rsquo;\u00e9quipe, nous avons \u00e9t\u00e9 confront\u00e9s \u00e0 deux principaux probl\u00e8mes qui ont impact\u00e9 notre capacit\u00e9 \u00e0 livrer des fonctionnalit\u00e9s toujours aussi rapidement. Probl\u00e8mes rencontr\u00e9s par nos \u00e9quipes Lors du processus de [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":891,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[353],"tags":[],"class_list":["post-890","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-les-dessous-de-la-tech"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Feature Flags et Trunk Based Development : la mise en place d&#039;Affluences<\/title>\n<meta name=\"description\" content=\"On vous explique comment l&#039;\u00e9quipe technique d&#039;Affluences a mis en place ces 2 concepts : feature flags et trunk based development !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Feature Flags et Trunk Based Development : la mise en place d&#039;Affluences\" \/>\n<meta property=\"og:description\" content=\"On vous explique comment l&#039;\u00e9quipe technique d&#039;Affluences a mis en place ces 2 concepts : feature flags et trunk based development !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/\" \/>\n<meta property=\"og:site_name\" content=\"Le blog Affluences\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Affluencesapp\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-23T13:51:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-23T13:53:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/affluences.com\/wp-content\/uploads\/2022\/11\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2086\" \/>\n\t<meta property=\"og:image:height\" content=\"1337\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Communication\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Affluences_App\" \/>\n<meta name=\"twitter:site\" content=\"@Affluences_App\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Communication\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\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:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/\"},\"author\":{\"name\":\"Communication\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/person\\\/4791a989685bb628373b2af9f99550f3\"},\"headline\":\"Feature Flags et Trunk Based Development\",\"datePublished\":\"2022-11-23T13:51:11+00:00\",\"dateModified\":\"2022-11-23T13:53:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/\"},\"wordCount\":886,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg\",\"articleSection\":[\"Dessous de la tech\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/\",\"name\":\"Feature Flags et Trunk Based Development : la mise en place d'Affluences\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg\",\"datePublished\":\"2022-11-23T13:51:11+00:00\",\"dateModified\":\"2022-11-23T13:53:04+00:00\",\"description\":\"On vous explique comment l'\u00e9quipe technique d'Affluences a mis en place ces 2 concepts : feature flags et trunk based development !\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/#primaryimage\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg\",\"contentUrl\":\"https:\\\/\\\/affluences.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/11\\\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg\",\"width\":2086,\"height\":1337},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/feature-flags-trunk-based-development\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/affluences.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Feature Flags et Trunk Based Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/\",\"name\":\"Le blog d Affluences\",\"description\":\"Tous nos conseils et astuces\",\"publisher\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/affluences.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#organization\",\"name\":\"Affluences\",\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.affluences.com\\\/wp-content\\\/uploads\\\/2017\\\/08\\\/logo_affluences-e1531737183907.png\",\"contentUrl\":\"https:\\\/\\\/blog.affluences.com\\\/wp-content\\\/uploads\\\/2017\\\/08\\\/logo_affluences-e1531737183907.png\",\"width\":512,\"height\":512,\"caption\":\"Affluences\"},\"image\":{\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Affluencesapp\",\"https:\\\/\\\/x.com\\\/Affluences_App\",\"https:\\\/\\\/www.instagram.com\\\/affluences_app\\\/?hl=fr\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/affluences-app\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCwPTgo4QaCais3IytxOjh0w\",\"https:\\\/\\\/fr.wikipedia.org\\\/wiki\\\/Affluences\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/affluences.com\\\/blog\\\/#\\\/schema\\\/person\\\/4791a989685bb628373b2af9f99550f3\",\"name\":\"Communication\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g\",\"caption\":\"Communication\"},\"url\":\"https:\\\/\\\/affluences.com\\\/blog\\\/author\\\/melisande-vialard\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Feature Flags et Trunk Based Development : la mise en place d'Affluences","description":"On vous explique comment l'\u00e9quipe technique d'Affluences a mis en place ces 2 concepts : feature flags et trunk based development !","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:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/","og_locale":"fr_FR","og_type":"article","og_title":"Feature Flags et Trunk Based Development : la mise en place d'Affluences","og_description":"On vous explique comment l'\u00e9quipe technique d'Affluences a mis en place ces 2 concepts : feature flags et trunk based development !","og_url":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/","og_site_name":"Le blog Affluences","article_publisher":"https:\/\/www.facebook.com\/Affluencesapp","article_published_time":"2022-11-23T13:51:11+00:00","article_modified_time":"2022-11-23T13:53:04+00:00","og_image":[{"width":2086,"height":1337,"url":"https:\/\/affluences.com\/wp-content\/uploads\/2022\/11\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg","type":"image\/jpeg"}],"author":"Communication","twitter_card":"summary_large_image","twitter_creator":"@Affluences_App","twitter_site":"@Affluences_App","twitter_misc":{"\u00c9crit par":"Communication","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/#article","isPartOf":{"@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/"},"author":{"name":"Communication","@id":"https:\/\/affluences.com\/blog\/#\/schema\/person\/4791a989685bb628373b2af9f99550f3"},"headline":"Feature Flags et Trunk Based Development","datePublished":"2022-11-23T13:51:11+00:00","dateModified":"2022-11-23T13:53:04+00:00","mainEntityOfPage":{"@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/"},"wordCount":886,"commentCount":0,"publisher":{"@id":"https:\/\/affluences.com\/blog\/#organization"},"image":{"@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/#primaryimage"},"thumbnailUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/11\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg","articleSection":["Dessous de la tech"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/","url":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/","name":"Feature Flags et Trunk Based Development : la mise en place d'Affluences","isPartOf":{"@id":"https:\/\/affluences.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/#primaryimage"},"image":{"@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/#primaryimage"},"thumbnailUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/11\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg","datePublished":"2022-11-23T13:51:11+00:00","dateModified":"2022-11-23T13:53:04+00:00","description":"On vous explique comment l'\u00e9quipe technique d'Affluences a mis en place ces 2 concepts : feature flags et trunk based development !","breadcrumb":{"@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/#primaryimage","url":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/11\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg","contentUrl":"https:\/\/affluences.com\/blog\/wp-content\/uploads\/2022\/11\/feature-flags-trunk-based-development-scaled-e1669211518406.jpg","width":2086,"height":1337},{"@type":"BreadcrumbList","@id":"https:\/\/affluences.com\/blog\/feature-flags-trunk-based-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/affluences.com\/"},{"@type":"ListItem","position":2,"name":"Feature Flags et Trunk Based Development"}]},{"@type":"WebSite","@id":"https:\/\/affluences.com\/blog\/#website","url":"https:\/\/affluences.com\/blog\/","name":"Le blog d Affluences","description":"Tous nos conseils et astuces","publisher":{"@id":"https:\/\/affluences.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/affluences.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/affluences.com\/blog\/#organization","name":"Affluences","url":"https:\/\/affluences.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/affluences.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/blog.affluences.com\/wp-content\/uploads\/2017\/08\/logo_affluences-e1531737183907.png","contentUrl":"https:\/\/blog.affluences.com\/wp-content\/uploads\/2017\/08\/logo_affluences-e1531737183907.png","width":512,"height":512,"caption":"Affluences"},"image":{"@id":"https:\/\/affluences.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Affluencesapp","https:\/\/x.com\/Affluences_App","https:\/\/www.instagram.com\/affluences_app\/?hl=fr","https:\/\/www.linkedin.com\/company\/affluences-app\/","https:\/\/www.youtube.com\/channel\/UCwPTgo4QaCais3IytxOjh0w","https:\/\/fr.wikipedia.org\/wiki\/Affluences"]},{"@type":"Person","@id":"https:\/\/affluences.com\/blog\/#\/schema\/person\/4791a989685bb628373b2af9f99550f3","name":"Communication","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4f0ca5379bda977b18043f3cdb63a882a87096c96317127eb6f83f033b2a5d2b?s=96&d=mm&r=g","caption":"Communication"},"url":"https:\/\/affluences.com\/blog\/author\/melisande-vialard\/"}]}},"_links":{"self":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/890","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/comments?post=890"}],"version-history":[{"count":2,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/890\/revisions"}],"predecessor-version":[{"id":894,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/posts\/890\/revisions\/894"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/media\/891"}],"wp:attachment":[{"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/media?parent=890"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/categories?post=890"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/affluences.com\/blog\/wp-json\/wp\/v2\/tags?post=890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}