Feature freeze e code freeze nello sviluppo di app: essenza, differenze e ruolo

Autore: IT Sectr Pubblicato: 2026-08-06 Tempo di lettura: 8 min

Feature freeze (congelamento delle funzionalità) e code freeze (congelamento del codice) sono pratiche di congelamento delle modifiche nella base di codice prima del rilascio di un'app mobile. Il feature freeze vieta l'aggiunta di nuove funzionalità ma consente correzioni di bug e refactoring, mentre il code freeze blocca completamente tutte le modifiche, fissando il punto di compilazione della build di rilascio. Secondo la Guida Trunk Based Development, la durata tipica di un congelamento varia da 24 ore a una settimana, a seconda della complessità del progetto. Feature freeze riduce il rischio di regressione e consente al team di concentrarsi sulla stabilizzazione del codice prima del rilascio.

Punti chiave

  • Feature freeze — vieta nuove funzionalità, correzioni e refactoring consentiti
  • Code freeze — blocco completo di tutte le modifiche al codice prima del rilascio
  • Durata dipende dalle dimensioni del team e dalla frequenza dei rilasci
  • BAU freeze — congelamento delle modifiche in moduli specifici durante lo sviluppo parallelo
  • Automazione dei congelamenti tramite CI/CD previene errori umani

Cos'è un feature freeze?

Feature freeze è un divieto temporaneo di aggiungere nuove funzionalità alla base di codice, introdotto prima di un rilascio pianificato. Il team smette di unire funzionalità e si dedica alla correzione di bug, all'ottimizzazione e al perfezionamento del codice esistente. Gli sviluppatori completano le funzionalità incomplete solo nell'ambito delle correzioni di bug, senza espandere l'ambito.

Il feature freeze risolve il problema delle funzionalità in corso (work-in-progress) che non arrivano al rilascio ma sono già state parzialmente unite nel ramo principale. Se le nuove funzionalità continuano a essere unite, aumenta il rischio di regressione: ogni nuova integrazione richiede il ritest dei moduli già completati. Feature freeze fissa l'ambito del rilascio, trasformandolo da un bersaglio mobile in un insieme stabile di funzionalità.

Un chiarimento importante: feature freeze ≠ code freeze. Durante un feature freeze, sono consentiti correzioni di bug, refactoring, aggiornamenti delle dipendenze e documentazione. Sono vietate solo le nuove funzionalità visibili all'utente, ovvero qualsiasi codice che modifichi il comportamento dell'applicazione dal punto di vista dell'utente. Verifica nella code review: se una PR aggiunge una nuova schermata, pulsante o metodo API, viene respinta fino alla rimozione del congelamento.

Cos'è un code freeze e in cosa differisce dal feature freeze

Code freeze è una pratica più rigorosa in cui tutte le modifiche al codice sono completamente vietate. Anche le correzioni di bug non sono consentite a meno che non siano critiche. Il code freeze viene introdotto per un breve periodo (di solito 24-48 ore) e garantisce che la build di rilascio sia assemblata da un insieme fisso di commit.

La differenza tra feature freeze e code freeze risiede nel livello di controllo. Il feature freeze gestisce l'ambito: cosa esattamente sarà incluso nel rilascio. Il code freeze gestisce la qualità: elimina il rischio di introdurre un nuovo bug il giorno prima del rilascio. In pratica, molti team utilizzano un modello a due fasi: 1-2 settimane prima del rilascio, feature freeze; 24-48 ore prima, code freeze. Code freeze è particolarmente rilevante per le app mobili, dove la build deve essere caricata nello store diversi giorni prima della data di rilascio pianificata.

L'eccezione al code freeze riguarda le correzioni di sicurezza per vulnerabilità critiche (CVE con punteggio 9+). Tali modifiche passano attraverso un processo di emergenza con revisione del codice accelerata obbligatoria e notifica al team. Tutte le altre modifiche vengono rimandate al prossimo ciclo di rilascio.

Feature freeze vs code freeze: confronto

CriterioFeature freezeCode freeze
Nuove funzionalitàVietateVietate
Correzioni di bugConsentiteVietate
RefactoringConsentitoVietato
Aggiornamenti dipendenzeConsentitiVietati
DocumentazioneConsentitaConsentita
Durata tipica1-2 settimane24-48 ore

