Feature flags et développement trunk-based
Déployer n'est pas mettre en production. Voici comment le développement trunk-based et les feature flags permettent aux équipes de fusionner en continu, de livrer chaque jour et de maintenir le risque au plus bas.
Par Innovation T Team
La plupart des équipes qui peinent à livrer ne sont pas lentes parce que leurs ingénieurs sont lents. Elles sont lentes parce que leurs branches vivent des semaines, que leurs fusions sont terrifiantes et que chaque mise en production est un événement à grand fracas que quelqu'un doit surveiller à 2 heures du matin. Le développement trunk-based et les feature flags attaquent ce problème par deux côtés : garder le code intégré en continu, et séparer le moment où vous déployez du moment où vous activez une fonctionnalité.
Bien mené, cet assemblage est le moteur discret des équipes qui livrent plusieurs fois par jour avec une astreinte sereine. Mené sans soin, il transforme votre code en un labyrinthe de bascules obsolètes que personne n'ose supprimer. Ce guide traite honnêtement des deux faces.
Déployer n'est pas mettre en production
L'idée la plus utile ici est que déployer du code et mettre une fonctionnalité en production sont deux événements distincts, et que vous devriez pouvoir faire l'un sans l'autre.
Dans l'ancien modèle, ils sont soudés. Le code atteint la production et, à cet instant précis, les utilisateurs voient le nouveau comportement. C'est ce couplage qui rend les mises en production effrayantes, car la seule façon de tester dans un environnement réel est de tout exposer à tout le monde d'un coup, et la seule façon d'annuler une mauvaise mise en production est de redéployer.
Séparez les deux et la peur se dissipe. Le code part en production éteint, enveloppé dans un flag désactivé. Il reste là, sollicité par votre suite de tests et vos contrôles de santé, sans toucher quoi que ce soit de visible par un utilisateur. Quand vous êtes prêt, vous activez le flag pour un pour cent du trafic, vous observez vos métriques, puis vous montez à dix, cinquante, puis cent. Si quelque chose semble anormal, vous le désactivez en quelques secondes sans déploiement. La mise en production devient une décision d'exécution prise par un humain qui surveille des tableaux de bord, et non un effet secondaire mécanique d'un push.
Ce que signifie vraiment le développement trunk-based
Le développement trunk-based est un modèle de branchement où chacun commite sur une unique branche partagée, le tronc, au moins une fois par jour. Les branches, si elles existent, vivent quelques heures et sont fusionnées le jour même.
Le but n'est pas d'être dogmatique sur les branches. Le but est de garder la distance entre le travail de n'importe quel développeur et la ligne principale partagée aussi courte que possible, car c'est dans cette distance que la douleur d'intégration s'accumule.
Comparez cela aux branches de fonctionnalité à longue durée de vie. Une branche qui survit deux semaines dérive silencieusement du tronc. Au moment de fusionner, vous réconciliez la divergence accumulée de toute l'équipe, et plus la fusion est grosse, plus le risque de casse est élevé. Le développement trunk-based refuse de laisser cette dette s'accumuler. Vous intégrez petit, vous intégrez souvent, et chaque intégration est banale.
L'objection évidente est : comment fusionner le code d'une fonctionnalité à moitié terminée sans casser la production ? C'est exactement la brèche que comblent les feature flags.
Où s'insèrent les feature flags
Un feature flag est une condition dans votre code qui décide à l'exécution si un comportement est actif. Au plus simple, c'est une seule ligne : si le flag est activé, exécute le nouveau chemin ; sinon, exécute l'ancien. Cette minuscule indirection est ce qui vous permet de fusionner du travail inachevé sur le tronc en toute sécurité, car le nouveau chemin reste éteint jusqu'à ce que vous choisissiez de l'allumer.
Tous les flags ne se valent pas, et les traiter comme une seule et même chose est une erreur courante. Ils ont des durées de vie et des propriétaires différents.
Les quatre types de flags
- Les flags de mise en production cachent le travail en cours pour qu'il puisse être fusionné avant d'être terminé. Ils ont une courte durée de vie par conception et devraient être supprimés dès qu'une fonctionnalité est entièrement déployée. C'est le flag qui rend le développement trunk-based possible.
- Les flags opérationnels sont des coupe-circuits pour les sous-systèmes risqués : un moteur de recommandation lourd, une intégration tierce instable, une nouvelle couche de cache. Ils ont volontairement une longue durée de vie, car vous voulez pouvoir délester la charge ou désactiver une dépendance pendant un incident sans déploiement.
- Les flags d'expérimentation alimentent les tests A/B. Ils dirigent des cohortes d'utilisateurs vers différentes variantes et restent en place pour la durée de l'expérimentation, puis sont nettoyés lorsqu'un gagnant est désigné.
- Les flags de permission conditionnent des fonctionnalités selon le forfait, le rôle ou le compte, par exemple un export réservé aux entreprises. Ils sont de fait permanents et relèvent davantage de votre logique de droits que de votre pipeline de livraison.
C'est en confondant ces catégories que les systèmes de flags déraillent. Un flag de mise en production traité comme un flag de permission ne se fait jamais supprimer, et six mois plus tard personne ne se souvient s'il est sûr de le retirer.
Un flux de travail qui tient la route en 2026
Voici une boucle concrète que nous utilisons et recommandons aux équipes qui passent à la livraison continue. Elle suppose une suite de tests solide et un vrai service de flags plutôt que des variables d'environnement éparpillées.
- Découpez le travail en fines tranches verticales. Divisez la fonctionnalité en morceaux assez petits pour être fusionnés en une journée, chacun étant un chemin complet à travers la pile, même s'il ne sert d'abord que des utilisateurs internes.
- Enveloppez le nouveau chemin dans un flag de mise en production, désactivé par défaut. Le tout premier commit introduit le flag. Tout ce qui suit modifie du code déjà éteint en production.
- Fusionnez sur le tronc chaque jour, derrière le flag. Vos changements atteignent la production en continu, sollicités par la CI et les tests d'intégration, mais invisibles pour les utilisateurs car le flag est désactivé.
- Activez d'abord le flag en interne. Activez-le pour votre propre équipe et vos comptes internes. Testez la vraie chose dans le vrai environnement avant qu'aucun client ne la voie.
- Montez en charge avec un déploiement progressif en pourcentage. Passez à un pour cent du trafic, puis à une cohorte plus large, en surveillant les taux d'erreur, la latence et la métrique métier que la fonctionnalité est censée faire bouger.
- Surveillez les métriques garde-fous à chaque étape. Reliez le déploiement à des alertes. Si les budgets d'erreur se consument ou qu'une métrique clé régresse, vous avez un signal pour mettre en pause ou revenir en arrière avant que la plupart des utilisateurs ne soient touchés.
- Revenez en arrière en basculant, pas en déployant. Si quelque chose casse, désactivez le flag. Le correctif est instantané et sans reproche, et vous déboguez tranquillement avec le code toujours en sécurité dans le tronc.
- Retirez le flag une fois le déploiement complet. Après qu'une fonctionnalité est à cent pour cent et stable, supprimez le flag et la branche de code morte dans le même sprint. Cette étape n'est pas optionnelle.
Cette dernière étape est là où la plupart des équipes échouent, elle mérite donc sa propre discipline.
Hygiène des flags : rembourser la dette de flags
Chaque flag de mise en production est une petite dette. Chacun ajoute une branche dans votre code, un état que vos tests doivent couvrir et une ligne de charge cognitive pour la prochaine personne qui lira le fichier. Une poignée, ça va. Plusieurs centaines de bascules obsolètes forment un second code invisible que personne ne comprend et que tout le monde a peur de toucher.
Maintenez la dette basse avec quelques habitudes :
- Donnez à chaque flag de mise en production une date d'expiration et un propriétaire dès sa création. Un flag sans propriétaire est un flag que personne ne retirera jamais.
- Suivez l'âge des flags et traitez tout ce qui dépasse son expiration comme un bug dans votre backlog, et non comme un nettoyage optionnel.
- Supprimez le code, pas seulement la bascule. Quand vous retirez un flag, supprimez la branche perdante pour que le chemin gagnant devienne le seul chemin.
- Plafonnez le nombre de flags de mise en production actifs par service. Une limite stricte force le nettoyage avant que du nouveau travail ne s'accumule.
- Auditez séparément les flags de permission et opérationnels, car ceux-là sont censés vivre longtemps et ne devraient pas être emportés dans le nettoyage des flags de mise en production.
D'après notre expérience, les équipes qui restent rapides ne sont pas celles qui ajoutent des flags le plus vite. Ce sont celles qui les retirent tout aussi vite.
Compromis et modes de défaillance
Ce modèle n'est pas gratuit, et prétendre le contraire prépare les équipes à se brûler.
- La combinatoire des tests explose. Avec de nombreux flags, le nombre d'états possibles croît rapidement. Vous ne pouvez pas tester chaque combinaison, alors testez les chemins qui comptent : l'état de production actuel, et les valeurs activée et désactivée de chaque flag prises isolément.
- L'évaluation des flags doit être rapide et à sécurité intégrée. Votre application lit les flags sur le chemin critique, donc un service de flags lent ou indisponible ne peut pas être autorisé à faire tomber des requêtes. Mettez en cache les valeurs de flags localement et définissez une valeur par défaut sensée pour quand le service est injoignable.
- Les flags sont une surface de sécurité. Un flag de permission qui conditionne une fonctionnalité payante est une décision de contrôle d'accès. Évaluez-le sur le serveur, ne faites jamais confiance à une valeur de flag envoyée par le client, et journalisez les changements sur les flags sensibles.
- Le développement trunk-based exige de vrais tests. Tout le modèle repose sur un tronc toujours livrable. Sans tests automatisés rapides et fiables et sans intégration continue, fusionner sur le tronc chaque jour ne fait que propager la casse plus vite.
Ce sont les mêmes disciplines qui apparaissent chaque fois que vous décomposez un système pour une livraison indépendante. Si vous soupesez aussi jusqu'où découper votre architecture, notre guide sur le passage du monolithe aux microservices couvre les signaux organisationnels qui rendent le déploiement indépendant rentable malgré son coût, et la mécanique des flags décrite ici est la façon dont vous livrez ces services en toute sécurité une fois que vous les avez.
Les flags voyagent aussi le long de vos frontières d'API, donc les contrats que vous exposez comptent. Quand un changement sous flag altère la forme d'une réponse ou le comportement d'un endpoint, les principes de notre article sur la conception d'API que les développeurs adorent vous évitent de livrer un changement cassant derrière une bascule d'apparence innocente.
Comment Innovation T peut vous aider
Le développement trunk-based et les feature flags relèvent moins de l'achat d'un outil que d'un changement dans la façon de travailler d'une équipe : petites fusions, intégration continue, déploiement progressif et nettoyage impitoyable. Y parvenir passe généralement par le renforcement de la suite de tests, la solidification du pipeline de livraison et le choix d'une approche de flags adaptée à votre échelle plutôt qu'au plus grand nom du marché.
Chez Innovation T, c'est exactement le genre de travail d'ingénierie que nous faisons. Nous aidons les équipes à passer des branches à longue durée de vie et des mises en production redoutées à un flux calme et continu : mise en place de workflows trunk-based, intégration des feature flags dans un pipeline CI et CD, définition de playbooks de déploiement et de retour arrière, et construction de l'hygiène des flags qui garde le code propre un an plus tard. Découvrez nos services d'ingénierie logicielle et cloud, ou contactez-nous pour discuter de la façon dont votre équipe livre aujourd'hui et de l'endroit où se niche réellement la friction.
Prêt à construire avec Innovation T ?
Qu'il s'agisse de sécurité, de croissance ou d'ingénierie, notre équipe peut vous aider à livrer dans les meilleures conditions.