Close

Feature flags

Comment exposer progressivement vos fonctionnalités grâce à des feature flags.

Portrait de Ian Buchanan
Ian Buchanan

Principal Solutions Engineer


Si vous planifiez d'intégrer continuellement des fonctionnalités à votre application lors du développement, vous pouvez envisager d'utiliser des feature flags. Après tout, il se peut que vous souhaitiez activer/désactiver des fonctionnalités et les masquer. Vous pourriez également vouloir dévoiler différentes variations de fonctionnalités aux utilisateurs afin de découvrir la plus adaptée. Les feature flags, également appelés « toggles », « bits », « flippers » ou « switches » vous permettent de faire cela et plus encore.

Qu'est-ce que les feature flags ?


Les feature flags (également connus sous le nom de feature toggles) sont une technique d'ingénierie logicielle qui permet d'activer et de désactiver certaines fonctionnalités pendant l'exécution, sans déployer de nouveau code. Les équipes peuvent ainsi apporter des changements sans avoir à pusher du code supplémentaire et expérimenter de façon plus contrôlée sur le cycle de vie des fonctionnalités. Pour cette raison, les feature flags ouvrent la voie à de nombreux workflows novateurs qui sont incroyablement utiles à un style de gestion Agile et aux environnements de CI/CD.

Pendant le développement, les ingénieurs logiciels encapsulent les chemins de code souhaités dans un feature flag. Voici un exemple de feature flag de base codé en JavaScript :

 if(featureFlags[‘new-cool-feature’] == true){
     renderNewCoolFeature();
 } 

Ce code illustre un énoncé simple qui vérifie si la fonctionnalité « new-cool-feature » est activée. Même avec des frameworks et des outils avancés qui aident à gérer les données de flag ou l'ajout et la suppression du nouveau chemin logique, les feature flags sont essentiellement des instructions « if ». Par conséquent, cet outil binaire d'activation/de désactivation est similaire aux synonymes.

Découvrir la solution

Développez et exploitez des logiciels grâce à Open DevOps

Ressources connexes

En savoir plus sur le développement basé sur le tronc

Avantages des feature flags


Diagramme mettant en évidence le développement basé sur le feature flag

À un niveau fondamental, les feature flags permettent de commiter le code et de le déployer en production à l'état inactif, puis de l'activer ultérieurement. Les équipes ont ainsi plus de contrôle sur l'expérience utilisateur dans le produit final. Les équipes de développement peuvent choisir quand et à quels utilisateurs le nouveau code est livré.

Validation de la fonctionnalité

Les développeurs peuvent tirer parti des feature flags pour effectuer des « déploiements souples » des nouvelles fonctionnalités produit. De nouvelles fonctionnalités peuvent être développées grâce à l'intégration immédiate de feature flags dans le cadre de la livraison attendue. Le feature flag peut être défini comme « inactif » par défaut de sorte qu'une fois le code déployé, il reste inactif lors de la production et la nouvelle fonctionnalité sera désactivée jusqu'à ce que le feature flag soit explicitement activé. Les équipes choisissent ensuite quand activer le feature flag, ce qui active le code, et permet aux équipes de procéder au QA et de vérifier que le code fonctionne comme prévu. Si l'équipe identifie un problème au cours de ce processus, elle peut immédiatement désactiver le feature flag pour désactiver le nouveau code et minimiser l'exposition de l'utilisateur au problème.

Réduction des risques

En s'inspirant de l'idée des déploiements souples évoquée ci-dessus, les équipes assidues peuvent utiliser les feature flags ainsi que la surveillance et les métriques du système en réponse à tout problème intermittent observable. Par exemple, si une application connaît un pic de trafic et que le système de surveillance signale une hausse des tickets, l'équipe peut utiliser des feature flags pour désactiver les fonctionnalités peu performantes.

Modifie le comportement du système sans changements disruptifs

Les feature flags peuvent être utilisés pour limiter les scénarios compliqués d'intégration de code et de déploiement. De nouvelles fonctionnalités compliquées ou un refactoring sensible peuvent être difficiles à intégrer dans la branche de production principale d'un dépôt. C'est encore plus compliqué si plusieurs développeurs travaillent sur des parties de la base de code qui se chevauchent.

Des feature flags peuvent être utilisés pour isoler de nouveaux changements quand le code stable connu ne change pas. Les développeurs peuvent éviter les branches de fonctionnalités au long cours en effectuant fréquemment des commits dans la branche principale d'un dépôt derrière le flag de fonctionnalité. Lorsque le nouveau code est prêt, aucun scénario de merge et de déploiement collaboratif disruptif n'est à prévoir ; l'équipe peut basculer le feature flag pour activer le nouveau système.

Cas d'usage des feature flags


Diagramme de feature flag

Les feature flags constituent un utilitaire innovant, qui offre aux équipes travailleuses une variété de cas d'usage créatifs. Les exemples suivants mettent en évidence certaines applications populaires des feature flags dans un environnement Agile.

