modulo 06 / lezione 30
Debugging collaborativo
Chiedere aiuto senza scaricare il problema
Formulare una richiesta che include contesto, prove già fatte e punto esatto in cui si è bloccati.
In parole semplici
Chiedere aiuto è una competenza, non una debolezza. La differenza tra una richiesta che riceve risposta utile in dieci minuti e una che resta ignorata per giorni sta nel come è scritta. Una buona richiesta dice cosa hai osservato, cosa hai provato, dove sei bloccato. Non scarica il problema su chi legge.
La tradizione “How To Ask Questions The Smart Way” (Eric S. Raymond, 2001) resta valida nel 2026.
Parole nuove
- handoff: passaggio di contesto da una persona ad un’altra.
- riproduzione condivisa: caso minimo eseguibile da chi riceve la richiesta.
- timeboxing: limitare il tempo prima di chiedere aiuto.
Cosa impari
- Strutturare la richiesta con cinque sezioni chiare.
- Condividere una riproduzione anziché solo screenshot.
- Decidere quando chiedere aiuto: né troppo presto né troppo tardi.
Le cinque sezioni della richiesta
1. Cosa sto cercando di fare (obiettivo)
2. Cosa succede invece (osservato)
3. Cosa ho già provato
4. Riproduzione (link a stackblitz/gist/repo)
5. Domanda specifica
Sezione per sezione:
1. Obiettivo
“Sto provando a far persistere il carrello dell’utente dopo refresh.”
Non “non funziona”. Non “ho un problema”. L’obiettivo, in una frase.
2. Osservato
“Cliccando ‘Salva’ vedo ‘Salvato’ ma dopo refresh il carrello è vuoto. Lo store contiene la chiave ‘cart’ con array vuoto.”
Fatti. Niente interpretazione.
3. Cosa ho già provato
“Ho verificato: lo store viene scritto (vedo la chiamata in DevTools), ma il payload arriva vuoto. Ho aggiunto log nel reducer: vedo che il salvataggio avviene prima dell’update. Sospetto race condition tra dispatch e save.”
Dimostra che hai investito tempo. Risparmia a chi aiuta il “hai provato X?“.
4. Riproduzione
“Caso minimo: https://stackblitz.com/edit/abc — clic sul bottone, refresh, vedi carrello vuoto.”
Senza riproduzione, la richiesta vale meno. Con riproduzione, chi aiuta apre il link e prova in 30 secondi.
5. Domanda specifica
“Qual è il modo idiomatico in Redux Toolkit per garantire che
save()parta solo dopo che lo state è davvero aggiornato?”
Non “aiuto?”, non “qualcuno sa?”. Una domanda tecnica, specifica.
Esempio completo
Vaga:
“Ciao a tutti, non riesco a salvare il carrello. Qualcuno può aiutare?”
Strutturata:
Cosa sto facendo: persistere il carrello su
localStoragedopo dispatch.Osservato:
localStorage.getItem('cart')ritorna'[]'dopo refresh, anche se ho aggiunto 3 prodotti.Provato:
- Verificato che
addToCartaggiorni davvero lo state (Redux DevTools mostra l’azione e il nuovo state).- Verificato che
save()venga chiamato (log).- Loggato
state.cartdentrosave(): è vuoto.- Sospetto:
save()parte da un middleware che intercettaaddToCartma leggegetState()prima che il reducer abbia finito.Riproduzione: https://stackblitz.com/edit/abc-carrello-bug
Domanda: il pattern corretto è chiamare
save()da unlistenerMiddlewareche reagisce astateaggiornato (es. createListenerMiddleware), o c’è un modo più semplice?
Risposta probabile: 10 minuti. Risposta utile: garantita.
Quando chiedere
Regola pratica (timeboxing):
- Primi 15 minuti: prova da solo. Probabilmente trovi.
- 15-45 minuti: scrivi tutto nel taccuino. Spesso, formalizzare risolve da solo (rubber duck, modulo 4.1).
- 45 minuti senza progressi: chiedi aiuto. Hai abbastanza materiale per scrivere bene.
- 3 ore senza progressi: hai chiesto troppo tardi.
Dove chiedere
| Canale | Quando |
|---|---|
| Compagno di banco | bug semplice, contesto condiviso |
| Team Slack/Discord | bug specifico del progetto |
| Issue tracker | bug confermato, va archiviato |
| Stack Overflow | domanda generale, riproducibile da chiunque |
| GitHub Discussions | bug di una libreria open source |
Scegli il canale al pubblico minimo necessario. Stack Overflow pubblico per domande generiche fa risparmiare a chiunque incontri lo stesso problema.
Riproduzione condivisa
Strumenti:
- StackBlitz: app reali in-browser (React, Vue, Astro, Svelte). Link diretto, niente download.
- CodeSandbox: simile, più maturo per Node.
- JSFiddle / CodePen: snippet brevi, HTML/CSS/JS.
- Gist GitHub: file singolo.
- Repo Git pubblica: caso multi-file, con README per riprodurre.
Senza riproduzione, la tua richiesta è “fidatevi”. Con riproduzione, è “provate”.
Esercizio guidato
- Prendi una segnalazione vaga vista in qualche forum.
- Riscrivila usando le cinque sezioni.
- Cerca elementi mancanti: cosa chiederebbe chi risponde?
- Annota: per ogni elemento mancante, quale prova avrebbe potuto raccogliere chi segnala?
Cosa NON fare
- Bump senza nuovo contenuto: “up?”, “qualcuno?”. Annoia chi legge.
- DM dirette a persone random: se hai una community, scrivi pubblico.
- Promettere “veloce, due secondi”: se fosse veloce, non chiederesti.
- Sentirsi feriti se nessuno risponde: spesso la domanda è risolvibile dal richiedente stesso una volta scritta bene.
Errori frequenti del principiante
- Chiedere prima di provare. Sembra rispetto: è scarico.
- Postare screenshot di errore senza il codice. Chi aiuta non può riprodurre.
- Aspettare troppo per chiedere. Sei ore di rabbia non producono indagine, producono frustrazione.
- Non ringraziare con il fix. Quando risolvi, chiudi la richiesta dicendo cosa ha funzionato. La community impara così.