LaunchDarkly è una piattaforma di gestione dei flag di funzionalità che consente agli sviluppatori di app mobili di attivare e disattivare funzionalità senza ridistribuzione. Secondo LaunchDarkly, 2024, oltre 4.000 aziende utilizzano il servizio per rilasci sicuri di funzionalità, test A/B e rollout graduale in tempo reale.
Punti chiave
LaunchDarkly è una piattaforma di gestione dei flag di funzionalità fondata nel 2014 da Catamorphic Corp. L'obiettivo principale del servizio è dare ai team di sviluppo la possibilità di attivare, disattivare e configurare le funzionalità dell'applicazione in tempo reale senza distribuire nuovo codice.
A differenza dell'approccio tradizionale, dove il rilascio di una nuova funzionalità richiede la pubblicazione di una versione nell'app store, LaunchDarkly consente di modificare il comportamento da remoto. Per lo sviluppo mobile, questo è particolarmente importante: la revisione nell'App Store e Google Play richiede da alcune ore a un giorno, mentre un flag può essere commutato in pochi secondi.
L'architettura di LaunchDarkly si basa su tre componenti: il server dei flag, gli SDK client e la dashboard. Il server memorizza le configurazioni dei flag, le regole di targeting e i segmenti di utenti. L'SDK mantiene una connessione SSE persistente con il server per ricevere aggiornamenti in tempo reale.
Quando un flag viene modificato nella dashboard, il server invia un aggiornamento a tutti gli SDK connessi. La latenza è di 200–500 millisecondi. Quando la connessione viene persa, l'SDK utilizza l'ultimo stato memorizzato nella cache fino al ripristino del canale. Ciò garantisce che l'applicazione continui a funzionare con le impostazioni più recenti disponibili al momento della disconnessione.
La dashboard di LaunchDarkly fornisce un'interfaccia visiva per creare e gestire i flag. La dashboard mostra lo stato attuale di ogni flag, la cronologia delle modifiche con audit di chi ha modificato la configurazione e quando, oltre alle metriche di utilizzo. Regole separate possono essere configurate per ogni ambiente: un flag può essere attivato al 100% in staging e al 5% in produzione.
Feature flag è un interruttore denominato con regole e obiettivi. I flag possono essere booleani, multivariati e JSON. Le regole definiscono le condizioni di attivazione: ad esempio, “attiva per il 10% degli utenti Android 12 dalla Germania.” I segmenti raggruppano gli utenti per versione del sistema operativo, regione, modello di dispositivo e attributi personalizzati.
Ogni flag ha ambienti: sviluppo, staging e produzione. Ciò consente di testare una nuova funzionalità in un ambiente isolato prima di attivarla per gli utenti reali. Le regole degli ambienti sono configurate indipendentemente: un flag può essere attivato in staging e disattivato in produzione.
LaunchDarkly fornisce SDK nativi per Android, iOS, React Native e Flutter. Ogni SDK richiede una configurazione minima: una chiave SDK e un identificatore utente. La libreria gestisce automaticamente connessioni, caching e gestione degli errori.
Per connettersi, creare un'istanza di LDClient in Application.onCreate. Il client accetta una configurazione con una chiave mobile e il contesto dell'utente. Dopo l'inizializzazione, l'applicazione chiama una variazione di flag in qualsiasi punto del codice utilizzando il metodo boolVariation.
class MyApplication : Application() {
private lateinit var ldClient: LDClient
override fun onCreate() {
super.onCreate()
val config = LDConfig.Builder("mobile-key-abc123")
.build()
val user = LDUser.Builder("user-unique-id")
.build()
ldClient = LDClient.init(this, config, user)
}
}
Dopo l'inizializzazione, la verifica di un flag viene eseguita con un singolo metodo. BoolVariation restituisce il valore secondo le regole del flag. Il valore predefinito viene utilizzato se l'SDK non riesce a ottenere la configurazione. Il metodo boolVariationDetail restituisce inoltre il motivo per cui il flag ha assunto quel valore.
val ldClient = LDClient.get()
val showNewFeature = ldClient.boolVariation(
"new-checkout-flow",
false
)
if (showNewFeature) {
showNewCheckoutScreen()
} else {
showLegacyCheckoutScreen()
}
I test A/B in LaunchDarkly sono implementati tramite flag multivariati. A ogni variante viene assegnata una percentuale di traffico: ad esempio, il 50% degli utenti vede la schermata vecchia (variante A) e il 50% vede quella nuova (variante B). La piattaforma fissa l'utente, garantendo che cada sempre nello stesso gruppo.
Il rollout graduale aumenta progressivamente la percentuale di utenti con accesso a una funzionalità. Un programma tipico: 1% — primo giorno, 5% — secondo, 25% — terzo, 100% — dopo una settimana. Se viene rilevato un errore, il flag viene disattivato istantaneamente per tutti. LaunchDarkly si integra con Amplitude, Mixpanel e Google Analytics per monitorare le metriche di ogni variazione.
La piattaforma fornisce un sistema di esperimenti integrato che calcola automaticamente la significatività statistica delle differenze tra le varianti. Metriche disponibili: conversione, retention, numero di sessioni, errori ed eventi personalizzati. I risultati vengono visualizzati nella dashboard con visualizzazione degli intervalli di confidenza. Gli esperimenti possono essere eseguiti sia sul traffico di produzione che su segmenti di utenti dedicati.
L'integrazione di LaunchDarkly con le piattaforme di analisi è un altro vantaggio. I dati dei flag vengono inviati automaticamente ad Amplitude, Mixpanel, Google Analytics o a una pipeline di dati personalizzata tramite l'API Data Export. Ciò consente di creare report sull'impatto di ogni funzionalità sulle metriche chiave dell'applicazione. LaunchDarkly supporta anche i webhook per notificare ai sistemi esterni le modifiche allo stato dei flag.
Esaminiamo il ciclo completo: aggiunta della dipendenza, inizializzazione e verifica di un flag per la telemetria degli arresti anomali. La funzionalità dovrebbe essere attiva solo per i tester, non per gli utenti reali. L'SDK di LaunchDarkly per Android è disponibile tramite Maven Central. La versione 5.x supporta Kotlin Coroutines e Jetpack Compose per la ricezione reattiva degli aggiornamenti dei flag.
Per le applicazioni iOS, LaunchDarkly fornisce supporto per Swift Package Manager e CocoaPods. L'SDK Swift utilizza async/await per l'inizializzazione asincrona e il framework Combine per la sottoscrizione alle modifiche. Entrambi gli SDK (Android e iOS) supportano la sincronizzazione in background e la memorizzazione nella cache locale per il funzionamento offline.
// app/build.gradle
dependencies {
implementation "com.launchdarkly:launchdarkly-android-sdk:5.2.0"
}
Nella classe CrashReporter verifichiamo il flag crash-reporting-enabled. Se il flag è attivato per l'utente corrente, iniziamo a inviare i report di arresto anomalo. L'SDK riceverà automaticamente il nuovo stato quando cambia sul server, ma un singolo controllo è sufficiente per l'inizializzazione.
class CrashReporter {
fun init() {
val client = LDClient.get()
if (client.boolVariation("crash-reporting-enabled", false)) {
Crashlytics.start()
}
}
}
Scenari di successo: gestione del flusso di pagamento con disattivazione istantanea in caso di guasti del provider, rollout graduale delle modifiche all'interfaccia utente con monitoraggio delle metriche, personalizzazione dei contenuti per segmenti. Secondo il blog ufficiale di LaunchDarkly, i team riducono il tempo di recupero dagli errori da ore a minuti.
Anti-pattern: utilizzare i flag per logica condizionale permanente (i flag sono temporanei), memorizzare segreti negli attributi dei flag, creare regole sovrapposte. Raccomandazione: rimuovere il flag dal codice dopo il completamento del rollout — ciò previene debito tecnico e complessità del codebase. Un altro errore comune è utilizzare i flag come interruttori a lunga durata che non vengono mai rimossi dal codice dopo la stabilizzazione della funzionalità.
Una corretta strategia di gestione dei flag include un piano di rimozione per ogni nuovo flag. LaunchDarkly fornisce strumenti integrati per rilevare i flag inutilizzati: un flag è considerato inutilizzato se l'SDK non ne ha verificato il valore per più di 30 giorni. Tali flag vengono contrassegnati nella dashboard e possono essere rimossi dal codice in sicurezza.
Per progetti piccoli con un singolo team, LaunchDarkly può essere eccessivo — un semplice condizionale nel codice o Firebase Remote Config è sufficiente. Scegli la piattaforma quando hai bisogno di segmentazione complessa, audit delle modifiche, esperimenti A/B o gestione dei flag multi-team. Per startup e progetti MVP, LaunchDarkly offre un piano Starter gratuito con limiti sul numero di flag e MAU.
La compatibilità di LaunchDarkly con gli strumenti esistenti è un criterio di selezione importante. La piattaforma si integra con Jira, Slack, PagerDuty, Datadog e altri servizi tramite webhook e API. I team che già utilizzano questi strumenti ottengono un'integrazione perfetta senza infrastruttura aggiuntiva per il monitoraggio e gli avvisi quando lo stato dei flag cambia. LaunchDarkly supporta anche un provider Terraform per la gestione dei flag come codice (Flags as Code) — ciò consente di memorizzare la configurazione dei flag in Git e di sottoporla a revisione del codice prima dell'applicazione.
Domande frequenti
LaunchDarkly offre un piano Freemium con limiti sul numero di flag e MAU. I piani commerciali per i team partono da $150 al mese e includono flag illimitati, audit delle modifiche e integrazione con Jira e Slack.
La piattaforma supporta oltre 40 SDK, inclusi Android nativo (Kotlin/Java), iOS (Swift/Objective-C), React Native e Flutter. Tutti gli SDK mobili funzionano tramite l'API Streaming con caching nella memoria locale.
Sì, LaunchDarkly dispone di un sistema di esperimenti integrato con flag multivariati, distribuzione del traffico e calcolo automatico della significatività statistica. L'integrazione con Amplitude, Mixpanel e Google Analytics è supportata.
Quando la connessione viene persa, l'SDK utilizza i valori dei flag memorizzati nella cache dalla memoria locale. Dopo il ripristino della connessione, l'SDK si sincronizza con il server e applica gli stati attuali dei flag.
LaunchDarkly fornisce test A/B, flag multivariati, segmentazione avanzata, audit delle modifiche e SDK per linguaggi lato server. Firebase Remote Config è più semplice e gratuito, ma non supporta esperimenti multivariati o audit dettagliati.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche