Comment déployer une fonctionnalité à seulement quelques utilisateurs sélectionnés

11

Un bon exemple de ce que j'essaie de demander serait la nouvelle fonctionnalité Timeline de Facebook. Au début, seuls quelques privilégiés étaient autorisés à accéder à la chronologie. Au fur et à mesure que la fonctionnalité se solidifiait dans son fonctionnement et que des bogues y étaient corrigés, des utilisateurs supplémentaires étaient autorisés à accéder à la fonctionnalité. À une date ultérieure, un grand groupe d'utilisateurs ont été autorisés à accéder à la fonctionnalité et maintenant, c'est une fonctionnalité générale pour tous les utilisateurs. Comment une équipe de développement gère-t-elle ce type de fonctionnalité?

J'ai joué avec l'idée d'utiliser des paramètres de configuration pour contrôler sélectivement l'accès si quelque chose est en test ou en production via un fichier de configuration et des instructions if conditionnelles dans le code. Maintenant, bien que cela soit acceptable pour des fonctionnalités simples, je pense que si nous essayions de l'implémenter dans un ensemble de fonctionnalités plus large, cela deviendrait ingérable.

Quelle serait la meilleure façon de gérer les déploiements de fonctionnalités de cette manière?

Chris
la source
3
ACL & RBAC sont deux façons (très similaires) de faire ce que vous cherchez.
yannis
@YannisRizos: Certes, c'est une petite / courte réponse, mais je pense que c'est légitimement utile. Vous devez le poster comme réponse.
Steven Evers
N'est-ce pas fondamentalement la même pour toutes les fonctionnalités et pas seulement pour les nouvelles? Selon les informations d'identification, l'utilisateur a accès à x nombre d'options? Par exemple, le niveau administrateur peut modifier les paramètres et le niveau grognement ne peut saisir que des données?
Pieter B

Réponses:

2

Comment une équipe de développement gère-t-elle ce type de fonctionnalité?

Il est facile de deviner qu'un système comme Facebook est largement alimenté par des bases de données. Toutes les données utilisateur sont évidemment stockées dans des bases de données, et cela inclut probablement des informations sur la façon de rendre les données de l'utilisateur. Il est impossible de savoir exactement comment la base de données de Facebook est configurée, mais il doit être le cas qu'une fonctionnalité comme Timeline soit déployée progressivement aux utilisateurs en sélectionnant périodiquement des utilisateurs dans la base de données, en fonction de certains critères, et en modifiant la valeur ( s) de certains domaines.

Par exemple, peut - être ils ont un champ dans la table utilisateur comme timeline_statusqui a des valeurs telles que not offered, offered, previewet public. Sur cette base, le système de Facebook pourrait décider de la façon de rendre la page d'informations de l'utilisateur. L'équipe FB pourrait ensuite essayer la fonctionnalité Chronologie en sélectionnant un groupe d'utilisateurs et en modifiant la valeur de ce champ.

En pratique, je suis sûr que c'est un peu plus compliqué que cela, mais l'idée centrale est qu'un compte d'utilisateur n'est que des données, et certaines de ces données peuvent déterminer les fonctionnalités disponibles. Déployer une nouvelle fonctionnalité n'est alors qu'une question de mise à jour des enregistrements utilisateur dans la base de données.

Caleb
la source
9

... et conditionnelle if dans le code.

Ouais, c'est la mauvaise façon de le faire. Quelle que soit la fonctionnalité X, si elle est configurable, elle doit étendre ou remplacer quelque chose. Faites-le dans le code. Par exemple, la chose FB pourrait avoir quelque chose comme ceci:

class UserPageView;
class HatedTimelineView : UserPageView;
class OldViewEveryoneLikes : UserPageView;

Ensuite, vous créez une fabrique qui crée des objets UserPageView lors de la visite d'une page utilisateur en fonction de la configuration. Vous activez cette vue. Pas de branches idiotes.

Vous voulez le faire de cette façon parce que si quelqu'un vous demande de le changer une fois, il le demandera à nouveau. De plus, ils demanderont de changer autre chose. Énigmez votre architecture avec des cas spéciaux et si c'est partout et vous aurez un bol géant de spaghettis moisis non durables plutôt qu'un produit riche en fonctionnalités et mature.

Edward Strange
la source
Vous devez utiliser des instructions if conditionnelles. Sinon, comment votre usine sait-elle quelle UserPageView retourner? Cela dit, je conviens que si mettre des instructions tout au long du code est une mauvaise idée, vous voulez les centraliser.
briddums
1

Pensez à la fonctionnalité de la même manière que vous penseriez à une fonctionnalité d'administration sur un site Web.

Lorsqu'une page est en cours de chargement, vérifiez si l'utilisateur a les bons privilèges pour la fonctionnalité, le cas échéant, chargez-la.

Facebook semble utiliser une approche basée sur la localisation lors du déploiement de nouvelles fonctionnalités. Cela peut être aussi simple que de regarder l'adresse IP des utilisateurs pour trouver leur emplacement.

Gordon
la source