Feature Toggle — fondamenti, tipi di interruttori e applicazione

Autore: IT Sectr Pubblicato: 2026-04-13 Tempo di lettura: 8 min

Feature Toggle è un meccanismo a runtime per attivare e disattivare funzionalità dell'applicazione, consentendo agli sviluppatori di gestire la disponibilità delle funzionalità senza modificare il codice o ridistribuire. A differenza della compilazione condizionale (ifdef), il toggle funziona a livello di runtime e può essere modificato dinamicamente. Secondo Martin Fowler (2024), i feature toggles sono un elemento chiave del trunk-based development e della consegna continua. Feature toggle offre ai team flessibilità nella gestione dei rilasci e degli esperimenti.

Punti chiave

  • Feature Toggle — un interruttore dinamico che controlla il comportamento dell'applicazione tramite configurazione
  • Tipi principali: business toggles, release toggles, experiment toggles e infrastructure toggles
  • Feature Toggle vs Flag — toggle si riferisce solitamente a semplici interruttori binari, flag — a piattaforme complete
  • Integrazione CI/CD consente di verificare e testare automaticamente i toggles in ogni fase della pipeline
  • Problema principale — accumulo di stale toggles, che devono essere regolarmente controllati e rimossi

Cos'è un Feature Toggle

Feature Toggle è una tecnica in cui il codice di una nuova funzionalità viene racchiuso in una costruzione condizionale che verifica il valore di un parametro di configurazione. Se il parametro è vero — la nuova funzionalità è attiva, se è falso — viene eseguito il vecchio codice. La differenza principale da un feature flag è che un toggle è un interruttore binario che funziona secondo il principio acceso/spento, senza complesse regole di targeting o distribuzione del traffico.

Definizione e principio di funzionamento

Un feature toggle viene implementato come una semplice costruzione if attorno a una nuova funzionalità. Il valore del toggle viene memorizzato nella configurazione dell'applicazione — variabili d'ambiente, file JSON o database. All'avvio, l'applicazione carica la configurazione e la utilizza per prendere decisioni sulla visibilità delle funzionalità. Nel caso più semplice, modificare il valore di un toggle richiede il riavvio dell'applicazione, ma nei sistemi di produzione i toggles supportano solitamente il ricaricamento a caldo tramite un server di configurazione esterno o API.

Esempio di toggle semplice

Diamo un'occhiata a un'implementazione di feature toggle in JavaScript (Node.js). Il toggle è memorizzato in un file JSON di configurazione e caricato all'avvio del server. Il middleware verifica il valore del toggle prima di instradare la richiesta al gestore nuovo o vecchio. Questa implementazione consente di aggiungere nuove funzionalità al ramo principale del codice senza rompere la versione corrente dell'API.

js
const config = require("./config.json");

const toggles = {
    get(name) {
        return config.features[name] ?? false;
    },
    isEnabled(name, context) {
        const toggle = config.features[name];
        if (!toggle) return false;
        if (toggle.enabled === true) return true;
        if (toggle.percentage && context.userId) {
            return hashCode(context.userId) % 100 < toggle.percentage;
        }
        return false;
    }
};

const app = express();

app.use("/api/checkout", (req, res, next) => {
    if (toggles.isEnabled("new_checkout", req)) {
        return newCheckoutHandler(req, res);
    }
    return legacyCheckoutHandler(req, res);
});

Tipi di Feature Toggles

Pete Hodgson di ThoughtWorks identifica tre tipi principali di feature toggles, classificandoli per durata e scopo di utilizzo. Identificare correttamente il tipo di toggle aiuta a scegliere il meccanismo di archiviazione e il processo di gestione appropriati. Esaminiamo ciascun tipo nel contesto dello sviluppo mobile.

Business e Release Toggles

I Business toggles sono gli interruttori più longevi. Gestiscono regole di business disponibili solo per determinate categorie di utenti (funzionalità premium, specificità regionali). Questi toggles possono durare anni e di solito hanno una logica più complessa del semplice acceso/spento binario. I Release toggles sono interruttori temporanei per nascondere funzionalità incomplete. Il loro ciclo di vita va da pochi giorni a poche settimane. Una volta completata la funzionalità, il release toggle viene rimosso dal codice. Questi toggles sono il fondamento del trunk-based development, consentendo agli sviluppatori di fare commit sul ramo principale senza attendere il completamento di tutte le funzionalità.

Experiment e Infrastructure Toggles

Gli Experiment toggles vengono utilizzati per test A/B e rollout graduale. A differenza dei release toggles, gli experiment toggles supportano la distribuzione percentuale degli utenti e l'integrazione con sistemi di analisi. Possono durare più a lungo dei release toggles (fino a diversi mesi) ma devono anche essere rimossi dopo la conclusione dell'esperimento. Gli Infrastructure toggles sono interruttori per gestire modifiche all'infrastruttura: migrazione del database, cambio di fornitore API, modifica degli algoritmi di caching. Questi toggles richiedono particolare attenzione ai test, poiché la loro attivazione influisce sulla stabilità dell'intero servizio.

