Invece di utilizzare i rami , ti consigliamo di utilizzare i flag di funzionalità. Essenzialmente, questi sono solo condizionali nel codice che determinano se una particolare parte del codice viene eseguita o meno. È possibile controllare lo stato della funzionalità tramite la configurazione, che può essere semplicistica come un'impostazione di app nel proprio Web.config o complessa come un servizio di terze parti come LaunchDarkly, che offre un controllo granulare su cui gli utenti possono accedere a quali funzionalità che ora.
L'unico svantaggio di mostrare le bandiere è che sono intrinsecamente un debito tecnico. In sostanza, si dispone di codice che potrebbe non essere mai eseguito nella base di codice e tale codice aumenta nel tempo. Alcune aziende in realtà abbracciano questo, però. Facebook, ad esempio, fa un uso massiccio di flag di funzionalità e non li pulisce mai. Personalmente, penso che sia un po 'folle, ma suppongo che funzioni per loro. Per il resto di noi, la raccomandazione comune è che quando viene introdotto un flag di funzionalità, si aggiunge anche un PBI per ripulirlo. Quindi, una volta implementata completamente questa funzione (e forse dato un po 'di tempo per assicurarsi che non ci siano problemi importanti), si aggiunge il PBI a uno sprint per sbarazzarsi del debito tecnico. Non è l'ideale, ma è gestibile.
Il debito tecnico a parte, le bandiere caratteristiche possono darti un'enorme libertà. Puoi effettivamente unire il codice in master, ma scegli di non distribuire effettivamente la funzione . In questo modo, non devi preoccuparti di gestire le fusioni con il codice che è settimane o mesi fuori fase rispetto al master, ma il prodotto reale non è cambiato.
Meglio, puoi semplicemente applicare la patch per abilitare le funzionalità, che è molto meno coinvolta degli aggiornamenti completi. Ad esempio, supponiamo che stai seguendo il tipico ciclo di rilascio monolitico. Hai un intero lotto di nuove funzionalità, alcune delle quali richiedono modifiche fondamentali al prodotto principale. Il processo di aggiornamento deve toccare molti file e apportare molte modifiche per abilitare tutte queste nuove funzionalità. Quindi, c'è un problema, un grosso problema, un problema per il quale non puoi semplicemente inserire una soluzione rapida. Ora devi gestire i downgrade e capire come far tornare gli utenti in uno stato utilizzabile. È una bestia di un problema.
Ora, diamo un'occhiata all'approccio del flag di funzionalità. Dal momento che tutto il codice per queste funzionalità è dietro i flag. Basta fare un rilascio che li accende. Ovviamente, se non fossero effettivamente nell'ultima versione, sarà necessario inserire il codice, che potrebbe richiedere lo stesso aggiornamento monolitico. Tuttavia, dove le cose vanno molto meglio per te è quando le cose esplodono. Questa volta, non è necessario eseguire il downgrade degli utenti e pianificare una nuova release monolitica. Invece, si rilascia semplicemente una patch che disabilita le funzionalità che causano il problema. L'applicazione ora ritorna al modo in cui ha fatto le cose prima. Quando correggi il problema, puoi eseguire il rollforward, solo la correzione e la funzionalità, invece di dover ri-rilasciare l'intero prodotto.