modulo 09 / lezione 50
Performance, memoria e osservabilità
Incidenti, comunicazione e postmortem
Gestire un difetto già rilasciato: contenere l'impatto, coordinare la war room, scegliere rollback o fix-forward, poi documentare la causa.
In parole semplici
Quando un bug raggiunge la produzione, debug e processo cambiano. Cinque priorità in ordine, non negoziabili:
- Contenere: limitare l’impatto sugli utenti.
- Comunicare: chi è colpito? chi è coinvolto?
- Decidere: rollback o fix-forward?
- Verificare: il contenimento ha funzionato?
- Documentare: postmortem per imparare.
Questa lezione integra il modulo 5 (revert/fix-forward) e il modulo 6 (blameless postmortem) in una sequenza operativa per gestire incidenti.
Parole nuove
- incidente: malfunzionamento che colpisce utenti reali in produzione.
- war room: spazio (fisico o virtuale) dove si coordina la risoluzione.
- incident commander: persona che coordina, non scrive codice.
- status page: pagina pubblica dello stato del servizio.
- MTTR (Mean Time To Recovery): tempo medio di recupero.
Cosa impari
- Applicare le cinque priorità in sequenza.
- Coordinare una war room.
- Scegliere tra rollback e fix-forward.
- Aggiornare utenti via status page.
Le cinque priorità
1. Contenere
L’obiettivo dei primi 10 minuti non è capire. È fermare l’emorragia.
Strumenti di contenimento:
- Rollback del deploy (modulo 5.4).
- Kill switch / feature flag (modulo 4.2).
- Rate limit d’emergenza.
- Failover a backup.
- Bypass della funzionalità rotta.
Domanda chiave: “qual è la cosa più veloce che riduce l’impatto, anche se non risolve?”
2. Comunicare
Mentre uno contiene, un altro:
- Avvisa il team interno (Slack #incidents).
- Aggiorna status page pubblica.
- Notifica stakeholder (CTO, customer success).
- Tiene aggiornato il canale ogni 15-30 minuti.
Pattern di status page:
🟡 Investigating: Stiamo investigando segnalazioni di lentezza sul checkout.
🟠 Identified: Causa identificata, in corso di mitigazione.
🟢 Monitoring: Mitigazione applicata, monitorando.
✅ Resolved: Incidente risolto.
Frasi neutre, niente promesse di tempi precisi.
3. Decidere
Davanti al bug, davanti al contenimento, davanti agli utenti che aspettano: rollback o fix-forward?
Rollback se:
- Il commit colpevole è identificato.
- Il rollback non richiede migrazioni inverse rischiose.
- L’ultima versione stabile è “recente abbastanza”.
Fix-forward se:
- Il fix è banale e veloce (5 minuti).
- Rollback è impossibile (migrazione DB irreversibile, dati corrotti).
- La versione precedente ha altri bug critici.
Decisione presa da incident commander dopo consulto. Documentata sul canale.
4. Verificare
Mitigazione applicata != incidente risolto. Verifiche:
- Metriche tornano in range normale.
- Log non mostrano più l’errore.
- Test smoke manuali OK.
- Utenti reali confermano (se possibile).
Solo dopo: dichiara “Monitoring” e poi, dopo 15-30 minuti senza ricadute, “Resolved”.
5. Documentare
Postmortem blameless (modulo 6.5):
- Timeline.
- Causa diretta e radice.
- Cosa è andato bene/male.
- Azioni correttive con owner.
- Lezione condivisa.
Da scrivere entro 24-48 ore, quando i ricordi sono freschi.
Incident commander: il ruolo
Funzioni:
- Non scrive codice.
- Coordina chi fa cosa.
- Prende decisioni (rollback vs fix-forward).
- Comunica con stakeholder.
- Tiene la timeline.
Una persona sola. Anche per incidente piccolo. Senza commander unico, decisioni contraddittorie e confusione.
War room
In remoto: video call sempre aperta, condivisione schermo, chat parallela per appunti.
Regole:
- No multitasking: chi è in war room non fa altro.
- Speaker unico: una persona alla volta.
- Incident commander parla per ultimo: ascolta le info, decide.
- Timer di sincronizzazione ogni 15 min: sintesi dello stato.
Status page: tono e contenuto
Buono:
“Identificate richieste fallite sul checkout. Stiamo applicando una mitigazione. Aggiornamento alle 14:45.”
Cattivo:
“Stiamo lavorando sul problema, scusate per l’inconveniente! Sarà tutto risolto in pochi minuti :)”
Differenze:
- Specifico vs vago.
- Senza promesse irrealistiche.
- Niente colpe (“colpa di X”).
- Niente toni eccessivamente leggeri.
MTTR e metriche di incident
Per ogni incidente registra:
- MTTD (detect): da inizio bug a primo allarme.
- MTTA (acknowledge): da allarme a presa in carico.
- MTTR (resolve): da inizio bug a risoluzione completa.
Aggregati nel tempo permettono di vedere se stai migliorando.
Sicurezza vs disponibilità
Per incidenti di sicurezza (data leak, vulnerabilità sfruttata):
- Coinvolgi subito il responsabile sicurezza/legale.
- Non comunicare pubblicamente dettagli prima di avere il quadro.
- Conserva log e evidenze (forensics).
- Postmortem ha sezione “esposizione dati” specifica.
Esercizio guidato
Simulazione (anche da soli, scrivendo):
- Scenario: API
/checkoutritorna 500 al 30% delle richieste da 5 minuti. - Scrivi la sequenza delle prime 30 minuti: chi fa cosa, in che ordine.
- Scrivi tre messaggi di status page (Investigating, Identified, Resolved).
- Decidi: rollback o fix-forward? Motiva.
- Dopo 24h, scrivi il postmortem (anche se finta).
Errori frequenti del principiante
- Mettere “capire” prima di “contenere”. Gli utenti continuano a soffrire mentre si indaga.
- Nessun commander. Decisioni multiple, contraddittorie.
- Status page in ritardo o troppo ottimistica.
- Saltare il postmortem. Lo stesso bug ricorre.
- Cercare colpevoli. Riduce la trasparenza nelle prossime indagini.