Tipo di toggleDurataPubblicoEsempio
BusinessMesi-anniPer ruoli/regioniFunzionalità premium
ReleaseGiorni-settimaneSviluppatori/QASchermata incompleta
ExperimentSettimane-mesi% di utentiTest A/B interfaccia
InfrastructureGiorni-settimaneInternoMigrazione DB

Feature Toggle vs Feature Flag

Sebbene i termini “feature toggle” e “feature flag” siano spesso usati come intercambiabili, esistono differenze concettuali tra di loro. Comprendere queste differenze aiuta a scegliere lo strumento giusto per un'attività specifica ed evitare confusione nel team. Esaminiamo le principali differenze e i casi d'uso di ciascun approccio.

Differenze nell'approccio

Feature toggle è principalmente un meccanismo tecnico: un interruttore binario incorporato nel codice dell'applicazione. Il toggle viene gestito tramite configurazione e non richiede infrastruttura esterna. Feature flag è un concetto più ampio che include una piattaforma di gestione: interfaccia utente per la configurazione, SDK per l'integrazione, monitoraggio dell'uso, analisi e auditing. I flags supportano regole di targeting complesse (per regione, versione, dispositivo), esperimenti A/B e rimozione automatica. Si potrebbe dire che il feature flag è l'evoluzione del feature toggle: i team iniziano con semplici interruttori di configurazione e passano a una piattaforma specializzata man mano che crescono.

Quando un toggle è sufficiente

Per team piccoli e progetti con un singolo servizio o monolite, i toggles di configurazione semplici sono perfettamente sufficienti. Se hai 5–10 sviluppatori e 1–2 toggles attivi alla volta, una piattaforma esterna sarebbe eccessiva. Le piattaforme di feature flags (LaunchDarkly, Unleash) diventano necessarie quando il numero di flags attivi supera 20–30, il team ha 20+ sviluppatori, o è necessario un controllo di accesso granulare per diversi segmenti di utenti. Per le applicazioni mobili, dove gli aggiornamenti client richiedono giorni, le piattaforme di feature flags offrono un vantaggio aggiuntivo — la capacità di modificare il comportamento dell'applicazione senza pubblicare una nuova versione.

Strumenti di gestione

La scelta di uno strumento di gestione dei feature toggles dipende dalla dimensione del team, dallo stack tecnologico e dai requisiti di sicurezza. Esaminiamo le opzioni dai semplici file di configurazione alle piattaforme di gestione aziendale, incluse le alternative open-source.

Integrazione in CI/CD

I feature toggles dovrebbero essere cittadini di prima classe della pipeline CI/CD. Nella fase di build, la pipeline verifica che tutti i release toggles pianificati per la rimozione nello sprint corrente siano effettivamente rimossi dal codice. Nella fase di test, vengono eseguiti test matriciali con diverse combinazioni di toggles. Nella fase di deploy, il sistema sincronizza automaticamente la configurazione dei toggles con l'ambiente di produzione. L'integrazione con PagerDuty o Opsgenie consente di creare avvisi quando vengono rilevati stale toggles o quando viene superato il numero consentito di toggles attivi.

Soluzioni popolari

Per scenari semplici, un file JSON di configurazione in Git con revisione del codice sulle modifiche è sufficiente. Un'opzione più avanzata è Togglz (Java) o Gofeature (Go) — librerie che aggiungono un'interfaccia utente minima per la gestione dei toggles. Per i sistemi di produzione, si consiglia Unleash (open-source) con SDK per tutti i linguaggi e supporto per strategie di attivazione, o Flagsmith con test A/B integrati. LaunchDarkly rimane lo standard per progetti enterprise con elevati requisiti di audit e conformità. Per le applicazioni mobili, tutte le soluzioni forniscono SDK nativi con caching e modalità offline.

Debito tecnico e rimozione

I feature toggles sono un'arma a doppio taglio. Senza disciplina di gestione, si trasformano in debito tecnico che rallenta lo sviluppo e aumenta la complessità del codice. Secondo uno studio di CodeScene (2024), il 35–50% delle basi di codice contiene stale toggles — interruttori che rimangono nel codice dopo il completamento del rollout. Esaminiamo le strategie per prevenire ed eliminare tale debito.

Rimozione dei toggles

Il processo di rimozione di un feature toggle consiste in quattro passaggi. Primo: assicurarsi che il toggle sia abilitato per il 100% del pubblico o disabilitato per lo 0% (a seconda di quale ramo di codice deve rimanere). Secondo: rimuovere tutti i controlli condizionali del toggle dal codice, lasciando solo il ramo che dovrebbe essere il comportamento di produzione. Terzo: rimuovere la definizione del toggle dal sistema di archiviazione (configurazione, database o piattaforma). Quarto: eseguire test per confermare che la rimozione non abbia rotto la funzionalità. Ogni toggle dovrebbe avere un proprietario e una data di rimozione pianificata, registrati al momento della creazione dell'interruttore.