Tests de produits

Les feature flags peuvent être utilisés pour livrer progressivement de nouvelles fonctionnalités de produit. Il peut être difficile de savoir d'emblée si une nouvelle fonctionnalité proposée sera adoptée par les utilisateurs et si le retour sur investissement en vaut la peine. Les équipes peuvent livrer une nouvelle fonctionnalité du produit ou une idée partielle de la fonctionnalité dans un feature flag et la déployer auprès d'un sous-ensemble d'utilisateurs pour recueillir des commentaires. Le sous-ensemble d'utilisateurs peut être constitué d'utilisateurs intensifs qui sont ravis de faire des tests bêta et des révisions. Si l'idée du nouveau produit s'avère être un succès, l'équipe de développement peut alors déployer le feature flag auprès d'une plus grande base d'utilisateurs. Si, au contraire, l'idée s'avère être un échec, l'équipe de développement peut facilement désactiver le feature flag et le retirer ultérieurement de la base de code.

Mener des expériences

Les expériences ou tests A/B sont un exemple de feature flag principal. Dans leur forme la plus simple, les feature flags permettent d'activer et de désactiver l'état d'une fonctionnalité. Les feature flags avancés utilisent plusieurs flags à la fois pour activer différentes expériences pour des sous-ensembles d'utilisateurs. Par exemple, imaginez que vous divisez votre base d'utilisateurs en tiers. Chaque tiers reçoit son flag unique et son expérience utilisateur. Vous pouvez ensuite mesurer les performances de ces trois flags l'un par rapport à l'autre pour déterminer la version finale commitée.

Migrations

Il arrive qu'une application ait besoin d'une migration de données qui nécessite des changements du code d'application dépendant. Ces scénarios sont des tâches de déploiement sensibles et multi-phases. Un champ de base de données peut être modifié, supprimé ou ajouté dans une base de données d'application. Si le code d'application n'est pas préparé pour cette modification de base de données, des échecs et des erreurs surviennent. Si cela se produit, cela nécessite un déploiement coordonné entre les modifications de la base de données et le code d'application.

Les feature flags contribuent à atténuer la complexité de ce scénario en permettant aux équipes de préparer à l'avance les changements d'application dans un feature flag. Une fois que l'équipe a apporté les changements à la base de données, elle peut immédiatement basculer le feature flag pour qu'il corresponde au code d'application. Cela élimine les risques et les délais liés à l'attente du déploiement du nouveau code d'application et à l'échec éventuel du déploiement qui désynchronise l'application de la base de données.

Lancements de type « canary »

Dans ce contexte, le terme « canary » fait référence à une ancienne pratique morbide où les mineurs de charbon envoyaient des canaris dans la mine pour détecter le monoxyde de carbone. Les oiseaux ont un métabolisme plus élevé et une respiration rapide, ils succombaient au monoxyde de carbone avant les mineurs.

Les lancements « canary » dans le développement logiciels se produisent lorsqu'une nouvelle fonctionnalité ou un changement de code est déployé auprès d'un petit sous-ensemble d'utilisateurs afin de surveiller son comportement avant de le livrer à l'ensemble des utilisateurs. Si la nouvelle fonctionnalité présente des signes d'erreur ou d'échec, elle est automatiquement annulée. Les feature flags sont essentiels à ce processus, car le public est limité et les fonctionnalités peuvent facilement être désactivées.

Pannes système

Un feature flag peut également être utilisé comme outil de panne système. Une application web peut utiliser un feature flag pour « désactiver » l'ensemble du site web à des fins de maintenance ou de temps d'arrêt. Le feature flag peut être instrumenté dans l'ensemble de la base de code pour pusher les transactions sensibles et afficher le contenu des pannes aux utilisateurs finaux. Cela peut être très utile lors de déploiements sensibles ou si un problème inattendu est découvert et doit être résolu de toute urgence. Les équipes ont alors la confiance et la capacité nécessaires pour procéder à une panne contrôlée si nécessaire.

Déploiement continu

Les feature flags peuvent être utilisés en tant que composant à part entière pour développer un système de déploiement réellement continu. Dans le déploiement continu, un pipeline automatisé prend le nouveau code des développeurs et le déploie automatiquement en production auprès des utilisateurs finaux. Le déploiement continu dépend de couches de tests automatisés qui vérifient que le nouveau code se comporte comme prévu par rapport à une spécification correspondante au fur et à mesure qu'il avance dans le pipeline.

Les feature flags rendent le déploiement continu plus sûr en séparant les changements de code de la révélation des fonctionnalités aux utilisateurs. Le nouveau code peut être automatiquement être mergé et déployé en production, puis attendre derrière un feature flag. Le système de déploiement continu peut surveiller le comportement des utilisateurs ainsi que le trafic, puis automatiquement activer le feature flag. Inversement, le système de déploiement continu peut surveiller le nouveau code de feature flag pour vérifier s'il se comporte comme prévu, et le restaurer si besoin.

