Les Features flags ou Feature Toggle, représentent une technique de développement qui permet de gérer en parallèle plusieurs versions d’une fonctionnalité de votre application. Leur principale rôle est de pouvoir activer ou désactiver une fonctionnalité de votre application sans avoir à la redéployer.

A travers cet article, nous allons voir pourquoi utiliser les features flags et dans quels contextes. Il sera aussi question d’étudier les différents scénarios où il est possible de les employer, et enfin, les différents outils ou solutions d’implémentation.

 

Pourquoi utiliser des Features flags ?

Lorsque l’on développe une application dans un contexte agile avec un backlog, des itérations et des déploiements fréquents, on se retrouve fréquemment confronté à certaines problématiques. Par exemple :

  • Un fragment de code d’une fonctionnalité en cours de développement qui est mergé dans la branche qui est déployée.
  • La fonctionnalité est dépendante d’une autre fonctionnalité qui doit être déployée.

C’est dans ce type de situation que les features flags vont vous éviter des Rollbacks en urgence, et ce, en vous donnant la possibilité d’activer uniquement les fonctionnalités désirées et qui ont été testées et éprouvées.

Quant aux autre fonctionnalités non testées ou en cours de développement, elles seront présentes dans le code de votre application mais non activées, donc sans impact pour le fonctionnement de votre application.

 

Et les features branches

A la lecture de cet article, vous vous demandez sûrement  :

Si j’utilise un système de feature branch dans mon gestionnaire de code source qui me permet déjà d’isoler le développement des fonctionnalités, en quoi ai-je besoin des features flags ?

En effet, le mécanisme de feature branch qui permet d’isoler le développement d’application par fonctionnalité est déjà un bon moyen de contrôle sur le déploiement. Mais en tant que développeur et dans un contexte de déploiement rapproché, il arrive souvent de :

  • Merger du code vers la branche de déploiement trop rapidement (même si les Pull Requests sont une première barrière, elles ne sont pas toujours bien appliquées).
  • De devoir merger vers une autre branche car une partie du code est indispensable pour une autre fonctionnalité.
  • De merger vers la branche de déploiement car une partie de la fonctionnalité est prête à être déployée et testée.

Avec l’utilisation de feature flags vous pouvez, tout en utilisant les branches, merger votre feature branche vers la branche de déploiement sans craindre de perturber le prochain déploiement.

 

Les scénarios d’utilisation des features flags

Jusqu’ici, nous avons surtout évoqué les features flags pour résoudre les problèmes de merge, mais il existe d’autres scénarios dans lesquels les features flags peuvent s’avérer très utiles. Et cela pour :

  • Activer une nouvelle fonctionnalité en “preview” uniquement pour certains utilisateurs (par exemple pour des Beta testeurs).
  • Activer ou désactiver une fonctionnalité en cas de problème sans avoir à redéployer l’application.
  • Tester une fonctionnalité dans l’environnement de production avec des données réelles en accordant les accès à seulement certains utilisateurs.
  • Faire de l’A/B testing, ce qui consiste à tester 2 versions d’une fonctionnalité et ainsi pouvoir conserver la meilleure.

 

Quelle solution pour vos Features flags ?

Lorsque l’on veut utiliser des features flags dans une application, il se pose alors la question de la solution à utiliser. Et la réponse est que ceci dépend de votre contexte.

 

Du développement sur mesure

Vous pouvez bien entendu développer votre propre système de features flags qui aura pour avantage d’être adapté à vos besoins mais il vous faudra prendre en compte les temps de développement, les contraintes techniques d’architecture comme la base de données ou la non utilisation de BDD, le cache, etc.

 

Frameworks et solutions open-source

Une autre solution consiste à utiliser des solutions ou Framework open-source. Il vous faudra installer et implémenter vous-même ces solutions au sein de votre entreprise.

Cette solution vous fera certes gagner du temps en matière de développement, mais elle demande plus de tests ainsi qu’une mise en œuvre des différentes solutions par vos soins.

 

Le choix du PaaS

Une dernière solution consiste en l’utilisation d’une solution Cloud (de type PaaS) qui vous permet de configurer vos features flags via un portail et ne demande aucune installation. Cependant, les serveurs hébergeant vos applications doivent avoir un accès internet pour pouvoir accéder au service. De plus, comme toute solution PaaS le service a un coût qu’il faut évaluer selon vos besoins (nombre de projets, nombre de features, …).

Dans ce choix de solution, l’implémentation des features flags dans votre application se fait via des SDK ou des API fournies par l’éditeur qui vous permettront de récupérer les informations des features flags configurées dans le portail.

Une des solutions de Features flags et que je vous recommande, est LaunchDarkly. Son utilisation est très simple et la solution vous donne accès à de nombreuses fonctionnalités. La documentation est bien fournie et très claire. De plus, l’éditeur fournit des SDK pour tous les langages de développement.

 

Conclusion sur les Features Flags

Les Features flags permettent de mieux isoler les fonctionnalités de vos applications, et ainsi d’en avoir une meilleure maîtrise même en production, ce qui a pour avantage de fluidifier les processus de déploiement dans un contexte agile.

 

Un peu de lecture sur le sujet :

Livre Blanc Cell'insight 1 DevOps