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.

45 min Debugging

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 localStorage dopo dispatch.

Osservato: localStorage.getItem('cart') ritorna '[]' dopo refresh, anche se ho aggiunto 3 prodotti.

Provato:

  1. Verificato che addToCart aggiorni davvero lo state (Redux DevTools mostra l’azione e il nuovo state).
  2. Verificato che save() venga chiamato (log).
  3. Loggato state.cart dentro save(): è vuoto.
  4. Sospetto: save() parte da un middleware che intercetta addToCart ma legge getState() prima che il reducer abbia finito.

Riproduzione: https://stackblitz.com/edit/abc-carrello-bug

Domanda: il pattern corretto è chiamare save() da un listenerMiddleware che reagisce a state aggiornato (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

CanaleQuando
Compagno di bancobug semplice, contesto condiviso
Team Slack/Discordbug specifico del progetto
Issue trackerbug confermato, va archiviato
Stack Overflowdomanda generale, riproducibile da chiunque
GitHub Discussionsbug 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

  1. Prendi una segnalazione vaga vista in qualche forum.
  2. Riscrivila usando le cinque sezioni.
  3. Cerca elementi mancanti: cosa chiederebbe chi risponde?
  4. 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ì.