modulo 10 / lezione 54
Capstone: bug reale end-to-end
Capstone: presentazione e retrospettiva
Presentare il caso a un compagno o docente in massimo dieci minuti, ricevere review, scrivere retrospettiva blameless.
In parole semplici
L’ultima sessione del capstone (e del corso) chiude il cerchio: presenti il caso, ricevi review, scrivi la retrospettiva. Sono i sessanta minuti che trasformano “ho risolto un bug” in “ho un metodo che posso applicare di nuovo”.
Cosa impari (rivedere applicare)
- Modulo 6.1: chiedere/dare feedback strutturato.
- Modulo 6.4: review canonica.
- Modulo 6.5: retrospettiva blameless.
- Modulo 9.5: postmortem.
Sessione finale: scaletta 60 minuti
0–10 min: preparazione della presentazione
Prepara una demo di 10 minuti strutturata in cinque blocchi:
- Il bug (1 min): segnalazione originale, perché era difficile.
- L’indagine (3 min): ipotesi, prove, scoperte chiave.
- La causa radice (1 min): cosa abbiamo trovato e perché.
- Il fix (3 min): le modifiche minime applicate, test.
- Verifica e lezioni (2 min): cosa funziona ora, cosa ho imparato.
Non slide. Sufficiente: taccuino aperto, codice in editor, PR in browser.
10–25 min: presentazione
Al compagno (o docente). Mentre presenti:
- Vai dal segnalato al fix in 10 minuti.
- Non difenderti: spiega cosa è andato bene e cosa male.
- Cita prove, non opinioni.
- Mostra il taccuino, mostra il diff, mostra i test che passano.
Al pubblico:
- Non interrompere durante la presentazione.
- Prendi appunti.
- Domande a fine presentazione.
25–40 min: review e domande
Domande tipiche (e utili) della review:
- “Quali ipotesi avevi escluso e perché?”
- “Hai considerato un’altra causa?”
- “Il test E2E copre anche [caso vicino]?”
- “Hai pensato al rollback in caso di problemi in produzione?”
- “Come si potrebbe automatizzare la rilevazione di bug simili in futuro?”
Le rispondi a voce. Le note vanno nel taccuino.
40–55 min: postmortem
Scrivi il postmortem usando il template del modulo 6.5 / 9.5:
# Capstone Postmortem: Checkout duplicati e scomparsi
## Sintesi
Tre cause composte (UI senza disable, server senza idempotency,
race POST/GET) producevano ordini duplicati o "scomparsi"
nelle ore di punta.
## Timeline
- 09:15 — Segnalazione ricevuta da Customer Success.
- 09:30 — Bug report compilato. Caso minimo identificato (doppio click rapido).
- 10:15 — Indagine: ipotesi 1 (doppio submit) confermata.
- 11:00 — Ipotesi 2 (idempotency server) confermata.
- 11:30 — Ipotesi 3 (race POST/GET) confermata parzialmente.
- 14:00 — Fix client + server applicati.
- 15:30 — Test e matrice manuale OK.
- 16:00 — PR aperta per review.
## Impatto
Simulato. In produzione: stimato impatto su ~X% degli ordini in ora di punta.
## Causa diretta
Doppio submit + assenza di idempotency-key lato server.
## Causa radice
- Mancanza di linea guida interna su submission UI (no disable durante in-flight request).
- Header `Idempotency-Key` non documentato come obbligatorio nella API spec.
- Test E2E non copriva interazioni rapide.
## Cosa è andato bene
- Caso minimo identificato in 15 minuti.
- Ciclo ipotesi/prova/esito ha portato a tre cause in 90 minuti.
- Test pre-fix scritti prima del fix.
## Cosa è andato male
- Race condition POST/GET resta da indagare a fondo (#C-002).
- La documentazione API non menzionava l'idempotenza richiesta.
## Azioni correttive
- [ ] ADR-008 "Idempotency negli endpoint di scrittura" — owner: me, scadenza +7 gg.
- [ ] Linea guida UI "submit con disable + AbortController" — owner: me, +7 gg.
- [ ] Test E2E "doppio click" su tutti i form di scrittura — owner: me, +14 gg.
- [ ] Indagare race POST/GET (#C-002) — owner: me, +21 gg.
## Lezione condivisa
Gli endpoint di scrittura DEVONO supportare Idempotency-Key.
Tutti i submit UI DEVONO disabilitare il pulsante durante la richiesta.
55–60 min: chiusura del corso
- Aggiorna il taccuino con la retrospettiva finale.
- Salva tutto nella tua “biblioteca personale di debug”.
- Decidi: quale dei 9 moduli vuoi rivisitare nel prossimo mese?
Esercizi
Base · facile
Struttura la demo di 10 minuti del tuo caso nei cinque blocchi previsti, con il tempo accanto a ciascuno.
Soluzione
1. Il bug (1 min) — segnalazione originale, perché era difficile
2. L'indagine (3 min) — ipotesi, prove, scoperte chiave
3. La causa radice (1 min) — cosa abbiamo trovato e perché
4. Il fix (3 min) — modifiche minime applicate + test
5. Verifica e lezioni (2 min) — cosa funziona ora, cosa ho imparato
La struttura impone una storia (problema → indagine → causa → fix → esito) e un budget di tempo: senza, una demo scivola nei dettagli e non arriva alla causa nei minuti utili.
Intermedio · medio
Scrivi una retrospettiva blameless del caso: cosa è andato bene, cosa ha rallentato l’indagine, cosa faresti diversamente. Spiega cosa significa “blameless” e perché conta.
Soluzione
Andato bene: caso minimo costruito presto → ipotesi mirate
Rallentato: ho inseguito una race condition prima di contare le richieste
(prova economica saltata)
Da cambiare: partire sempre dalle prove più economiche
Sistema, non persona: mancava un test sul doppio submit → aggiunto in CI
Blameless = si analizza cosa ha permesso l’errore (processi, strumenti, mancanza di test), non chi ha sbagliato. Conta perché la colpa fa nascondere gli errori, mentre l’obiettivo è renderli visibili e impedirne il ritorno: si correggono le condizioni, non si puniscono le persone.
Sfida · difficile
Trasforma la retrospettiva in un postmortem riutilizzabile: dal caso specifico estrai una o più azioni preventive che impediscano a quella classe di bug di ripresentarsi. Spiega la differenza tra correggere il bug e correggere il sistema che l’ha permesso.
Soluzione
Postmortem — checkout: ordini duplicati e mancanti
Causa radice: doppio submit lato client + POST non idempotente lato server
Impatto: ordini errati, intermittente, difficile da riprodurre
Azioni preventive (classe, non singolo caso):
- Lint/regola UI: i pulsanti che inviano dati si disabilitano durante l'invio
- Standard API: ogni POST che crea risorse accetta una chiave di idempotenza
- Test in CI: doppio submit e doppia richiesta identica come casi obbligatori
Correggere il bug elimina questa occorrenza. Correggere il sistema elimina la categoria: una regola di lint, uno standard API e un test in CI fanno sì che lo stesso schema venga intercettato in automatico la prossima volta, anche su un’altra pagina o da un altro sviluppatore. Il postmortem vale quando produce barriere riusabili, non solo una spiegazione.
Cosa porti via dal corso
Dopo 79 ore (63 + 16 di Modulo 0 + capstone) hai:
- Un metodo: riproduci, leggi, osserva, isola, correggi, collabora, racconta.
- Un taccuino vivo con casi reali documentati.
- Una checklist mentale per ogni fase.
- Strumenti pratici: DevTools, breakpoint, git bisect, AbortController, source map, OpenTelemetry.
- Un postmortem template riutilizzabile.
Come continuare
- Applica il metodo ad ogni bug che incontri nella tua attività.
- Tieni il taccuino aggiornato per almeno un mese: serve a interiorizzare.
- Rivisita un modulo per settimana per stabilizzare.
- Insegna ad altri: spiegare consolida ciò che sai.
Errori frequenti nell’ultima sessione
- Tono difensivo durante la presentazione. Il capstone non è un esame: è una sessione di apprendimento.
- Saltare il postmortem perché “tanto era simulato”. Il postmortem è esercizio, non burocrazia.
- Non aggiornare il taccuino con le scoperte della review. Le domande del pubblico sono spesso le più informative.
- Trattare il corso come “finito”. È iniziato.
Grazie. Buon debug.