Mercredi 21 octobre 2026
Feature flags : déployer n’est pas livrer
Dans beaucoup d'équipes, deux mots sont utilisés comme synonymes : déployer et livrer. On « met en prod » une fonctionnalité, et à la seconde où le code arrive sur les serveurs, les utilisateurs la voient. C'est simple, c'est intuitif. Et c'est la source d'une bonne partie du stress des jours de mise en production.
Et si ces deux moments n'avaient aucune raison d'être le même ?
Quatre lignes, et tout change.
Les deux premiers sont temporaires par nature. Les deux derniers sont des éléments de configuration à part entière. Les confondre, c'est garantir que les temporaires deviendront permanents.
Deux gestes, deux décisions
Déployer, c'est un acte technique : faire tourner une nouvelle version du code en production. Livrer, c'est un acte produit : rendre une fonctionnalité accessible à des utilisateurs. Le premier regarde l'équipe technique. Le second regarde le métier, le marketing, parfois le service client. Les feature flags (ou feature toggles) permettent de séparer les deux. Le principe tient en une ligne : le nouveau code est bien en production, mais enveloppé dans une condition qu'on peut activer ou désactiver sans redéployer.
Quatre lignes, et tout change.
Ce que ça débloque
Le déploiement devient banal. Si le code nouveau est éteint par défaut, le mettre en production ne présente presque plus de risque. On peut déployer le mardi à 15 h, plusieurs fois par jour, sans cellule de crise ni astreinte renforcée. Le retour arrière prend une seconde. Un problème sur la nouvelle fonctionnalité ? On coupe le flag. Pas de rollback, pas de pipeline à relancer, pas de hotfix en urgence. L'ancienne version reprend la main instantanément. On livre progressivement. D'abord l'équipe interne, puis 5 % des utilisateurs, puis 25 %, puis tout le monde. Si les indicateurs se dégradent à 5 %, on a protégé les 95 % restants. On fusionne tôt. Une fonctionnalité qui prend trois semaines n'a plus besoin de vivre sur une branche à part qui diverge chaque jour un peu plus. Elle avance dans la branche principale, cachée derrière son flag, et les conflits de fusion géants disparaissent. Le métier reprend la main sur le calendrier. La fonctionnalité est prête depuis jeudi, mais le lancement commercial est lundi ? Aucun problème : elle attend, éteinte, en production, testée.Tous les flags ne se ressemblent pas
Ranger tous les flags dans le même sac est l'erreur la plus courante. Il en existe en réalité quatre familles, avec des durées de vie très différentes :
Les deux premiers sont temporaires par nature. Les deux derniers sont des éléments de configuration à part entière. Les confondre, c'est garantir que les temporaires deviendront permanents.
Le revers : la dette de flags
Car voilà le piège. Un flag de livraison qu'on oublie de retirer après le lancement ne disparaît pas. Il reste là, avec ses deux branches de code, dont une morte. Multipliez par cinquante, et vous obtenez un code où personne ne sait plus quel chemin est réellement emprunté, ni ce qui se passerait si l'on basculait tel interrupteur. Quelques règles simples évitent la dérive :- Une date de péremption à la création. Chaque flag temporaire naît avec un propriétaire et une date de retrait prévue.
- Le retrait fait partie de la fonctionnalité. Le ticket n'est pas terminé tant que le flag et l'ancien code n'ont pas été supprimés.
- Un inventaire visible. Une liste des flags actifs, revue régulièrement, avec ceux qui ont dépassé leur date en tête.
- Tester les deux états. Tant que le flag existe, les deux chemins doivent rester couverts par les tests.