Le pattern « feature flipping » permet d’activer et désactiver des fonctionnalités directement en production, sans re-livraison de code.
Plusieurs termes sont utilisés par les grands du web : Flickr et Etsy utilisent des « feature flags », Facebook des « gatekeepers », Forrst des « feature buckets », des « features bits » chez Lyris inc., alors que Martin Fowler opte pour des « feature toggles ».
Bref, chacun le nomme et l’implémente à sa manière mais dans l’idée toutes ces techniques rejoignent les mêmes objectifs. Dans cet article, nous utiliserons le terme « feature flipping ». Mis en œuvre avec succès sur notre solution de store privé Appaloosa, cette technique a apporté de nombreux bénéfices pour quelques inconvénients.
Une des premiers avantages de pouvoir activer et désactiver des fonctionnalités à chaud est de livrer en continu l’application en production. En effet, les organisations qui mettent en place un processus de livraison continue sont vite confrontées à un problème : comment commiter fréquemment sur le référentiel de source tout en garantissant la stabilité de l’application, toujours prête pour la production ? Dans le cas de développements de fonctionnalités qui ne peuvent être terminés en moins d’une journée, commiter la fonctionnalité seulement lorsqu’elle est terminée (au bout de quelques jours) est contraire aux bonnes pratiques de développement en intégration continue. En effet, plus les commits sont espacés, plus les merges sont complexes et risqués, et les possibilités de refactoring transverse limitées. Face à cette contrainte, deux possibilités : « feature branching » ou « feature flipping ». En d’autres termes, brancher via l’outil de gestion de configuration ou brancher dans le code. Le débat entre ces deux approches est passionné, vous pouvez trouver quelques avis ici : http://jamesmckay.net/2011/07/why-does-martin-fowler-not-understand-feature-branches/