Les drapeaux de fonctionnalités (souvent appelés bascules de fonctionnalités) existent depuis longtemps dans le processus de développement logiciel. Nous avons utilisé des drapeaux de fonctionnalités d’une manière ou d’une autre sans même le savoir. Alors, commençons par comprendre ce que sont exactement les drapeaux de fonctionnalités avant de plonger en profondeur.
En termes simples, les indicateurs de fonctionnalité aident à contrôler le chemin du code et les flux d’utilisateurs. Vous avez peut-être parfois utilisé le commentaire d’une ligne de code pour passer à une logique différente (ou Si des flux conditionnels). Par exemple:
def greeter():
greeterLanguageFrench = true # Comment to print greeting in English
# greeterLanguageFrench = false # Un comment to print greeting in English
if ( greeterLanguageFrench )
return "Bonjour monde!"
else
return "Hello World!"
J’espère que vous comprenez comment nous modifions le chemin du code en utilisant l’instruction if/else et en commentant/décommentant. Cependant, la technique de l’indicateur de fonctionnalité ne vous oblige pas à l’implémenter de cette manière. Au lieu de cela, vous pouvez contrôler les drapeaux à distance et les activer/désactiver sans même modifier le code en production. Et cela nous aide à dissocier le déploiement de la version. Le découplage du déploiement de la version est utile lorsque l’équipe est censée créer une fonctionnalité qui nécessite des semaines de travail, ce qui conduit à une branche de fonctionnalité de longue durée. Cette branche de longue durée vient avec sa propre complexité de fusion et de libération.
Pour éviter ces problèmes, vous pouvez faire du développement basé sur le tronc (TBD en bref)
TBD est un modèle de branchement de contrôle de source, où les développeurs collaborent sur le code dans une seule branche appelée « tronc » *, résistent à toute pression pour créer d’autres branches de développement à long terme en utilisant des techniques documentées. Ils évitent donc l’enfer de la fusion, ne cassent pas la construction et vivent heureux pour toujours.
Et une fois que tout le travail est terminé, vous pouvez activer cette fonctionnalité via des indicateurs de fonctionnalité. Cela facilite considérablement le contrôle du moment où révéler de nouvelles fonctionnalités aux utilisateurs alors que votre code est déjà déployé à partir de chaque itération de versions. En outre, les indicateurs de fonctionnalité aident à libérer n’importe quelle fonctionnalité uniquement pour certains utilisateurs. Il peut s’agir de votre équipe interne de testeurs/utilisateurs qui rend le processus de rétroaction plus rapide et plus sûr pour vous. Vous pouvez simplement le désactiver au cas où cette fonctionnalité entraînerait une latence ou un comportement ambigu.
Examinons le diagramme ci-dessous pour comprendre le développement piloté par des indicateurs de fonctionnalité.
L’indicateur de fonctionnalité nous permet d’expédier notre code en production dans des commits plus petits et de le déployer dans un état dormant. Maintenant, vous pouvez décider quand l’activer/le désactiver, obtenir des commentaires et l’itérer.
Passons en revue quelques scénarios qui peuvent nous aider à comprendre pourquoi nous avons besoin d’indicateurs de fonctionnalité.
Pourquoi avons-nous besoin de Feature Flags ?
Scénario #1 Thème de Noël
Avez-vous déjà remarqué que la plupart des sites d’achat en ligne transforment l’apparence de leur site Web en un thème de vacances autour de la saison de Noël ? Cela signifie-t-il qu’ils ont déployé le thème en même temps ? Très certainement, ce n’est pas le cas. Un nouveau thème a été déployé plus tôt mais n’a pas été mis à la disposition des utilisateurs.
Ils activent le thème pendant Noël en activant le drapeau de fonctionnalité. De plus, aucune équipe ne veut publier une fonctionnalité à Noël. Ils le testent et le déploient pour le produire bien à l’avance et le contrôlent à l’aide d’indicateurs de fonctionnalité.
Scénario #2 Testeur bêta
Une fois votre fonctionnalité déployée en production, vous pouvez la rendre disponible uniquement à ceux qui s’inscrivent au programme de test bêta à l’aide d’indicateurs de fonctionnalité. Cela vous aide à obtenir des commentaires en temps réel puisque votre fonctionnalité est en cours d’exécution en production et à prendre des décisions sur la base de métriques pour savoir si elle doit être déployée à tous. Dans le cas où une fonctionnalité a un problème, vous pourrez contrôler son rayon d’explosion.
Scénario #3 Accès anticipé
Comme son nom l’indique, vous pouvez choisir des utilisateurs/groupes spécifiques, c’est-à-dire des segments, pour rendre la nouvelle fonctionnalité disponible. Avant de le déployer pour tout le monde. Cette approche facilite les tests/expériences A/B.
Scénario #4 Livraison progressive
Vous pouvez déployer une fonctionnalité progressivement en fonction de mesures telles que la latence, le processeur et l’utilisation, etc. Si l’une des mesures ne correspond pas à vos besoins, vous pouvez simplement la désactiver sans affecter l’expérience de l’utilisateur. Ce sont les quelques stratégies de déploiement que vous pouvez utiliser pour le déploiement de fonctionnalités – les tests A/B. Lisez nos articles sur le déploiement Blue-Green et le déploiement Canary pour en savoir plus sur les stratégies de livraison progressives.
Scénario #5 Échec en cascade
Une énorme équipe travaille sur plusieurs fonctionnalités, et peu de personnes ont terminé des fonctionnalités interdépendantes, qui ont été livrées en une seule version. Si l’une de ces fonctionnalités commence à avoir des problèmes, cela entraînera une défaillance en cascade. Vous auriez pu éviter que cela ne se produise grâce à l’indicateur de fonctionnalité, en désactivant la fonctionnalité problématique jusqu’à ce que le correctif soit publié, et il contrôlera le rayon de l’explosion.
Ce sont quelques-uns des cas d’utilisation que j’ai énumérés, mais il pourrait y avoir de nombreux cas d’utilisation, donc ce n’est pas limité à ceux mentionnés.
Ce sont quelques-uns des avantages d’avoir des drapeaux de fonctionnalité, mais il y a aussi des pièges à utiliser des drapeaux de fonctionnalité. Voyons ces inconvénients.
Les pièges des drapeaux de fonctionnalité
- Dette technique : L’introduction d’indicateurs de fonctionnalité dans le code complique également leur gestion et leur suivi. Ils doivent être de courte durée ou avoir la propriété appropriée des indicateurs de fonctionnalité au sein de l’équipe.
- Performances des applications : Les indicateurs de fonctionnalité introduisent une latence dans les systèmes critiques s’ils ne sont pas implémentés avec une méthode appropriée. Il est préférable d’avoir des drapeaux de fonctionnalités où la latence est gérable.
- Plusieurs chemins de code : Lorsque vous introduisez un indicateur de fonctionnalité dans le code, vous introduisez un nouveau chemin de code, et il est devenu assez difficile de tester tous ces chemins de code. Il pourrait y avoir « n niveaux » d’imbrication dans le chemin du code si vous utilisez beaucoup les indicateurs de fonctionnalité dans la base de code.
Maintenant que nous connaissons les avantages et les inconvénients des indicateurs de fonctionnalité, parlons de la mise en œuvre.
Défis liés à la mise en œuvre du Feature Flag
Conformément à notre discussion, la mise en œuvre semble relativement facile. Pourtant, cela implique des nuances; certains des défis sont énumérés ci-dessous :
- Entretien – Gardez une trace des indicateurs de fonctionnalité de longue durée dans votre base de code existante afin que les nouveaux indicateurs n’entrent pas en conflit avec les anciens.
- La possession– Il faut posséder le cycle de vie d’un drapeau de l’ajout à la suppression ; sinon, au fil du temps, les drapeaux s’additionnent.
- Noms des drapeaux – Les noms doivent décrire ce qu’ils font avec un minimum de mots et doivent suivre les conventions de dénomination communes dans toute la base de code.
- Historique des audits – Si quelqu’un allume ou éteint un drapeau, assurez-vous de savoir de qui il s’agit.
Il est crucial de suivre le cycle de vie d’un indicateur de fonctionnalité et de le supprimer lorsqu’il n’est plus nécessaire.
Dans l’exemple ci-dessous, vous voyez comment nous pouvons utiliser une instruction conditionnelle avec certains paramètres de configuration transmis à la fonction. L’approche ci-dessous peut vous aider avec un indicateur de fonctionnalité de courte durée où vous n’avez pas beaucoup d’indicateurs de fonctionnalité à déployer.
def func(config):
if(config.is_feature_on):
# do something
else:
# do something else
Les drapeaux caractéristiques peuvent être un sauveur de jour, mais ils peuvent se transformer en catastrophe comme ce qui s’est passé le 1er août 2012, et cela a coûté 400 millions de dollars à Knight Capital ce jour-là.
Voici quelques facteurs importants à prendre en compte lors de la mise en œuvre des indicateurs de fonctionnalité :
- Indicateurs de fonctionnalité de courte durée ou de longue durée.
- La convention de dénomination des indicateurs de fonctionnalité.
- Propriété des indicateurs de fonctionnalité.
- Journalisation appropriée.
- Meilleure gestion des indicateurs de fonctionnalité, c’est-à-dire un seul volet de verre.
Si vous souhaitez approfondir les meilleures pratiques lors de la mise en œuvre, vous pouvez suivre cet article d’Edith Harbaugh.
Donc, plus important encore, nous avons besoin d’un meilleur outil de gestion des indicateurs de fonctionnalité. Au lieu de créer une gestion des indicateurs de fonctionnalités, nous pouvons adopter n’importe quelle plate-forme de gestion des indicateurs de fonctionnalités existante, telle que LancerDarkly, qui fournit une plate-forme SaaS pour gérer les indicateurs de fonctionnalité et nous aider à simplifier la mise en œuvre via le SDK disponible. Outre LaunchDarkly, nous avons des outils open source alternatifs. J’en ai énuméré quelques-uns ci-dessous.
Maintenant, parlons de LaunchDarkly pour la portée de cet article.
Qu’est-ce que LaunchDarkly ?
Il s’agit d’une offre SaaS pour la plate-forme feature flag. Au quotidien, ils traitent 20 000 milliards de demandes de fonctionnalités. LaunchDarkly couvre tous vos besoins. Certaines de ses fonctionnalités incluent :
- Livraison progressive
- Tests A/B et insights
- Plusieurs façons de publier un indicateur de fonctionnalité
- La publication prévue des drapeaux de fonctionnalités
- Porte d’approbation pour les indicateurs de fonctionnalité
- Références de code – vous aide à gérer la dette technique en trouvant la déclaration de l’indicateur de fonctionnalité dans la base de code.
Comment implémenter des indicateurs de fonctionnalité à l’aide de LaunchDarkly
Nous avons examiné les avantages de l’utilisation de balises de fonctionnalité et de plates-formes de gestion. Nous allons maintenant voir ces fonctionnalités en action via une simple application de commerce électronique développée à l’aide du framework Web Flask et de JavaScript.
Cette application propose des API REST à d’autres entreprises pour répertorier les produits disponibles. Et permettre aux utilisateurs de se connecter/s’inscrire et d’enregistrer des éléments dans les favoris. Pour exécuter cette application de démonstration sur le système local, clonez le référentiel launchdarkly-demo sur votre local et parcourez le fichier readme de votre configuration locale.
Alors, sans plus tarder, commençons.
Comment implémenter LaunchDarkly ?
Pour commencer, vous avez besoin d’un compte LaunchDarkly pour cette démo, et vous pouvez créer un compte d’essai ici. Une fois connecté, vous verrez le Indicateur de fonctionnalité liste sur le côté gauche du panneau.
LaunchDarkly créera un projet pour vous avec le nom de votre compte. Qui est visible au-dessus de l’étiquette de production. Il créera deux environnements pour vous.
Les environnements vous aident à séparer les règles de déploiement en fonction de l’environnement. Chaque environnement possède sa propre clé SDK, ce qui permet aux applications côté client d’obtenir toutes les données associées aux indicateurs spécifiques à cet environnement.
Pour cette démo, vous avez besoin d’un Clé SDK et un Identité du client. Les deux sont disponibles sous Paramètres du compte > Projets. Vous devez cliquer sur le nom du projet pour voir l’environnement disponible et les clés associées. Copier les clés du Test environnement pour cette démo.
Nous utiliserons ces clés pour exécuter notre application de démonstration localement. Vous pouvez trouver les instructions sur « Comment exécuter localement » dans le…