La scelta tra feature freeze e code freeze dipende dalla maturità del team e dalla frequenza dei rilasci. I team con CI/CD e feature flags possono aver bisogno solo di un code freeze di 24 ore, mentre i team con rilasci mensili spesso utilizzano entrambi i congelamenti in sequenza.

Tipi di congelamenti: totale, parziale e BAU-freeze

Oltre al feature freeze totale e al code freeze, esistono opzioni più flessibili. Partial feature freeze (congelamento parziale) blocca le nuove funzionalità solo in determinati moduli, ad esempio nel modulo di pagamento o nel modulo di autorizzazione, lasciando gli altri componenti aperti alle modifiche.

BAU-freeze (business as usual freeze) è un'opzione di compromesso in cui vengono vietate solo le grandi funzionalità con un volume di modifiche superiore a una certa soglia (ad esempio, 500 righe di codice). I miglioramenti minori, le regolazioni dell'interfaccia utente e le correzioni di bug continuano a essere uniti. BAU-freeze è comodo per progetti con distribuzione continua, dove un arresto completo dello sviluppo per una settimana non è economicamente sostenibile.

Esiste anche il concetto di deployment freeze (congelamento della distribuzione) — un arresto completo delle distribuzioni in produzione, tipico per la stagione delle festività (vacanze di Natale, Black Friday). Durante questo periodo, anche gli hotfix vengono bloccati a meno che non siano legati alla sicurezza. Il deployment freeze dura di solito 1-2 settimane ed è coordinato a livello aziendale.

Quando introdurre un congelamento e quanto dura

Il momento ottimale per introdurre un feature freeze è dopo il completamento del codice, quando tutte le funzionalità pianificate sono state unite e sono in QA. Il momento esatto dipende dal ciclo di rilascio: per uno sprint di due settimane, il feature freeze viene introdotto 3-4 giorni prima della data di rilascio; per un rilascio mensile, 7-10 giorni prima. Code freeze viene introdotto 24-48 ore prima dell'orario pianificato di compilazione della build di rilascio.

La durata del congelamento dovrebbe essere il minimo sufficiente per stabilizzare il codice. Un congelamento troppo lungo (più di 2 settimane) demotiva il team e crea un accumulo di funzionalità non unite, ciascuna delle quali aumenta il rischio di conflitti dopo la rimozione del congelamento. Un congelamento troppo breve (meno di 24 ore per un feature freeze) non lascia abbastanza tempo per test e correzioni approfonditi.

La pratica consigliata è di impostare il congelamento non per data di calendario ma per stato della base di codice. Il feature freeze viene introdotto quando il numero di bug aperti per il rilascio supera una soglia (ad esempio, 10 bug critici). Code freeze — quando la build supera con successo i test di fumo e la suite di regressione. Time-based freeze (data fissa) rimane lo standard per i settori regolamentati (fintech, medtech) in cui la data di rilascio è approvata da un regolatore.

Automazione dei congelamenti tramite CI/CD e Git

Il controllo manuale dei congelamenti è una fonte di errori: uno sviluppatore potrebbe accidentalmente unire una PR che dovrebbe attendere la rimozione del congelamento. L'automazione risolve questo problema tramite regole di protezione dei rami Git e pipeline CI/CD. Nel fornitore Git (GitHub, GitLab, Bitbucket), vengono configurate regole che bloccano le unioni nel ramo di rilascio senza un tag speciale o l'approvazione del release manager.

Pipeline CI/CD verifica lo stato del congelamento prima di compilare la build. In Jenkins, GitLab CI o GitHub Actions, viene aggiunto un passaggio che legge un file di configurazione con il calendario dei congelamenti e rifiuta le build se la data corrente cade nel periodo di congelamento. Un'alternativa è un feature flag nel pannello di amministrazione che blocca la distribuzione in produzione.

yaml
# .github/workflows/check-freeze.yml
name: Check Freeze Status
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  check-freeze:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Check freeze status
        run: node .github/scripts/freeze-check.js
      - name: Block PR if frozen
        if: failure()
        run: echo "Feature freeze is active. PR blocked." && exit 1

Lo script di esempio freeze-check.js legge un JSON con il calendario dei congelamenti dalla radice del repository. Se la data corrente cade nell'intervallo tra start_date e end_date per il ramo specificato, la pipeline fallisce con un messaggio sullo stato del congelamento. Git branch protection aggiunge una seconda barriera: anche se la pipeline non si è attivata, la regola non consente di unire la PR senza approvazione.

