Expérimentation progressive avec des indicateurs de fonctionnalité

À mesure que les équipes DevOps adoptent une méthodologie Agile axée sur la livraison continue de fonctionnalités, la nécessité de contrôler leur disponibilité pour les utilisateurs devient de plus en plus importante. Les indicateurs de fonctionnalités sont une excellente solution pour limiter l’accès des utilisateurs aux nouvelles fonctionnalités, que ce soit à des fins marketing ou pour des tests en production.

Découplage du déploiement et de l’exposition

Avec les indicateurs de fonctionnalités, une équipe peut choisir si un ensemble donné de fonctionnalités est visible dans l’expérience utilisateur et/ou invoqué dans la fonctionnalité. Les nouvelles fonctionnalités peuvent être construites et déployées dans le cadre du processus de développement ordinaire sans que ces fonctionnalités soient disponibles avec un large accès. Le déploiement des fonctionnalités est idéalement découplé de leur exposition.

Les indicateurs offrent un contrôle en temps réel jusqu’aux utilisateurs au niveau individuel

Les indicateurs offrent également un contrôle granulaire jusqu’aux utilisateurs au niveau individuel. Lorsqu’il est temps d’activer une fonctionnalité, que ce soit pour un seul utilisateur, un petit groupe ou tout le monde, l’équipe peut simplement changer l’indicateur de fonctionnalité pour l’activer sans avoir à le déployer à nouveau.

La portée d’un indicateur de fonctionnalité varie en fonction de la nature de la fonctionnalité et du public cible. Dans certains cas, un indicateur de fonctionnalité activera automatiquement la fonctionnalité pour tout le monde. Dans d’autres, une fonctionnalité sera activée sur une base individuelle. Les équipes peuvent également utiliser des indicateurs de fonctionnalités pour permettre aux utilisateurs qui le souhaitent d’opter pour l’activation d’une fonctionnalité. Il n’y a vraiment aucune limite à la manière dont les indicateurs de fonctionnalités sont mis en œuvre.

Accompagnez les premiers retours et l’expérimentation

Les indicateurs de fonctionnalités sont un excellent moyen de soutenir une expérimentation plus précoce. Certaines fonctionnalités peuvent présenter des imperfections dès le début, ce qui peut n’intéresser que les premiers utilisateurs. Essayer de pousser ces fonctionnalités pas tout à fait prêtes vers un public plus large pourrait entraîner un certain mécontentement. Cependant, le bénéfice de recueillir le feedback des utilisateurs prêts à utiliser une fonctionnalité en cours de développement est inestimable.

Désactivation rapide

Il est parfois utile de pouvoir désactiver quelque chose. Supposons par exemple qu’une nouvelle fonctionnalité ne marche pas comme prévu et qu’elle ait des effets secondaires qui posent problème ailleurs. Vous pouvez utiliser des indicateurs de fonctionnalités pour désactiver rapidement la nouvelle fonctionnalité afin de revenir à un comportement de confiance sans avoir à la déployer de nouveau. Bien que les indicateurs de fonctionnalités soient souvent associés aux fonctionnalités de l’interface utilisateur, ils peuvent également être facilement utilisés pour des modifications de l’architecture ou de l’infrastructure.

Étapes standard

Microsoft utilise un processus de déploiement standard pour activer les indicateurs de fonctionnalités. Il existe deux concepts distincts : les anneaux pour les déploiements, et les étapes pour les indicateurs de fonctionnalités. Apprenez-en davantage concernant les anneaux et les étapes.

Les étapes concernent avant tout la divulgation ou l’exposition. Par exemple, la première étape pourrait concerner le compte d’une équipe et les comptes personnels des membres. La plupart des utilisateurs ne verraient rien de nouveau car les indicateurs ne sont activés que pour cette première étape. Cela permet à une équipe de l’utiliser et de l’expérimenter à 100 %. Une fois que l’équipe l’approuve, certains clients pourraient choisir de l’activer via la deuxième étape des indicateurs de fonctionnalités.

S’inscrire

Il est recommandé de permettre aux utilisateurs de choisir d’activer des indicateurs de fonctionnalités lorsque cela est possible. Par exemple, l’équipe peut exposer un panneau de prévisualisation associé aux préférences ou aux paramètres de l’utilisateur.

Screenshot of opt-in preview pane.

Utilisez des indicateurs avec la télémétrie

