La haute évolutivité mentionne les indicateurs de fonctionnalité ici:
5 éléments toxiques pour l'évolutivité , "5. Manque d'indicateurs de fonctionnalités"
Que sont exactement les indicateurs de fonctionnalité?
architecture
scalability
GurdeepS
la source
la source
Réponses:
Un `` indicateur de fonctionnalité '' (ou fonctionnalité Toggle ) est la possibilité d'activer / désactiver facilement les fonctionnalités (sous-sections) de votre application:
Je suppose que l'exemple là-bas était qu'il est pratique d'avoir le contrôle pour réduire quelque peu l'ensemble de fonctionnalités si vous devez, par exemple, réduire les requêtes de base de données si la charge est trop élevée.
Cependant, il existe de nombreuses autres raisons pour lesquelles vous voudriez l'utiliser - l'une des principales étant l'activation de la livraison continue : pousser les choses en production / en direct tout en désactivant / basculant la fonctionnalité jusqu'à ce qu'elle soit terminée. Nous utilisons souvent ce que nous appelons un «cookie de développement» pour montrer les fonctionnalités inachevées uniquement à l'équipe de développement. De cette façon, nous pouvons tester un travail partiellement achevé en production (oh oui! Y a-t-il une meilleure intégration?) Sur plusieurs versions / déploiements avant de le «dégager» (terminé) et qu'il devienne visible au public.
Voici un package simple qui vous aide à le faire dans ASP.NET MVC land: https://github.com/cottsak/DevCookie (divulgation complète: je suis l'auteur)
Fowler a également un article beaucoup plus long que celui lié ci-dessus avec beaucoup plus de détails .
Cet article (sur le site de Fowler également) explique les différents types de stratégies de bascule . DevCookie prend en charge la stratégie basée sur la ligne principale / le tronc et s'appelle un « basculement de version » dans l'article.
La réponse d'Adil souligne qu'il existe de nombreux termes et raisons pour lesquelles vous pourriez vouloir une partie de cette infrastructure. Gardez à l'esprit que vous n'aurez peut-être besoin que de certaines de ces choses. Par exemple, il se peut que je veuille uniquement activer un flux de travail de déploiement / livraison simple et agile et une infrastructure simple suffira donc. Si vous choisissez ensuite de passer à une expérimentation #leanstartup complète avec A / B, des tests de cohorte et des choses comme le déploiement contrôlé, vous devriez envisager un outil d'analyse (par exemple Heap ) qui facilite ces méthodologies de développement basées sur les données en tant que solution distincte . Une infrastructure à bascule qui fait tout ce qui précède entraînera des ballonnements et une complexité inutile.
Si vous êtes arrivé jusque-là, vous voudrez peut-être consulter certaines de mes autres réflexions sur le développement Mainline, le basculement des fonctionnalités et d'autres idées idiotes comme TEST, QA, SIT, STAND, CROUCH .
la source
L'indicateur de fonctionnalité est une technique pour désactiver certaines fonctionnalités de votre application, via la configuration, sans déployer de nouveau code.
Les indicateurs de fonctionnalités jouent un rôle clé dans le schéma CI où les fonctionnalités sont constamment déployées mais pas nécessairement «publiées» en production.
Plus d'infos ici:
-- ÉDITER:
Implémentation java des indicateurs de fonctionnalités .
la source
Les indicateurs de fonctionnalités, les basculements de fonctionnalités, les expériences et les déploiements contrôlés sont des synonymes d'une idée simple mais puissante: séparer les déploiements de code des déploiements de fonctionnalités. En clair, c'est la possibilité de pousser les engagements de votre fonctionnalité vers la production tout en choisissant qui parmi vos clients - le cas échéant - peut voir cette fonctionnalité.
Ils ont été popularisés en partie par le Gatekeeper de Facebook . LiX de LinkedIn est un autre bon exemple.
Adopter cette idée simple jette les bases de nombreuses bonnes pratiques, notamment:
Déploiement / livraison continus - plusieurs codes poussés en production en une journée.
Développement Trunk / Mainline - les branches de fonctionnalités ne doivent être créées que pour les demandes d'extraction, pas pour le développement de fonctionnalités de longue durée.
No More Release Trains pour embourber les choses.
Test QA / Perf en production - les tests réels d'assurance qualité et de performance se font sur l'infrastructure de production avec le trafic de production. Ne perdez pas de temps à créer des laboratoires de performances étendus et des environnements de préparation.
Expérimentation - sachez comment une nouvelle fonctionnalité déplace l'aiguille sur vos KPI.
Éviter les correctifs ou les annulations de code en cas de problèmes - les correctifs et les annulations de code sont stressants, prennent beaucoup de temps et entraînent plus de problèmes que nécessaire. Au lieu de cela, désactivez la fonction ou diminuez-la.
D'autres ont mentionné les bibliothèques open source. Un bon exemple de solution complète - comme Gatekeeper et LiX - est Split . Je travaille pour Split.
la source
Il y a beaucoup de bonnes réponses ici, toutes conduisant à l'importante définition de base popularisée dans l'article de Martin Fowler :
Ce sont des morceaux de code qui «[permettent] aux équipes de modifier le comportement du système sans changer de code».
Nous les avons donc historiquement considérés comme représentés par le pseudo-code:
C'est une façon totalement précise d'y penser, et Matt et Adil le développent bien avec une variété de cas d'utilisation tactiques pour l'indicateur de fonctionnalité.
Mais j'aimerais offrir une définition révisée qui reflète la façon dont la réalité a évolué au cours des six années et a changé depuis que dotnetdev a posé la question initiale. Je travaille pour Rollout.io , une plate-forme de drapeau de fonctionnalités, donc j'ai eu un siège au premier rang pour cette évolution.
En termes simples, les indicateurs de fonctionnalités ne sont plus simplement un moyen d'activer et de désactiver des fonctionnalités dans votre application. C'est comme répondre "qu'est-ce qu'une ligne de facture" en disant "c'est une description et un montant de devise". C'est vrai, mais cela ne conduit pas au point le plus large de la facture elle-même.
Les indicateurs de fonctionnalités sont les éléments tactiques d'une solution stratégique globale dans les logiciels modernes. Ils sont le moyen par lequel vous reportez la logique de décision importante dans votre code jusqu'à l'exécution lorsque vous avez plus d'informations. Et, peut-être plus important encore, ils ne se produisent plus de manière isolée, avec une seule vérification pour voir si le numéro de version est supérieur ou non à 2,7; les organisations qui les utilisent les incluent généralement dans le cadre d'une approche produit complète à l'échelle du système.
Comme d'autres l'ont mentionné, Facebook et LinkedIn ont été les premiers à le faire, mais en 2018, de nombreuses organisations le font. Ils reportent les questions de logique de décision pour l'exécution dans le cadre de la stratégie de développement, de la stratégie opérationnelle (ou de la stratégie DevOps, si vous le souhaitez) et de la stratégie produit. Voici des exemples de telles questions.
Pour avoir une application qui reporte un nombre important de ces décisions jusqu'à l'exécution, vous ne pouvez pas lancer des indicateurs de fonctionnalité dans votre application de manière ad hoc ou vous vous enterrerez dans des dettes techniques. Vous devez, ces jours-ci, avoir une stratégie complète de gestion des indicateurs de fonctionnalités, qui comprend quelques composants différents.
Alors, à la fin, que sont les indicateurs de fonctionnalité?
Eh bien, ils constituent un élément important d'une stratégie plus large visant à disposer d'une application adaptable aux besoins techniques et du marché.
la source
Un indicateur de fonctionnalité (également connu sous le nom de retournement de fonctionnalité ou de basculement de fonctionnalité ) est un commutateur permettant d'activer ou de désactiver une fonctionnalité potentiellement coûteuse selon les besoins (comme, par exemple, lorsqu'un site subit un trafic inattendu). Cela vous fera gagner un peu de temps avant de passer à l'échelle ou jusqu'à ce que la pointe de charge disparaisse.
Voici un exemple de la documentation SWIG .
la source
Dans mon entreprise, nous avions une solution propre pour cela. Nous avons créé un service fournissant un
.json
fichier config ( ) téléchargeable pour chaque application. Dans cette configuration, nous avons stocké les indicateurs pour les fonctionnalités. Sur la base de cette configuration, l'application peut afficher ou masquer la fonctionnalité actuelle. (Par exemple, afficher ou masquer un élément de menu dans la barre latérale).Nous avons également créé une page d'administration interne où nous pouvons configurer les indicateurs de fonctionnalité. Cela a bien fonctionné pendant un certain temps, mais après cela, nous aurions aimé faire du ciblage des utilisateurs et des tests A / B. Développer par nos propres moyens Cela nous a semblé trop d'effort, nous avons donc choisi une solution tierce. Comme déjà mentionné ici, il existe de nombreuses solutions pour cela.
Nous avons choisi ConfigCat car il prend en charge les groupes cibles personnalisés et le déploiement basé sur un pourcentage à la fois. Vous pouvez vérifier les sdks open-source pris en charge sur github .
la source
Les indicateurs de fonctionnalité (ou bascules de fonctionnalité) vous permettent d'activer des fonctionnalités à distance sur une application sans avoir besoin de recréer / redéployer l'application. Cela vous permet de déployer le code en production mais de ne pas publier la fonctionnalité tant que vous n'êtes pas prêt. Vous pouvez cibler des utilisateurs spécifiques, vous pouvez donc activer une nouvelle fonctionnalité pour vos utilisateurs bêta à tester.
Dans notre entreprise, nous avons déjà utilisé LaunchDarkly et d'autres suggestions de FeatureFlags.io . Nous avons également essayé d'utiliser la configuration à distance de Firebase pour essayer de faire fonctionner cela, mais nous avons trouvé qu'il n'était pas vraiment adapté à cet objectif.
Nous avons fini par développer notre propre version appelée Bullet Train , que nous avons open source. Il combine à la fois les indicateurs / bascules de fonction et la configuration à distance.
la source
Les indicateurs de fonctionnalité sont utilisés à plusieurs fins. L'idée générale est de déléguer le contrôle sur quel utilisateur voit quelle fonctionnalité à un tableau de bord distant ou à un back-office.
Une fois qu'une fonctionnalité est signalée dans le code, vous pouvez désormais utiliser plusieurs méthodes pour déterminer quel utilisateur la voit dans votre application: 1. Activé / Désactivé - affiche la fonctionnalité à tous ou aucun de vos utilisateurs. 2. Version graduelle - affichez la fonctionnalité uniquement à un pourcentage de vos utilisateurs, puis montrez-la progressivement à tous les utilisateurs. 3. Ciblage - montrez la fonctionnalité à des utilisateurs spécifiques en fonction des propriétés ou des caractéristiques de cet utilisateur.
Les outils qui aident à contrôler les indicateurs de fonctionnalités (booléens) et les configurations de fonctionnalités (chaînes, nombres, etc.) sont généralement appelés plates-formes de gestion des fonctionnalités.Il existe un excellent service de gestion des fonctionnalités appelé Configz.io
la source
Du point de vue du codage, un indicateur de fonctionnalité peut être aussi simple qu'une
if
instruction qui entoure un nouveau morceau de code que vous écrivez. Lorsque l'if
instruction prend la valeur true (l'indicateur de fonctionnalité est activé), le nouveau code est exécuté.Dans un exemple concret de livraison de logiciel, l'
if
instruction décrite ci-dessus s'évaluerait différemment selon l'environnement dans lequel le logiciel s'exécute. Par exemple, si l'application est exécutée sur votre serveur d'assurance qualité, l'indicateur de fonctionnalité retournera true et la nouvelle fonctionnalité sera vu. S'il est exécuté sur votre serveur de production, l'indicateur de fonctionnalité retournera false et la fonctionnalité sera masquée.D'après mon expérience personnelle au cours de ma carrière, j'ai utilisé les indicateurs de fonctionnalités des manières suivantes:
Découpler les déploiements de code de la publication de fonctionnalités aux clients. C'était ma première utilisation initiale des indicateurs de fonctionnalités dans notre processus de développement. Nous l'avons utilisé pour supprimer la dépendance entre notre équipe marketing et produit et l'équipe d'ingénierie qui effectuait le développement et les versions. Les drapeaux de fonctionnalités nous permettaient de déployer notre code des semaines avant un lancement alors qu'avant, nous déployions du code la nuit avant une sortie!
Essais en production. Avant d'utiliser des indicateurs de fonctionnalités lorsque nous avons publié notre code, il s'agissait d'un événement tout ou rien, soit tous nos clients ont obtenu la fonctionnalité, soit aucun d'entre eux ne l'a fait. Nous avons utilisé des indicateurs de fonctionnalité pour nous permettre de déployer une nouvelle fonctionnalité à un petit pourcentage d'utilisateurs à la fois. Cela nous a permis de collecter des commentaires et des données précieux sur une nouvelle fonctionnalité sans risquer de problèmes potentiels pour l'ensemble de la clientèle.
Activation / désactivation d'une fonctionnalité par environnement dans le cycle de vie du développement. Nous l'avons largement utilisé dans le développement pour permettre un processus de déploiement beaucoup plus fluide - nous avons un pipeline CI / CD dans lequel l'utilisation d'indicateurs de fonctionnalités est vitale.
Création d'un kill switch. Nous avons enveloppé certaines fonctionnalités de notre application avec un indicateur de fonctionnalité qui nous permet de «tuer» cette fonctionnalité en cas de problèmes que nous rencontrions avec l'application à ce moment-là. Par exemple, si nous nous trouvons sous une charge importante, nous sommes en mesure de désactiver certaines fonctionnalités non essentielles du site Web pour résoudre le problème.
Vous pouvez en savoir plus sur les indicateurs de fonctionnalité ici.
Vous pouvez ajouter des indicateurs de fonctionnalité à votre code de plusieurs manières.
Écrire votre propre bibliothèque peut sembler une bonne idée au début et cela peut généralement commencer de cette façon. Cependant, vous pouvez bientôt rencontrer des problèmes lorsque vous souhaitez implémenter les cas d'utilisation plus avancés des indicateurs de fonctionnalité, tels que le déploiement à un pourcentage d'utilisateurs ou le ciblage de groupes d'utilisateurs spécifiques. Un autre problème avec la création de votre propre implémentation d'indicateur de fonctionnalité est que si vous utilisez plusieurs langues, vous devrez implémenter votre code plusieurs fois.
Le moyen le meilleur et le plus simple d'utiliser les indicateurs de fonctionnalités est d'utiliser un service de gestion d'indicateurs de fonctionnalités en ligne tel que Floodgate . De cette façon, vous pouvez tirer parti de la plate-forme pour tous les travaux lourds, ce qui vous permet ensuite de vous concentrer sur la création de la fonctionnalité pour votre application.
Voici un exemple de la façon d'ajouter un indicateur de fonctionnalité Floodgate à une application à l'aide du SDK .NET.
Si vous travaillez dans une équipe de développement et que vous n'utilisez pas d'indicateurs de fonctionnalité et que vous rencontrez des problèmes de déploiement et de gestion de code au sein de l'équipe. L'utilisation d'indicateurs de fonctionnalité peut être un excellent moyen de résoudre ces problèmes. Il y a aussi un bel effet secondaire des indicateurs de fonctionnalités qui accélèrent la vitesse de développement de vos équipes.
Martin Fowler donne une écriture-up très approfondie des indicateurs de fonctionnalité ici que je vous recommande de lire.
la source
Je crois comprendre que les indicateurs de fonctionnalité vous aident à accéder à la fonctionnalité en décidant quels utilisateurs reçoivent certaines fonctionnalités.
Par exemple, disons que vous souhaitez uniquement que vos utilisateurs bêta voient une nouvelle fonctionnalité. Vous «activez» cette fonctionnalité pour les utilisateurs bêta et le reste de vos utilisateurs ne la verra pas.
Je teste les indicateurs de fonctionnalités de LaunchDarkly pour certains tests JS A / B frontaux - semble bien fonctionner. Vous pouvez également consulter ce site pour les bascules de fonctionnalités et les bibliothèques d'indicateurs de fonctionnalités .
la source
Les indicateurs de fonctionnalités vous donnent essentiellement la possibilité d'activer et de désactiver une fonctionnalité sans apporter de modifications au code ou sans publier une nouvelle version. C'est une solution importante, en particulier pour les développeurs d'applications mobiles, car ils n'ont aucun contrôle sur les utilisateurs pour mettre à jour leur application vers une nouvelle version.
Il existe plusieurs entreprises offrant ce service aux développeurs d'applications mobiles.
la source
Dans mon entreprise, nous utilisons des indicateurs de fonctionnalités pour chaque nouvelle fonctionnalité que nous introduisons dans notre application SaaS. Outre les avantages en termes de performances, cela nous permet également de déployer progressivement de nouvelles fonctionnalités - en introduisant d'abord de nouvelles fonctionnalités aux utilisateurs expérimentés, en obtenant des commentaires de leur part et en les improvisant avant de pouvoir les déployer à tous les utilisateurs.
Cela nous permet également de personnaliser l'offre aux utilisateurs individuels - les utilisateurs expérimentés veulent toutes les fonctionnalités; les utilisateurs simples peuvent simplement vouloir les éléments de base et peuvent être déroutés par toutes les fonctionnalités complexes et puissantes. Cela permet également à notre équipe commerciale de faire des ventes incitatives.
Et bien sûr, comme d'autres l'ont souligné, si nous constatons qu'une fonctionnalité entraîne une dégradation des performances, nous pouvons simplement désactiver cette fonctionnalité (soit pour tous les clients, soit pour le client qui cause un problème).
la source