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.

60 minDebugging

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:

  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): le modifiche minime applicate, test.
  5. 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.