![Votre guide sur Feature Flags](png/376x244_wave2_card-1024x665.png)
Feature Flags : Qu’est-ce que c’est et comment les utiliser ?
Feature Flags, devenues incontournables pour les équipes DevOps et de développement logiciel, permettent de déployer des fonctionnalités rapidement et en toute sécurité. Ces outils, également appelés feature toggles ou feature flippers, reposent sur un concept simple : activer ou désactiver des fonctionnalités selon les besoins.
Ce guide explore les concepts de Feature Flags, leur utilité, leur mise en œuvre, ainsi que leurs avantages et inconvénients.
Qu’est-ce que Feature Flag ?
Feature Flags sont des outils de développement logiciel permettant de séparer le déploiement du code de la mise en production d’une fonctionnalité. Ils permettent de tester en production de manière sûre en activant ou désactivant des fonctionnalités via un simple if ou des arbres décisionnels plus complexes.
Ils se déclinent en plusieurs types, selon leur dynamisme et leur durée de vie.
Feature Flags : court terme vs long terme
Lorsque nous parlons de durée de vie, nous faisons référence à des Feature Flags conçus soit pour rester dans votre système pour une courte période, soit pour y rester pendant des années.
Par exemple, les Feature Flags peuvent être de courte durée pour déployer temporairement de nouveaux changements et tester en production, tandis que d’autres, comme les kill switches, peuvent rester dans le système plus longtemps. Par conséquent, vous devrez gérer différents toggles ou flags en fonction de la manière dont ils sont déployés.
Pour en savoir plus, lisez : Short vs Long-lived Feature Flags
Feature Flags : dynamiques vs statiques
En termes de dynamisme, qui fait référence à la fréquence à laquelle un flag doit être modifié pendant sa durée de vie, il existe deux catégories principales :
1. Flags dynamiques : Ils permettent de modifier leur valeur à l’exécution.
2. Flags statiques : Ils ne changent que par des modifications de code ou de fichiers de configuration.
Pour en savoir plus sur les différences entre les flags statiques et dynamiques, et où les stocker selon leur catégorie, consultez notre article sur les meilleures pratiques pour stocker vos Feature Flags.
Nous pouvons également diviser les Feature Flags en plusieurs catégories de toggles, qui doivent être gérés différemment. Autrement dit, vous devrez gérer divers toggles ou flags en fonction de leur déploiement. Les principales catégories sont :
- Release toggles
- Experimental toggles
- Operational toggles
- Permission toggles
Pour plus de détails sur ces différentes catégories, référez-vous à cet article.
Pourquoi utiliser des Feature Flags ?
Les Feature Flags peuvent être employés dans une large gamme de cas d’usage, des plus simples aux plus avancés, car diverses équipes, telles que celles d’ingénierie, de DevOps et de production, ont reconnu leurs avantages dans leur stratégie de déploiement logiciel.
Déployer à tout moment
Avec les Feature Flags, vous pouvez déployer à tout moment en séparant le déploiement du code de la mise en production. Ainsi, seules certaines parties de votre fonctionnalité sont activées, tandis que les modifications incomplètes peuvent être désactivées via un toggle, les rendant invisibles pour les utilisateurs.
Tester en production
Les Feature Flags offrent une méthode infaillible et moins risquée pour tester en production sur des utilisateurs réels. Cela vous aidera à obtenir des retours précieux de vos utilisateurs les plus pertinents, garantissant des produits de haute qualité. Les Feature Flags permettent alors de réaliser des tests A/B de vos fonctionnalités dans des environnements réels plus rapidement que jamais.
Livraison progressive
Lorsque vous avez une fonctionnalité prête à être mise en production, vous contrôlez quel sous-ensemble d’utilisateurs a accès à cette fonctionnalité grâce à des déploiements progressifs. La livraison progressive peut être mise en œuvre à l’aide de techniques telles que les canary releases ou les ring deployments.
Ciblage des utilisateurs
Les Feature Flags vous donnent le pouvoir de choisir vos utilisateurs. Il existe plusieurs méthodes pour cibler les utilisateurs en fonction de vos objectifs. Par exemple, vous pouvez sélectionner un groupe « élite » pour un accès anticipé à une fonctionnalité, ou demander aux utilisateurs de s’inscrire volontairement via des tests bêta. Les techniques les plus couramment utilisées pour un déploiement progressif incluent le ring deployment, les tests canary et le dark launch. De même, vous pouvez bloquer l’accès à certains utilisateurs, par exemple d’un pays ou d’une organisation spécifique.
Kill switch
Parfois, lors de tests en production, une fonctionnalité peut ne pas fonctionner comme prévu. Les Feature Flags peuvent être utilisés comme kill switches pour désactiver ces fonctionnalités défectueuses jusqu’à ce que le problème soit analysé et corrigé. Cela est particulièrement utile pour les fonctionnalités en fin de vie (sunsetting), qui ne sont plus utilisées et doivent être retirées pour éviter l’accumulation de dette technique.
Défis des Feature Flags
Même si les Feature Flags apportent de nombreux avantages, ils présentent aussi des défis.
1. Complexité accrue
Au fil du temps, la gestion des Feature Flags peut devenir complexe, notamment avec des systèmes internes qui manquent de sophistication.
2. Code désordonné et coordination difficile
L’accumulation de Feature Flags peut entraîner un code désordonné avec des déclarations conditionnelles éparpillées, rendant le système difficile à déboguer.
3. Dette technique
Si des flags inutilisés restent dans le système, cela conduit à une accumulation de dette technique. Les flags doivent donc être nettoyés une fois qu’ils ne sont plus actifs.
Avantages des Feature Flags
Il ne fait aucun doute que les Feature Flags sont devenus indispensables pour déployer de nouvelles fonctionnalités rapidement et en toute sécurité.
Disposer d’un système de gestion efficace des Feature Flags peut aider à rationaliser les processus de déploiement. Voici quelques-unes des façons dont ils peuvent apporter de la valeur à vos processus de développement et de mise en production logicielle.
1. Livraison continue
Les Feature Flags permettent de pratiquer un développement basé sur le tronc (trunk-based development) sans les problèmes liés aux branches de longue durée.
2. Augmentation de la cadence de production
Les Feature Flags permettent des tests en production sans risque, accélérant les déploiements et réduisant les bogues.
3. Expérimentation continue
Les Feature Flags permettent de valider fréquemment les modifications en testant sur un sous-ensemble d’utilisateurs et en mesurant les performances.
4. Réduction des risques
En dissociant le déploiement du code de la mise en production, les Feature Flags réduisent les impacts des bogues en production.
5. Rollback rapide
Désactivez facilement une fonctionnalité défectueuse à l’aide d’un kill switch.
6. Accès anticipé
Offrez des fonctionnalités aux early adopters pour collecter des retours précieux avant un déploiement plus large.
7. Contournement des validations des app stores
Testez de nouvelles versions sur des segments réduits sans attendre l’approbation des app stores.
Intégration des Feature Flags dans le cycle de développement logiciel
Le développement logiciel suit généralement une série d’étapes ou de phases pour produire des logiciels de haute qualité, dans le cadre du cycle de vie du développement logiciel (Software Development Life Cycle ou SDLC). Les phases incluses dépendent de la méthodologie utilisée, mais les principes fondamentaux du SDLC restent plus ou moins les mêmes. Pour plus d’informations sur le cycle de vie du logiciel, vous pouvez consulter notre article sur les différentes étapes du SDLC dans les méthodologies traditionnelles et Agile.
En se basant sur cela, au début de tout processus de développement logiciel, les équipes et les organisations doivent décider de la méthodologie qu’elles adopteront pour garantir des produits de haute qualité. Waterfall et Agile sont deux des méthodes les plus populaires, bien qu’Agile gagne rapidement en popularité par rapport à Waterfall.
- La méthodologie Waterfall est un modèle plus traditionnel. Elle adopte une approche linéaire du développement logiciel, où chaque phase se déroule de manière descendante, comme une cascade, vers la suivante ; chaque étape doit être complétée avant que la suivante ne commence.
- En revanche, la méthodologie Agile adopte une approche basée sur le travail en équipe. Au lieu de planifier l’ensemble du projet d’un seul coup, elle divise le développement en petits lots réalisés en plusieurs étapes. Ce qui rend le développement Agile innovant, c’est qu’il déplace l’accent vers l’utilisateur, en s’appuyant sur un très haut niveau d’implication du client tout au long du projet.
![](png/image-14.png)
Cependant, l’intégration des Feature Flags dans vos déploiements est ce qui différencie une roadmap Agile d’une roadmap Waterfall, vous permettant de rester concentré sur vos activités principales alignées sur les besoins des utilisateurs. Découvrez pourquoi une méthodologie Agile est idéale pour le développement logiciel moderne et pourquoi il est essentiel d’intégrer les Feature Flags dans votre roadmap Agile afin de garder vos produits sur la bonne voie.
Voici deux modèles de gestion des branches qui illustrent différentes stratégies pour le déploiement et l’utilisation des Feature Flags :
1. Développement basé sur le tronc (Trunk-Based Development)
Ce modèle repose sur une collaboration des développeurs sur une branche unique, où les modifications sont fréquentes et limitées en taille. Cela réduit les branches de longue durée et évite le “merge hell”. C’est une bonne stratégie pour accélérer la mise en production des fonctionnalités.
2. Branchement des fonctionnalités (Feature Branching)
Les développeurs travaillent sur des branches séparées et fusionnent leurs modifications dans la branche principale une fois terminées. Ce modèle est efficace pour gérer des projets à grande échelle impliquant de nombreux développeurs.
Feature Flags : meilleures pratiques
Pour utiliser efficacement les Feature Flags, voici quelques pratiques essentielles à considérer et à mettre en œuvre :
1. Contrôler l’accès aux flags
Configurez un journal pour suivre les modifications effectuées et par qui. Cela réduit la dépendance entre les équipes produit et ingénierie tout en favorisant la transparence et la productivité.
2. Utiliser une convention de nommage standardisée
Sans convention de nommage, plusieurs membres de l’équipe pourraient attribuer des noms identiques à des flags différents, ce qui risque de causer des erreurs et des perturbations.
3. Gérer les toggles différemment
Chaque type de Feature Flag (par exemple, release toggle vs kill switch) doit être géré selon son utilisation spécifique.
4. Effectuer un nettoyage régulier des flags
Supprimez périodiquement les flags qui ne sont plus utilisés pour éviter l’accumulation de dette technique.
Choisir une plateforme de gestion des Feature Flags
Si vous optez pour une solution tierce, choisir la meilleure plateforme de gestion des Feature Flags peut être un défi. Consultez notre section de comparaison des services de Feature Flag pour découvrir comment AB Tasty se positionne par rapport à d’autres solutions.
AB Tasty est reconnu comme un leader dans le rapport Forrester New Wave™ : Feature Management & Experimentation (Q2 2021). Il permet non seulement d’activer ou de désactiver des fonctionnalités, mais également de gérer entièrement les déploiements en enveloppant vos fonctionnalités dans des flags. Vous pouvez ensuite les déployer en fonction des valeurs de flags attribuées à différents segments d’utilisateurs et prendre des décisions basées sur les métriques et KPI de votre choix.
Pour commencer avec la fonctionnalité côté serveur d’AB Tasty, consultez notre documentation.
![](png/image-5.png)
AB Tasty ne se contente pas de vous permettre d’activer ou de désactiver des fonctionnalités, mais vous donne un contrôle total sur vos déploiements. En enveloppant vos fonctionnalités dans des Feature Flags, vous pouvez les déployer en fonction des valeurs de flags spécifiques attribuées à différents segments d’utilisateurs. Cela vous permet de prendre des décisions éclairées basées sur les métriques et KPI de votre choix.
Pour plus d’informations sur l’utilisation de notre fonctionnalité côté serveur, consultez notre documentation pour vous aider à démarrer.
Comment implémenter des Feature Flags ?
Une implémentation typique de Feature Flags repose sur (1) un service de gestion qui définit le flag, (2) une requête au moment de l’exécution pour déterminer la valeur du flag, et (3) une structure de programmation if-else.
Il existe de nombreuses façons d’implémenter des Feature Flags. La méthode la plus simple et souvent le point de départ consiste à utiliser des instructions if/else directement dans votre code.
Vous pouvez également vous appuyer sur des projets open source, et de nombreuses bibliothèques sont disponibles pour votre langage de programmation préféré. Lisez-en plus sur les 10 principaux projets liés aux Feature Flags sur GitHub.
Cependant, les Feature Flags vont au-delà des simples états booléens pour inclure des instructions logiques plus complexes. Par conséquent, si vous souhaitez explorer des utilisations plus avancées, vous aurez besoin d’outils de gestion de Feature Flags plus complexes.
Avant de vous lancer dans l’implémentation des Feature Flags, il est important de prendre en compte les éléments suivants :
- Identifier les points problématiques : Il est important de considérer vos objectifs et les problèmes que vous essayez de résoudre dans votre processus de développement logiciel et en production.
- Déterminer vos cas d’utilisation : En d’autres termes, réfléchissez à pourquoi vous voulez utiliser des Feature Flags et qui, dans votre organisation en dehors des développeurs, les utilisera.
- Réfléchir à construire ou acheter : Il y a de nombreux facteurs à considérer pour décider si vous êtes mieux servi en construisant ou en achetant un système de gestion de Feature Flags.
Feature Flags FAQs
Qu’est-ce que les Feature Flags ?
Les Feature Flags sont une pratique de développement logiciel dont le but est d’activer ou de désactiver des fonctionnalités sans avoir besoin de déployer un nouveau code, permettant ainsi de séparer le déploiement du code de la mise en production des fonctionnalités.
Pourquoi utiliser un Feature Flag ?
Les Feature Flags permettent une livraison continue en autorisant les équipes à pratiquer le développement basé sur le tronc (trunk-based development) sans les risques des branches de longue durée et du fameux merge hell. Ils augmentent également la vitesse de développement en rendant les tests en production simples, permettant ainsi de valider en continu vos changements sur un sous-ensemble d’utilisateurs tout en réduisant les risques. Ils ne sont pas seulement utilisés par les équipes d’ingénierie, mais aussi par les équipes QA, produit et opérations.
Quelle est la différence entre Feature Toggles et Feature Flags ?
Les Feature Flags sont souvent appelés Feature Toggles, et vice versa. Cependant, on peut affirmer qu’à mesure que les Feature Toggles ont évolué d’un simple interrupteur on/off pour inclure davantage de cas d’utilisation, le terme Feature Flags est devenu plus approprié.
Les Feature Flags sont-ils identiques à la configuration à distance (Remote Config) ?
La configuration à distance peut être implémentée à travers des Feature Flags. Avec la configuration à distance, les fonctionnalités ajoutées à votre application mobile peuvent être enveloppées dans un Feature Flag et activées ou désactivées à distance pour décider qui voit les nouvelles fonctionnalités.
Les Feature Flags sont-ils différents des branches de fonctionnalités ?
Une branche de fonctionnalités (feature branch) est une copie de la base de code dans le tronc, où les développeurs peuvent apporter leurs modifications avant de les fusionner une fois terminées. Les Feature Flags permettent parfois de remplacer cela, en permettant de désactiver des changements inachevés tout en publiant les fonctionnalités terminées sans délai.
Les Feature Flags ne sont-ils pas simplement des tests A/B ?
Dans une certaine mesure. Les deux vous permettent de déployer avec plus de confiance. Avec un test A/B, vous pouvez mener des expérimentations et choisir quelle version de votre site web afficher à vos visiteurs. Cependant, vous pouvez également mener des tests A/B sur les fonctionnalités de votre site en utilisant des Feature Flags. Ici, vous pouvez créer deux variations de votre fonctionnalité pour un sous-ensemble d’utilisateurs, puis analyser comment l’expérience utilisateur diffère avec la nouvelle fonctionnalité.
Cela dit, les tests A/B ne sont pas la seule technique de test en production que vous pouvez implémenter en utilisant des Feature Flags, ils peuvent donc vous aider à exécuter des tests A/B, mais leurs usages vont bien au-delà de cela.