Errori comuni nell'implementazione dei congelamenti

Il primo errore è un congelamento senza criteri chiari di rimozione. Il team congela il codice ma non definisce quali condizioni devono essere soddisfatte per scongelare: zero bug critici, suite di regressione superata, approvazione del product manager. Senza criteri, il congelamento può protrarsi per settimane. La definizione di completamento per il congelamento dovrebbe essere documentata e nota a ogni sviluppatore.

Il secondo errore sono troppe eccezioni al congelamento. Ogni eccezione (“questa PR non è una funzionalità, è debito tecnico”) offusca il confine del congelamento. Se le eccezioni superano il 20% del flusso normale di PR, il congelamento non funziona. Il team semplicemente rinomina le funzionalità come correzioni di bug per aggirare il blocco.

Il terzo errore è ignorare i release candidate. Se il team non costruisce build candidate di rilascio e distribuisce direttamente in produzione dopo il code freeze, lo scopo del congelamento viene perso: i bug vengono scoperti dagli utenti. Il release candidate dovrebbe essere costruito prima del code freeze, testato da QA e in staging, e solo dopo la conferma della qualità viene introdotto il code freeze.

Il quarto errore è il fattore umano nel controllo manuale. Uno sviluppatore potrebbe dimenticare di verificare lo stato del congelamento prima dell'unione, un release manager potrebbe perdere una notifica. L'unica soluzione affidabile è il blocco automatico a livello del fornitore Git o CI/CD, eliminando l'errore umano.

Domande frequenti

Si possono applicare hotfix durante un feature freeze?

Sì, gli hotfix per bug critici (crash, sicurezza, perdita di dati) sono consentiti durante un feature freeze. Tuttavia, l'hotfix deve passare attraverso una revisione del codice accelerata e non deve contenere nuove funzionalità. Hotfix viene unito tramite un ramo separato dall'ultimo tag stabile, non attraverso il ramo develop principale.

Quanto dovrebbe durare un feature freeze per un'app mobile?

Per le app mobili, la durata ottimale del feature freeze è di 3-7 giorni prima della data di rilascio pianificata. Code freeze — 24-48 ore prima della compilazione della build di rilascio. La durata dipende dal ciclo di rilascio: più breve per uno sprint di due settimane, più lunga per un rilascio mensile.

In cosa differisce il deployment freeze dal code freeze?

Il deployment freeze blocca qualsiasi distribuzione in produzione, inclusi gli hotfix, ed è solitamente legato alla stagione delle festività o a eventi importanti. Il code freeze blocca le modifiche al codice, ma la distribuzione di una build già costruita può essere consentita. Deployment freeze è una pratica più rigorosa applicata a livello di intera azienda.

I congelamenti sono necessari con la distribuzione continua?

Con una distribuzione continua matura, i congelamenti possono essere ridotti a un code freeze di 24 ore prima del rilascio o sostituiti con feature flags. Tuttavia, anche i team CD utilizzano congelamenti parziali per i moduli critici (pagamenti, autorizzazione). CD non elimina i congelamenti ma li rende più brevi e automatizzati.

Chi è responsabile del rispetto del congelamento nel team?

Di solito, la responsabilità ricade sul release manager o sul tech lead. Nei team piccoli (fino a 10 persone), uno sviluppatore senior può assumere questo ruolo, verificando tutte le PR prima dell'unione. Il release manager è anche responsabile della comunicazione delle date di congelamento al team e alle parti interessate.

Riepilogo

  • Feature freeze — vieta nuove funzionalità prima del rilascio, correzioni consentite
  • Code freeze — blocco completo di tutte le modifiche 24-48 ore prima della build
  • Congelamento parziale blocca le modifiche solo nei moduli critici dell'app
  • Automazione dei congelamenti tramite CI/CD e regole di protezione dei rami elimina errori umani
  • Durata del congelamento — da 24 ore a 2 settimane a seconda del ciclo di rilascio
  • Eccezioni — solo per correzioni di sicurezza e crash critici tramite processo di emergenza
  • Criteri di rimozione del congelamento devono essere chiari e documentati per tutto il team

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