Qu'est-ce qu'un feature flag ?
Un feature flag (ou feature toggle) est une technique de développement qui permet d'activer ou de désactiver des fonctionnalités dans une application sans modifier le code ni redeployer. Le code de la nouvelle fonctionnalité est deploye en production mais "cache" derrière un flag conditionnel. Un système de configuration (base de données, service dédié) contrôle l'état de chaque flag.
Types de feature flags
Release flags : activer progressivement une fonctionnalité en production (canary release). Temporaires, retires après la generalisation. Experiment flags : tests A/B, montrer des variantes différentes à des segments d'utilisateurs pour mesurer l'impact. Ops flags : désactiver rapidement une fonctionnalité en cas de problème de performance ou de bug (kill switch). Permission flags : activer des fonctionnalités pour certains utilisateurs (beta testeurs, clients premium).
Avantages
Déploiement continu : le code est merge et deploye en continu sans attendre que la fonctionnalité soit complete (trunk-based development). Releases progressives : déployer à 1% des utilisateurs, monitorer, puis augmenter progressivement. Rollback instantané : désactiver un flag est immédiat, pas besoin de redeployer. Tests en production : tester avec de vrais utilisateurs et de vraies données. Decouplage deploy/release : déployer le code (technique) est separe de la release (métier).
Outils et implémentation
Les plateformes dédiées offrent des fonctionnalités avancees : LaunchDarkly (leader, targeting avance, analytics), Unleash (open-source, auto-heberge), Flagsmith (open-source, cloud ou auto-heberge), PostHog (feature flags + analytics), Split (experimentation avancee). L'implémentation minimale est un simple if/else avec un flag en configuration, mais les plateformes ajoutent le ciblage par segment, les pourcentages de rollout, les métriques, et les SDK multi-langages.
Bonnes pratiques et dette technique
Les feature flags créent une forme de dette technique s'ils ne sont pas gérés. Bonnes pratiques : nommer clairement chaque flag avec une date de création, documenter l'objectif et la condition de retrait, nettoyer les flags obsolètes régulièrement (sprint de nettoyage), limiter le nombre de flags actifs simultanément. Un flag devrait avoir une durée de vie définie. Les release flags sont retires après generalisation. Les flags permanents (permissions, ops) doivent être documentés et audites.