Automazione dell'auditing

L'auditing manuale dei toggles è inefficiente a scale superiori a 50 interruttori. L'automazione si basa su tre principi: controllo CI (gli stale toggles bloccano il merge), monitoraggio (un dashboard che mostra l'età e lo stato di ciascun toggle), avvisi (notificare il proprietario se un toggle non è cambiato per N giorni). Gli strumenti di analisi statica del codice (SonarQube, plugin ESLint) possono rilevare toggles sempre accesi o sempre spenti nel codice — un chiaro segno di stale toggle. Il controllo finale è la revisione del codice, dove il revisore deve verificare che il nuovo toggle sia effettivamente necessario e che il vecchio ramo di codice verrà rimosso.

go
package toggles

type Toggle struct {
    Name      string
    Enabled   bool
    Owner     string
    CreatedAt time.Time
    TTL       time.Duration
}

type ToggleManager struct {
    store map[string]*Toggle
}

func NewToggleManager() *ToggleManager {
    return &ToggleManager{store: make(map[string]*Toggle)}
}

func (m *ToggleManager) IsEnabled(name string) bool {
    t, ok := m.store[name]
    if !ok {
        return false
    }
    return t.Enabled
}

func (m *ToggleManager) GetStaleToggles() []string {
    var stale []string
    for name, t := range m.store {
        if t.Enabled && time.Since(t.CreatedAt) > t.TTL {
            stale = append(stale, name)
        }
    }
    return stale
}

Domande frequenti

In cosa differisce un feature toggle da un feature flag?

I termini sono spesso usati in modo intercambiabile, ma tecnicamente feature toggle è un interruttore binario nel codice (una condizione if che verifica un valore di configurazione). Feature flag è un concetto più ampio che include una piattaforma di gestione con interfaccia utente, SDK, analisi e regole di targeting complesse. Un toggle non richiede infrastruttura esterna; un flag di solito sì.

Con quale frequenza rimuovere i toggles vecchi?

I release toggles dovrebbero essere rimossi entro 1–2 settimane dal completamento del rollout. Gli experiment toggles — immediatamente dopo la conclusione del test A/B. I business toggles richiedono auditing regolare (trimestrale). Si consiglia di impostare un controllo CI che blocchi il merge se una PR aggiunge un nuovo toggle senza un'attività di rimozione nel task tracker.

Si possono usare toggles per applicazioni mobili?

Sì, i feature toggles sono attivamente utilizzati nello sviluppo mobile. Lo strumento principale è Firebase Remote Config, che consente di gestire dinamicamente gli interruttori senza pubblicare una nuova versione dell'applicazione. Alternative: SDK LaunchDarkly per iOS/Android, SDK Unleash, un server toggle personalizzato con API REST. È importante implementare la memorizzazione nella cache dei valori per la modalità offline.

Come testare il codice con feature toggles?

Il metodo principale è il test matriciale: eseguire tutti i test con il toggle attivato e disattivato. Per N toggles, il test matriciale completo richiede 2^n esecuzioni, quindi in pratica vengono selezionate combinazioni critiche. I test unitari dovrebbero mockare il valore del toggle. I test di integrazione verificano scenari specifici. Un passaggio viene aggiunto al CI che esegue test con una combinazione casuale di toggles per rilevare interazioni impreviste.

Quali sono i rischi dei feature toggles?

Rischi principali: 1) stale toggles — il codice con entrambi i rami (acceso/spento) diventa complesso e difficile da mantenere; 2) complessità combinatoria dei test — ogni toggle raddoppia il numero di stati; 3) codice morto — il vecchio ramo rimane nel codice dopo che il toggle è stato permanentemente attivato; 4) sicurezza — gli interruttori che controllano l'accesso creano vulnerabilità se mal configurati. Tutti i rischi sono gestibili con disciplina e automazione.

Riepilogo

  • Feature Toggle — un interruttore binario di funzionalità controllato tramite la configurazione dell'applicazione
  • Tipi principali: business (mesi-anni), release (giorni-settimane), experiment (settimane-mesi), infrastructure (giorni-settimane)
  • Feature Toggle vs Flag — toggle è più semplice (condizione if + configurazione), flag include una piattaforma di gestione completa
  • Integrazione CI/CD obbligatoria: controllo stale toggles, test matriciali, sincronizzazione configurazione
  • Stale toggles — il rischio principale: 35–50% delle basi di codice contengono interruttori inutilizzati
  • Rimozione toggle richiede un processo: confermare lo stato, rimuovere codice, rimuovere configurazione, eseguire test
  • Automazione dell'auditing tramite CI, dashboard e analisi statica del codice previene l'accumulo di debito tecnico

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.

Discuti il progetto

Leggi anche