Les indicateurs de fonctionnalités fournissent un moyen d’exposer progressivement des mises à jour. Cependant, les équipes doivent surveiller en permanence les bonnes métriques pour évaluer la préparation à une exposition plus large. Ces métriques doivent inclure le comportement d’utilisation, ainsi que l’impact des mises à jour sur la santé du système. Il est important de ne pas tomber dans le piège de supposer que tout va bien simplement parce que rien de grave ne semble se produire.

Exemple d’indicateur de fonctionnalité

Prenons l’exemple ci-dessous. L’équipe a ajouté quelques boutons ici pour Cherry-pick et Revert dans l’interface utilisateur de la demande de tirage. Ils ont été déployés en utilisant des indicateurs de fonctionnalités.

Screenshot of pull request UI example.

Définir des indicateurs de fonctionnalité

La première fonctionnalité exposée était le bouton Revert. La solution utilise un fichier XML pour définir tous les indicateurs de fonctionnalité. Il y a un fichier par service dans ce cas, ce qui encourage à supprimer les anciens indicateurs pour éviter que la section ne devienne trop longue. L’équipe supprimera les anciens indicateurs car il y a une motivation naturelle à contrôler la taille de ce fichier.

<?xml version="1.0" encoding="utf-8"?>
<!--
  In this group we should register Azure DevOps specific features and sets their states.
-->
<ServicingStepGroup name="AzureDevOpsFeatureAvailability" … >
  <Steps>
    <!-- Feature Availability -->
    <ServicingStep name="Register features" stepPerformer="FeatureAvailability" … >
      <StepData>
        <!--specifying owner to allow implicit removal of features -->
        <Features owner="AzureDevOps">
           <!-- Begin TFVC/Git -->
           <Feature name="SourceControl.Revert" description="Source control revert features" />

Une infrastructure de serveur commune encourage la réutilisation et les économies d’échelle pour l’ensemble de l’équipe. Idéalement, le projet aura une infrastructure en place de sorte qu’un développeur puisse simplement définir un indicateur dans un référentiel central et que le reste de l’infrastructure soit géré pour lui.

Vérifiez les indicateurs de fonctionnalité au moment de l’exécution

L’indicateur de fonctionnalité utilisé ici est nommé SourceControl.Revert. Voici le TypeScript réel de cette page qui illustre l’appel pour une vérification de la disponibilité d’une fonctionnalité.

private addRevertButton(): void {
 if (FeatureAvailability.isFeatureEnabled(Flags.SourceControlRevert)) {
     this._calloutButtons.unshift(
         <button onClick={ () => Dialogs.revertPullRequest(
             this.props.repositoryContext,
             this.props.pullRequest.pullRequestContract(),
             this.props.pullRequest.branchStatusContract().sourceBranchStatus,
             this.props.pullRequest.branchStatusContract().targetBranchStatus)
         }
         >
             {VCResources.PullRequest_Revert_Button}
         </button>
        );
     }
}

L’exemple ci-dessus illustre l’utilisation en TypeScript, mais cela pourrait tout aussi bien se faire en utilisant C#. Le code vérifie si la fonctionnalité est activée et, le cas échéant, affiche un bouton pour fournir la fonctionnalité. Si l’indicateur n’est pas activé, alors le bouton est omis.

Contrôler un indicateur de fonctionnalité

Une bonne plate-forme d’indicateurs de fonctionnalités fournira plusieurs moyens de gérer si un indicateur donné est activé. En général, il existe des scénarios d’utilisation pour que l’indicateur soit contrôlé via PowerShell et l’interface Web. Pour PowerShell, tout ce qui doit vraiment être exposé sont des moyens d’obtenir et de définir l’état d’un indicateur de fonctionnalités, ainsi que des paramètres facultatifs pour des éléments comme des identifiants de compte utilisateur spécifiques, le cas échéant.

Contrôler les indicateurs de fonctionnalités via l’interface utilisateur web

L’exemple suivant utilise l’interface Web exposée pour ce produit par l’équipe. Notez l’indicateur de fonctionnalité pour SourceControl.Revert. Il y a deux comptes personnels répertoriés ici : hallux et buckh-westeur. L’état est défini pour hallux, qui se trouve dans la région du Centre-Nord et effacé pour l’autre compte en Europe Ouest.

Screenshot of controlling feature flags through web UI.

La nature de l’indicateur de fonctionnalité déterminera la manière dont les fonctionnalités sont exposées. Dans certains cas, l’exposition suivra un modèle d’anneaux et d’étapes. Dans d’autres, les utilisateurs peuvent choisir de l’activer via une interface de configuration, voire en envoyant un e-mail à l’équipe pour y accéder.

Considérations relatives aux indicateurs de fonctionnalité

La plupart des indicateurs de fonctionnalités peuvent être supprimés une fois qu’une fonctionnalité a été déployée pour tout le monde. À ce stade, l’équipe peut supprimer toutes les références à l’indicateur dans le code et la configuration. Il est bon de pratiquer une revue des indicateurs de fonctionnalités, par exemple au début de chaque sprint.

En même temps, il peut y avoir un ensemble d’indicateurs de fonctionnalités qui persistent pour diverses raisons. Par exemple, l’équipe peut vouloir conserver un indicateur de fonctionnalité qui se ramifie avec un élément d’infrastructure pendant un certain temps après que le service de production ait complètement basculé. Cependant, gardez à l’esprit que ce chemin de code potentiel pourrait être réactivé à l’avenir lors d’un effacement explicite de l’indicateur de fonctionnalité, il doit donc être testé et maintenu jusqu’à ce que l’option soit supprimée.

Indicateurs de fonctionnalité et stratégie de gestion des branches

Les indicateurs de fonctionnalités permettent aux équipes de développement d’inclure des fonctionnalités incomplètes dans main sans affecter les autres utilisateurs. Tant que le chemin de code est isolé derrière un indicateur de fonctionnalités, il est généralement sûr de générer et de publier ce code sans que des effets secondaires n’affectent une utilisation normale. Cependant, s’il existe des cas dans lesquels une fonctionnalité nécessite des dépendances, comme lors de l’exposition d’un point de terminaison REST, les équipes doivent réfléchir à la manière dont ces dépendances peuvent créer un travail de sécurité ou de maintenance même sans que la fonctionnalité ne soit exposée.

Indicateurs de fonctionnalité pour réduire les risques

Parfois, de nouvelles fonctionnalités peuvent potentiellement introduire des changements destructeurs ou perturbateurs. Par exemple, le produit peut être en train de passer d’un schéma de base de données large à un schéma long. Dans un tel scénario, le développeur devrait créer une branche de fonctionnalités pendant une courte période. Ils effectuent ensuite les modifications déstabilisantes sur la branche et conservent la fonctionnalité derrière un indicateur. Selon une pratique courante, les équipes fusionnent ensuite les modifications dans main dès qu’elles ne causent plus de problème. Cela ne serait pas possible sans pouvoir garder la fonctionnalité inachevée cachée derrière un indicateur de fonctionnalités.

Les indicateurs de fonctionnalité aident à travailler dans la version principale

Si vous suivez les pratiques courantes abordées dans la phase Develo, travailler dans main est un bon moyen de renforcer un cycle DevOps. En combinaison avec des indicateurs de fonctionnalités, les développeurs peuvent rapidement fusionner des fonctionnalités en amont et les soumettre au tests. Un code de qualité peut rapidement être publié pour les tests en production. Après quelques sprints, les développeurs reconnaîtront les avantages des indicateurs de fonctionnalités et les utiliseront de manière proactive.

Comment décider s’il faut utiliser un indicateur de fonctionnalité

Les équipes de fonctionnalités ont le pouvoir de décision pour déterminer si elles ont besoin d’un indicateur de fonctionnalités ou non pour un changement donné. Tous les changements n’en nécessitent pas un, donc c’est une décision qui appartient au développeur lorsqu’il choisit de faire un changement donné. Dans le cas de la fonctionnalité Revert discutée précédemment, il était important d’utiliser un indicateur de fonctionnalités pour contrôler l’exposition. Permettre aux équipes de prendre des décisions clés concernant leur domaine de fonctionnalités fait partie de l’autonomie dans une organisation DevOps efficace.

Développer ou acheter

Bien qu'il soit possible de construire votre propre infrastructure de drapeau, il est généralement recommandé d'adopter une plateforme comme LaunchDarkly ou Split. Il est préférable d’investir dans le développement de fonctionnalités plutôt que de redévelopper la fonctionnalité des indicateurs de fonctionnalités.

Étapes suivantes

En savoir plus sur l’utilisation d’indicateurs de fonctionnalité dans une application ASP.NET Core.