Come distribuire una funzione solo a pochi utenti selezionati

11

Un buon esempio di ciò che sto cercando di fare è la nuova funzione Timeline di Facebook. All'inizio, solo pochi eletti potevano accedere alla timeline. Poiché la funzionalità si è consolidata nel modo in cui funzionava e sono stati corretti errori, gli utenti aggiuntivi potevano accedere alla funzionalità. In un secondo momento, un ampio gruppo di utenti è stato autorizzato ad accedere alla funzione e ora è una caratteristica generale per tutti gli utenti. In che modo un team di sviluppo gestisce questo tipo di funzionalità?

Ho giocato con l'idea di utilizzare le impostazioni di configurazione per controllare in modo selettivo l'accesso se qualcosa è in fase di test o in produzione tramite un file di configurazione e istruzioni condizionali if nel codice. Ora, mentre questo va bene per le funzionalità semplici, credo che se provassimo ad implementarlo in un set di funzionalità più ampio sarebbe diventato ingestibile.

Quale sarebbe il modo migliore per gestire i roll out delle funzionalità in questo modo?

    
posta Chris 14.05.2012 - 23:17
fonte

3 risposte

2

How does a development team manage this type of feature roll out?

È facile immaginare che un sistema come Facebook sia guidato in gran parte da database. Tutti i dati dell'utente sono ovviamente archiviati nei database e questo probabilmente include informazioni su come eseguire il rendering dei dati dell'utente. È impossibile sapere esattamente come viene impostato il database di Facebook, ma deve essere il caso che una funzionalità come la Timeline venga distribuita agli utenti in modo graduale selezionando periodicamente gli utenti nel database, in base a determinati criteri e modificando il valore ( s) di alcuni campi.

Ad esempio, forse hanno un campo nella tabella utente come timeline_status che ha valori come not offered , offered , preview e public . Sulla base di ciò, il sistema di Facebook potrebbe decidere come eseguire il rendering della pagina delle informazioni dell'utente. Il team FB potrebbe quindi provare la funzione Timeline selezionando un gruppo di utenti e modificando il valore di quel campo.

In pratica, sono sicuro che è un po 'più complicato di così, ma l'idea principale è che un account utente è solo dati, e alcuni di questi dati possono determinare quali funzionalità sono disponibili. Il lancio di una nuova funzionalità è quindi solo una questione di aggiornamento dei record dell'utente nel database.

    
risposta data 15.05.2012 - 10:49
fonte
9

... and conditional if statements in the code.

Sì, è il modo sbagliato per farlo. Qualunque sia la caratteristica X se è configurabile, deve estendere o sostituire qualcosa. Fallo nel codice. Ad esempio, la cosa FB potrebbe avere qualcosa del genere:

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

Quindi devi creare una fabbrica che renda gli oggetti UserPageView quando visiti una pagina utente in base alla configurazione. Avresti attivato quella vista. Nessun ramo sciocco.

Vuoi farlo in questo modo perché se qualcuno ti chiedesse di cambiarlo una volta, lo chiederanno di nuovo. Inoltre chiederanno di cambiare un'altra cosa. Riddle la tua architettura con casi speciali e se è tutto il posto e avrai una ciotola gigante di spaghetti non manipolabili e non manipolabili piuttosto che un prodotto ricco e ricco di funzionalità.

    
risposta data 15.05.2012 - 07:54
fonte
1

Pensa alla funzione nello stesso modo in cui pensi a una funzione di amministrazione su un sito wed.

Quando una pagina viene caricata, controlla se l'utente ha i privilegi giusti per la funzione, se lo carica.

Facebook sembra utilizzare un approccio basato sulla posizione quando distribuisce nuove funzionalità. Questo potrebbe essere semplice come guardare l'indirizzo IP dell'utente per trovare la loro posizione.

    
risposta data 15.05.2012 - 11:08
fonte

Leggi altre domande sui tag