Branches de fonctionnalités et feature flags


Bien qu'ayant des noms similaires, les branches de fonctionnalité (feature branches) et les feature flags sont très différents. Les branches de fonctionnalité sont un modèle de workflow pertinent pour les dépôts de contrôle de version Git. Lorsque les développeurs démarrent une nouvelle fonctionnalité produit, ils créent une branche Git correspondante qui dévie de la branche principale et qui contient tout le code pour cette nouvelle fonctionnalité. Lorsqu'ils terminent une nouvelle fonctionnalité, ils mergent la branche de fonctionnalité dans la branche principale, puis effectuent le déploiement. Les branches de fonctionnalité sont distinctes et indépendantes des feature flags.

Les feature flags peuvent être utilisés grâce à des branches de fonctionnalité. Pour créer un feature flag, un développeur crée une branche de fonctionnalité sur laquelle il commite le nouveau code de feature flag. Une fois instrumentée, la branche de fonctionnalité est mergée et déployée et le feature flag devient alors accessible en production.

Pendant le développement d'une branche de fonctionnalité, un projet peut se prolonger dans la durée, ou s'écarter de la branche principale et contenir de nombreux commits. Les développeurs doivent fournir un effort supplémentaire pour s'assurer qu'une branche de fonctionnalité est continuellement mise à jour, de sorte à réduire le nombre de conflits à un minimum lorsqu'elle est prête à être mergée. Les feature flags peuvent être utilisés pour remédier à cela. Au lieu de créer une branche de fonctionnalité au long cours et d'effectuer un merge massif lorsque la nouvelle fonctionnalité est prête, un feature flag peut être créé et immédiatement mergé avec la branche principale.

Comment implémenter des feature flags


Il existe de nombreuses façons d'implémenter des feature flags et, selon les cas, les considérations logistiques et le retour sur investissement varient. La voie à suivre dépend des besoins de votre équipe et des objectifs organisationnels.

Pour que le feature flagging fonctionne correctement, il est nécessaire de prendre en compte ses dépendances d'infrastructure. Les équipes font petit à petit évoluer leur utilisation des feature flags. L'activation et la désactivation des flags deviennent une décision métier. Il est donc essentiel de disposer d'un stockage de données faisant autorité et d'un mécanisme de gestion des flags. De nombreux services de feature flags tiers fournissent cette dépendance de stockage de données.

Les services de feature flags hébergés par des tiers sont souvent la meilleure solution. Ils s'occupent de la logistique lourde et proposent des bibliothèques faciles à intégrer qui accélèrent le processus d'installation. Les équipes peuvent alors se concentrer sur les tâches métier fondamentales plutôt que sur la gestion de l'infrastructure. Toutefois, si votre équipe a des préoccupations concernant la sécurité des tiers, il peut être dans votre intérêt d'implémenter votre flag de sécurité back-end.

Séparément, les ingénieurs doivent mettre en place une nouvelle logique de code qui récupère l'état du flag dans le service pour activer le contenu marqué. Cela nécessite de merger le code marqué et de le déployer avant de l'activer. Étant donné que de nombreux feature flags sont temporaires, n'oubliez pas de supprimer ceux qui ne sont plus nécessaires.

Conclusion…


Les feature flags sont un ajout puissant à un arsenal de développement Agile. Il existe de nombreuses façons créatives de les utiliser. Ils sont complémentaires au déploiement continu et au contrôle de version Git. Dans l'ensemble, les feature flags permettent aux équipes de mieux contrôler leur base de code, leur déploiement ainsi que l'expérience de l'utilisateur final.

N'oubliez pas de consulter nos tutoriels sur le feature flagging DevOps, qui fournissent les bonnes pratiques d'une chaîne d'outils Open DevOps.

Ian Buchanan
Ian Buchanan

Bien qu'Ian dispose d'une vaste expérience des langages Java et .NET, il est reconnu comme un champion des méthodologies Agile dans les grandes entreprises. Il se concentre actuellement sur l'émergence de la culture DevOps et les outils permettant de renforcer l'intégration continue, la livraison continue et l'analyse des données. Durant sa carrière, il a géré, avec succès, des outils de développement d'entreprise durant toutes les phases du cycle de vie. Il a mené des améliorations des processus à l'échelle de l'entreprise pour accroître la productivité, la qualité et la satisfaction des clients. Il a formé des équipes multinationales qui attachent de l'importance à l'autonomie et à l'organisation personnelle. Lorsqu'il n'est pas en pleine discussion ou programmation, Ian s'adonne à ses passions : les analyseurs, la métaprogrammation et les langages spécifiques d'un domaine. Suivez Ian sous @devpartisan.


Partager cet article

Lectures recommandées

Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.

Illustration DevOps

Communauté DevOps

Illustration DevOps

Lire le blog

Illustration d'une carte

Essayez la solution gratuitement

Inscrivez-vous à notre newsletter DevOps

Thank you for signing up