<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>changeloop blog</title><description>Release notes in pratica e changelog come artefatto di build.</description><link>https://changeloop.dev/</link><language>it-IT</language><item><title>Release notes per le correzioni di bug: voci che servono</title><link>https://changeloop.dev/blog/it/bug-fix-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/bug-fix-release-notes/</guid><description>Le release notes delle correzioni di bug funzionano se ogni voce nomina sintomo, persone colpite e azione. Riscritture e regole su sicurezza e dati.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Buone release notes per le correzioni di bug descrivono ciò che l&amp;#39;utente ha visto andare storto, non ciò che il codice ha sbagliato. Ogni voce dice chi è stato interessato, da quando, se la correzione è completa e se il lettore deve fare qualcosa, anche solo &amp;quot;nessuna azione necessaria&amp;quot;.&lt;/p&gt;
&lt;p&gt;La maggior parte dei team copia una riga dal messaggio di commit. La tabella mostra sei riscritture, e le sezioni dopo spiegano le regole.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prima (il messaggio di commit)&lt;/th&gt;
&lt;th&gt;Dopo (il sintomo)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Fixed null pointer in export handler&lt;/td&gt;
&lt;td&gt;Gli export non falliscono più con &amp;quot;Qualcosa è andato storto&amp;quot; quando un progetto non ha tag. Rilancia gli export falliti dal 3 settembre.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolved race condition in sync worker&lt;/td&gt;
&lt;td&gt;Le modifiche fatte su due dispositivi a pochi secondi di distanza non si sovrascrivono più. Non devi fare nulla.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fix timezone bug&lt;/td&gt;
&lt;td&gt;I report programmati ora partono all&amp;#39;ora impostata. Gli account a est di UTC vedevano i report fino a un giorno prima dal 12 agosto. Nessuna modifica necessaria.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patched XSS in comment renderer&lt;/td&gt;
&lt;td&gt;Fix di sicurezza: un commento costruito ad arte poteva eseguire uno script nel browser di un altro utente. Aggiorna alla 4.2.1 oggi. Nei nostri log non abbiamo visto sfruttamento.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed regression from 4.1.0&lt;/td&gt;
&lt;td&gt;La ricerca funziona di nuovo per le query che contengono un trattino. Si era rotta nella 4.1.0 ed è corretta nella 4.1.1.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug fixes and performance improvements&lt;/td&gt;
&lt;td&gt;Di&amp;#39; quali. Vedi l&amp;#39;ultima sezione.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Come si scrive una voce di correzione di bug nelle release notes?&lt;/h2&gt;
&lt;p&gt;Parti dal sintomo con le parole dell&amp;#39;utente, poi chi è stato interessato e da quando, poi lo stato della correzione, poi l&amp;#39;azione. Di solito bastano una o due frasi. La causa nel codice va nella pull request, dove un ingegnere la cercherà.&lt;/p&gt;
&lt;p&gt;Il lettore cerca una cosa sola: &amp;quot;riguardava me?&amp;quot; Quattro parti coprono quasi ogni voce:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Il sintomo.&lt;/strong&gt; Cosa è comparso a schermo, nella risposta dell&amp;#39;API o sulla fattura. Cita il testo dell&amp;#39;errore, se c&amp;#39;era, perché le persone lo cercano.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L&amp;#39;ambito.&lt;/strong&gt; Quale piano, piattaforma, versione API o forma dei dati. &amp;quot;Account con più di 50.000 righe&amp;quot; è verificabile. &amp;quot;Alcuni utenti&amp;quot; no.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La finestra.&lt;/strong&gt; Da quale rilascio o data, così un lettore può decidere se il risultato strano di ieri era il bug.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L&amp;#39;azione.&lt;/strong&gt; Rilanciare, risincronizzare, aggiornare, togliere un workaround, oppure niente.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se gli utenti avevano costruito un workaround, la riga dell&amp;#39;azione è il posto dove dire loro che possono eliminarlo.&lt;/p&gt;
&lt;h2&gt;Qual è la differenza tra una release note e un changelog?&lt;/h2&gt;
&lt;p&gt;Un changelog è il registro completo e continuo delle modifiche. Le release notes sono un messaggio scelto e riscritto su un rilascio, per chi sta decidendo se interessarsene. Per le correzioni di bug, il changelog elenca ogni correzione e le note aprono con quelle che un lettore poteva notare.&lt;/p&gt;
&lt;p&gt;Un refuso in un tooltip va solo nel changelog. Un&amp;#39;aliquota sbagliata sulle fatture va in entrambi. La divisione completa è in &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;changelog vs release notes&lt;/a&gt;, e la forma di un buon insieme di note è in &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;come scrivere release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://keepachangelog.com/en/1.1.0/&quot;&gt;Keep a Changelog&lt;/a&gt; è una comoda convenzione per il lato del registro. Riserva &amp;quot;Fixed&amp;quot; alle correzioni di bug e un titolo &amp;quot;Security&amp;quot; separato alle vulnerabilità, che è la stessa divisione che questo articolo fa per il lettore.&lt;/p&gt;
&lt;h2&gt;Una correzione di bug è un aggiornamento?&lt;/h2&gt;
&lt;p&gt;Sì. Una correzione cambia il prodotto, quindi rilasciarla è un aggiornamento. Con il &lt;a href=&quot;https://semver.org/&quot;&gt;versionamento semantico&lt;/a&gt; una correzione retrocompatibile è un rilascio patch, per esempio da 4.2.0 a 4.2.1.&lt;/p&gt;
&lt;p&gt;Se il lettore debba fare qualcosa è una questione separata, e la nota dovrebbe rispondere. Una correzione che cambia ciò che osserva un chiamante corretto è vicina a una breaking change, e &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;breaking changes&lt;/a&gt; spiega dove passa quel confine.&lt;/p&gt;
&lt;h2&gt;Quando una correzione merita una voce propria, e quando è una correzione minore?&lt;/h2&gt;
&lt;p&gt;Dai alla correzione una voce propria quando un utente poteva accorgersi del bug, perderci tempo o dati, o costruirci intorno un workaround. Raggruppala sotto una breve lista &amp;quot;Correzioni minori&amp;quot; quando nessuno fuori dal tuo team poteva vederla. Giudica dall&amp;#39;esperienza del lettore, non dalla dimensione del diff.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ha una voce propria&lt;/th&gt;
&lt;th&gt;Va nella lista delle correzioni minori&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Segnalato da un cliente o subìto da molti&lt;/td&gt;
&lt;td&gt;Difetto estetico in una schermata aperta di rado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ha causato output sbagliato, job falliti o lavoro perso&lt;/td&gt;
&lt;td&gt;Refuso, spaziatura, un&amp;#39;icona disallineata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Richiede un&amp;#39;azione dal lettore&lt;/td&gt;
&lt;td&gt;Correzione in uno strumento interno o in una pagina admin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Una regressione di un rilascio recente&lt;/td&gt;
&lt;td&gt;Errore visto solo in un ambiente di test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tocca fatturazione, permessi o dati&lt;/td&gt;
&lt;td&gt;Testo dei log, aggiornamenti di dipendenze senza effetto per l&amp;#39;utente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Ogni riga del gruppo dovrebbe comunque dire qualcosa: &amp;quot;Corretti alcuni problemi dell&amp;#39;interfaccia&amp;quot; è un segnaposto.&lt;/p&gt;
&lt;h2&gt;Come si scrive di una regressione?&lt;/h2&gt;
&lt;p&gt;Nomina il rilascio che l&amp;#39;ha introdotta, chiamala regressione e indica il rilascio che la corregge. Chi ha incontrato il bug sa già che si è rotto, quindi un&amp;#39;ammissione breve e diretta li serve meglio di parole vaghe.&lt;/p&gt;
&lt;p&gt;Per esempio: &amp;quot;I risultati di ricerca per query contenenti un trattino tornavano vuoti nella 4.1.0. È corretto nella 4.1.1. Se hai cambiato le tue query per evitare i trattini, puoi rimetterle come prima.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;Migliorata l&amp;#39;affidabilità della ricerca&amp;quot; suona come una scappatoia a chi ha perso un pomeriggio per colpa del bug. Se la causa è ancora in verifica, dillo, come suggerisce la guida alle &lt;a href=&quot;https://changeloop.dev/blog/it/emergency-release-notes/&quot;&gt;release notes di emergenza&lt;/a&gt;: la nota non deve mai suonare più sicura di quanto lo sia il team.&lt;/p&gt;
&lt;h2&gt;Come si annuncia un fix di sicurezza?&lt;/h2&gt;
&lt;p&gt;Indica la gravità in modo chiaro, nomina le versioni interessate e la versione che le corregge, di&amp;#39; quanto è urgente l&amp;#39;aggiornamento e includi l&amp;#39;identificatore CVE se esiste. Pubblica i dettagli solo quando gli utenti possono agire su una correzione, seguendo un processo di divulgazione coordinata quando c&amp;#39;è stato un segnalatore.&lt;/p&gt;
&lt;p&gt;La sequenza conta: il segnalatore ti avvisa in privato, rilasci la correzione e la nota pubblica esce quando gli utenti possono proteggersi. Il &lt;a href=&quot;https://www.cisa.gov/coordinated-vulnerability-disclosure-process&quot;&gt;processo di divulgazione coordinata delle vulnerabilità della CISA&lt;/a&gt; coordina segnalazione, analisi e divulgazione pubblica delle vulnerabilità. Le &lt;a href=&quot;https://www.cve.org/ResourcesSupport/AllResources/CNARules&quot;&gt;regole delle CVE Numbering Authority&lt;/a&gt; disciplinano come i record CVE vengono assegnati e pubblicati, e su GitHub un &lt;a href=&quot;https://docs.github.com/en/code-security/security-advisories/working-with-repository-security-advisories/about-repository-security-advisories&quot;&gt;repository security advisory&lt;/a&gt; ti permette di redigere l&amp;#39;avviso in privato e richiedere un identificatore.&lt;/p&gt;
&lt;p&gt;Una voce di sicurezza di solito porta quattro fatti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cosa poteva fare un attaccante, in una frase e senza una proof of concept.&lt;/li&gt;
&lt;li&gt;Le versioni interessate e la versione che corregge.&lt;/li&gt;
&lt;li&gt;Quanto è urgente: &amp;quot;aggiorna oggi&amp;quot; o &amp;quot;aggiorna al prossimo rilascio&amp;quot;.&lt;/li&gt;
&lt;li&gt;Se hai visto sfruttamento, e il riconoscimento al segnalatore se ha acconsentito.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lascia fuori i passaggi dell&amp;#39;exploit.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe dire una nota su una correzione di perdita di dati?&lt;/h2&gt;
&lt;p&gt;Di&amp;#39; quali dati sono stati interessati, come capire se erano i tuoi e se si possono recuperare. &amp;quot;Nessuna azione necessaria&amp;quot; raramente è vero qui, e la prima domanda del lettore è &amp;quot;i miei dati sono persi?&amp;quot;&lt;/p&gt;
&lt;p&gt;Una voce utile dà la condizione che ha fatto perdere i dati (&amp;quot;eliminare una cartella mentre era in corso una sincronizzazione&amp;quot;), la finestra in cui era possibile, un modo per verificare (&amp;quot;apri il Cestino e cerca elementi datati dal 3 al 9 settembre&amp;quot;) e il percorso di recupero. Se i dati non si possono recuperare, dillo. Contatta direttamente anche i clienti interessati, perché la release note non dovrebbe essere l&amp;#39;unico posto in cui qualcuno scopre che i suoi dati sono stati toccati.&lt;/p&gt;
&lt;h2&gt;Perché &amp;quot;Correzioni di bug e miglioramenti delle prestazioni&amp;quot; è una nota scadente?&lt;/h2&gt;
&lt;p&gt;Non dà al lettore nulla su cui agire e nasconde le correzioni che qualcuno aspettava. Un cliente che ha segnalato un crash non può sapere se è risolto, e un cliente con un workaround non può sapere se toglierlo.&lt;/p&gt;
&lt;p&gt;Ci sono due alternative oneste. Se un rilascio non ha nulla che un lettore possa notare, non pubblicare note e lascia che sia il changelog a tenere il registro. Se ha correzioni, elencale con le parole del lettore:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Prima:
  Correzioni di bug e miglioramenti delle prestazioni.

Dopo:
  Corretto: l&amp;#39;export CSV falliva per i progetti senza tag.
  Corretto: la modalità scura nascondeva il cursore nei commenti.
  Più veloce: la dashboard si apre prima per i workspace
  con più di 100 progetti.
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Da dove arrivano le note sulle correzioni di bug?&lt;/h2&gt;
&lt;p&gt;Arrivano dalla pull request che ha corretto il bug e dalla segnalazione che l&amp;#39;ha innescata. Se le parole di chi ha segnalato viaggiano con la correzione, metà del sintomo è già scritto.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-vs-bug-report/&quot;&gt;Richiesta di funzionalità o bug&lt;/a&gt; spiega perché etichettare correttamente una segnalazione decide chi ne è responsabile. In Changeloop, un bug segnalato tramite il widget diventa un issue di GitHub con l&amp;#39;etichetta &lt;code&gt;bug&lt;/code&gt;, e la voce di changelog viene preparata dalla pull request integrata e tenuta in attesa finché una persona la approva prima della pubblicazione. Il &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;template di release notes&lt;/a&gt; ti dà la stessa forma di voce per scrivere a mano: sintomo, ambito, finestra, azione.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cosa dovrebbero includere le release notes delle correzioni di bug?&lt;/strong&gt;
Ogni voce dovrebbe nominare il sintomo visto dall&amp;#39;utente, chi è stato interessato, da quale rilascio o data, se la correzione è completa e cosa deve fare il lettore, compreso &amp;quot;niente&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ogni correzione di bug va elencata nelle release notes?&lt;/strong&gt;
No. Elenca quelle che un utente poteva notare, che gli hanno fatto perdere tempo o che ha aggirato, e raggruppa le correzioni estetiche o interne sotto una breve lista &amp;quot;Correzioni minori&amp;quot;. Il changelog tiene ogni correzione per chi ha bisogno di consultarla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come si scrivono le release notes per un bug che hai introdotto tu?&lt;/strong&gt;
Di&amp;#39; che era una regressione, nomina il rilascio che l&amp;#39;ha introdotta e quello che la corregge, e di&amp;#39; ai lettori se possono togliere un workaround. Un&amp;#39;affermazione semplice si legge meglio di parole ammorbidite.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come si controllano le release notes di un prodotto che usi?&lt;/strong&gt;
Cerca una pagina di changelog o di release notes collegata dal menu di aiuto, dal footer o dalla documentazione del prodotto, oppure nella scheda dei rilasci del repository per i progetti open source.&lt;/p&gt;
</content:encoded></item><item><title>Come chiedere feedback ai clienti in un prodotto software</title><link>https://changeloop.dev/blog/it/how-to-ask-for-customer-feedback/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/how-to-ask-for-customer-feedback/</guid><description>Fai una domanda specifica subito dopo che l&apos;utente ha fatto qualcosa, dove sta lavorando. Formulazioni pronte per ogni momento e le richieste da evitare.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Per chiedere feedback ai clienti in un prodotto software, fai una domanda specifica su qualcosa che l&amp;#39;utente ha appena fatto, nel punto in cui l&amp;#39;ha fatto. &amp;quot;Com&amp;#39;è andata l&amp;#39;esportazione di quel report?&amp;quot; subito dopo un export ottiene una risposta. &amp;quot;Dicci cosa pensi del nostro prodotto&amp;quot; in un footer ottiene silenzio. Il resto di questa pagina sono i momenti, i canali e le formulazioni esatte.&lt;/p&gt;
&lt;p&gt;La maggior parte dei consigli su questo tema è scritta per negozi e sportelli di assistenza. Un team software sa esattamente cosa ha fatto l&amp;#39;utente un secondo fa, quindi la domanda può riguardare quello.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Momento&lt;/th&gt;
&lt;th&gt;Dove chiedere&lt;/th&gt;
&lt;th&gt;Domanda pronta all&amp;#39;uso&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Subito dopo che un&amp;#39;attività finisce&lt;/td&gt;
&lt;td&gt;Nell&amp;#39;app, accanto al risultato&lt;/td&gt;
&lt;td&gt;&amp;quot;Quell&amp;#39;export ha fatto quello che ti serviva?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dopo il primo uso di una nuova funzionalità&lt;/td&gt;
&lt;td&gt;Nell&amp;#39;app, una sola volta&lt;/td&gt;
&lt;td&gt;&amp;quot;Cosa stavi cercando di fare con Bulk Edit?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dopo la risoluzione di un ticket di supporto&lt;/td&gt;
&lt;td&gt;Nel thread di supporto&lt;/td&gt;
&lt;td&gt;&amp;quot;Ha risolto, o c&amp;#39;è ancora qualcosa che non va?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dopo che un utente si ferma o abbandona un flusso&lt;/td&gt;
&lt;td&gt;Email, un giorno dopo&lt;/td&gt;
&lt;td&gt;&amp;quot;Ti sei fermato al passo 3 della configurazione. Cosa ti ha bloccato?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dopo 30 giorni di uso regolare&lt;/td&gt;
&lt;td&gt;Email da una persona con nome e cognome&lt;/td&gt;
&lt;td&gt;&amp;quot;Qual è l&amp;#39;unica cosa che cambieresti?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quando un utente disdice&lt;/td&gt;
&lt;td&gt;Nel flusso di disdetta&lt;/td&gt;
&lt;td&gt;&amp;quot;Cosa ti ha fatto decidere di andare via oggi?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dopo aver rilasciato qualcosa che avevano chiesto&lt;/td&gt;
&lt;td&gt;Dove l&amp;#39;avevano chiesto&lt;/td&gt;
&lt;td&gt;&amp;quot;Avevi chiesto l&amp;#39;import CSV. È online. Copre il tuo caso?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Qual è il momento giusto per chiedere feedback?&lt;/h2&gt;
&lt;p&gt;Il momento giusto è subito dopo che l&amp;#39;utente ha finito qualcosa, mentre i dettagli sono ancora freschi. Una domanda che segue un&amp;#39;azione ottiene una risposta su quell&amp;#39;azione. Una domanda che arriva dal nulla ottiene una risposta sull&amp;#39;umore della persona in quel momento, oppure nessuna.&lt;/p&gt;
&lt;p&gt;Non chiedere alla registrazione, perché nessuno ha ancora usato niente. Non chiedere nel mezzo di un&amp;#39;attività, perché interrompi proprio ciò che vuoi capire. Quando una persona ha risposto, lasciala in pace finché non hai qualcosa da comunicarle.&lt;/p&gt;
&lt;h2&gt;Dove si dovrebbe chiedere feedback ai clienti?&lt;/h2&gt;
&lt;p&gt;Chiedi nel posto in cui è avvenuta l&amp;#39;esperienza. Una richiesta nell&amp;#39;app va bene per una domanda su una schermata. Il thread di supporto va bene per una domanda su una correzione. L&amp;#39;email va bene per una domanda su una settimana di uso, o su un flusso che la persona ha abbandonato. Una chiamata va bene per le domande che non puoi prevedere.&lt;/p&gt;
&lt;p&gt;Ogni canale dà un tipo diverso di risposta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nell&amp;#39;app:&lt;/strong&gt; risposte brevi, immediate e specifiche, ma solo da chi è presente. Da chi se n&amp;#39;è andato non senti nulla.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread di supporto:&lt;/strong&gt; da persone già abbastanza frustrate da scrivere. Ottimo per trovare cose rotte, scarso per giudicare il resto del prodotto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email:&lt;/strong&gt; risposte più lunghe da meno persone, e l&amp;#39;unico modo per raggiungere gli utenti che si sono fatti silenziosi. Scrivila come una breve nota da una persona con un nome, con una sola domanda dentro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intervista:&lt;/strong&gt; il modo per capire perché le persone fanno ciò che fanno. Chiedi loro di mostrarti come lavorano, e stai zitto mentre lo fanno.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/blog/it/feedback-signal-quality/&quot;&gt;Qualità del segnale nel feedback&lt;/a&gt; spiega come valutare ciò che ogni canale ti dice.&lt;/p&gt;
&lt;h2&gt;Come si chiede un feedback in modo professionale?&lt;/h2&gt;
&lt;p&gt;Sii specifico sull&amp;#39;oggetto, spiega perché lo chiedi e fai in modo che rispondere costi meno di un minuto. Una richiesta professionale nomina il momento, chiarisce che una persona leggerà la risposta e non si scusa per l&amp;#39;interruzione.&lt;/p&gt;
&lt;p&gt;Nomina l&amp;#39;azione esatta (&amp;quot;l&amp;#39;export che hai appena lanciato&amp;quot;), chiedi una cosa sola, usa una casella di testo libero senza campi obbligatori e firma con un nome di battesimo.&lt;/p&gt;
&lt;h2&gt;Qual è una buona frase per chiedere un feedback?&lt;/h2&gt;
&lt;p&gt;Una buona frase è una domanda su un momento specifico a cui si può rispondere in poche parole. Confronta le due colonne qui sotto. Quelle a sinistra si possono liquidare con una scrollata di spalle. Quelle a destra obbligano la persona a ricordare qualcosa di reale.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Richiesta debole&lt;/th&gt;
&lt;th&gt;Richiesta più forte&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&amp;quot;Feedback?&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Qual è stata la parte più difficile della configurazione?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Ti piace il nostro prodotto?&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Per cosa l&amp;#39;hai usato la settimana scorsa?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Valuta la tua esperienza da 1 a 10.&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Oggi sei riuscito a fare quello per cui eri venuto?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Dicci come possiamo migliorare.&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;Qual è una cosa che ti ha rallentato questa settimana?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Ci consiglieresti?&amp;quot;&lt;/td&gt;
&lt;td&gt;&amp;quot;A chi l&amp;#39;hai mostrato l&amp;#39;ultima volta, e cosa hai detto?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Un&amp;#39;altra che funziona quasi ovunque: &amp;quot;Cosa usi al posto nostro quando questo non fa per te?&amp;quot; Fa emergere il vero concorrente, che spesso è un foglio di calcolo.&lt;/p&gt;
&lt;h2&gt;Quali sono i modi peggiori di chiedere feedback?&lt;/h2&gt;
&lt;p&gt;Le richieste peggiori sono generiche, premature, lunghe o tendenziose. Hanno un problema in comune: la persona non può rispondere senza fare il lavoro di riflessione che avresti dovuto fare tu.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Compila il nostro sondaggio di 20 domande.&amp;quot;&lt;/strong&gt; Chi arriva in fondo è chi ha più tempo libero o le opinioni più forti.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un popup nella prima pagina dopo il login.&lt;/strong&gt; L&amp;#39;utente era venuto per fare qualcosa e glielo hai impedito. Chiuderlo è l&amp;#39;unica risposta sensata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Ci farebbe piacere il tuo feedback!&amp;quot; senza nessuna domanda.&lt;/strong&gt; Chiede all&amp;#39;utente di inventarsi l&amp;#39;argomento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una domanda tendenziosa: &amp;quot;Quanto ami la nuova dashboard?&amp;quot;&lt;/strong&gt; Ottieni un sì e non impari niente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una valutazione senza seguito.&lt;/strong&gt; Un 6 su 10 ti dice l&amp;#39;umore. Non ti dice cosa cambiare.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chiedere e poi tacere.&lt;/strong&gt; Ti costa il giro successivo, come spieghiamo più avanti.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Come si chiama il feedback dei clienti su un prodotto?&lt;/h2&gt;
&lt;p&gt;Il feedback su un prodotto si chiama di solito feedback di prodotto, e si divide in due tipi. Una segnalazione di bug dice che qualcosa non funziona come previsto. Una richiesta di funzionalità dice che manca qualcosa. La distinzione decide chi se ne occupa per primo, e &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-vs-bug-report/&quot;&gt;richiesta di funzionalità o bug&lt;/a&gt; traccia quel confine. Un terzo tipo, gli elogi, vale la pena di conservarlo e citarlo con il permesso.&lt;/p&gt;
&lt;p&gt;Un modulo di feedback che offre &amp;quot;Bug&amp;quot; e &amp;quot;Richiesta di funzionalità&amp;quot; come prima scelta fa questa prima smistata al posto tuo.&lt;/p&gt;
&lt;h2&gt;Cosa si fa con le risposte?&lt;/h2&gt;
&lt;p&gt;Metti ogni risposta dove il team già lavora, con le parole della persona intatte. Una riga di testo citato vale più del tuo riassunto. Etichettala per tipo e urgenza approssimativa, unisci i duplicati e decidi: costruirla, metterla da parte o rifiutarla.&lt;/p&gt;
&lt;p&gt;Anche rifiutare è una risposta. &amp;quot;Non la costruiremo, ed ecco perché&amp;quot; mette fine all&amp;#39;attesa, e &lt;a href=&quot;https://changeloop.dev/blog/it/declining-feature-requests/&quot;&gt;rifiutare le richieste di funzionalità&lt;/a&gt; ha delle formulazioni per farlo. Per l&amp;#39;infrastruttura, &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-tracking/&quot;&gt;tracciare le richieste di funzionalità&lt;/a&gt; descrive come portare le richieste da cinque canali in un&amp;#39;unica lista. Se raccogli le richieste per iscritto, un &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-template/&quot;&gt;template di richiesta di funzionalità&lt;/a&gt; le rende confrontabili.&lt;/p&gt;
&lt;p&gt;Il widget di Changeloop registra ogni invio come un issue di GitHub, così il feedback finisce accanto al codice che lo risolverà. Con qualsiasi strumento la regola è la stessa: una lista, un responsabile, nessuna risposta dimenticata nella casella di qualcuno.&lt;/p&gt;
&lt;h2&gt;Perché dire alle persone cosa è stato rilasciato?&lt;/h2&gt;
&lt;p&gt;Mostra alla persona che rispondere è valsa il suo tempo. Un utente che ti ha detto qualcosa e poi sente &amp;quot;è stato rilasciato, grazie&amp;quot; ha un motivo per rispondere ancora. Chi non sente niente conclude che la casella non viene letta.&lt;/p&gt;
&lt;p&gt;Quindi l&amp;#39;ultimo passo del chiedere è una risposta. Di&amp;#39; a ciascuno che ha chiesto quando la sua richiesta viene rilasciata, con le sue parole, sul canale che ha usato. &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;Chiudere il ciclo di feedback del cliente&lt;/a&gt; descrive il meccanismo: la voce di changelog pubblicata è ciò che fa partire il messaggio, così chi ha chiesto viene avvisato solo quando la modifica è online. In Changeloop, quando il feedback del widget è diventato un issue GitHub e la pull request unita lo chiude, approvare la voce pubblica un commento &amp;quot;Shipped&amp;quot; su quell&amp;#39;issue e mostra a chi l&amp;#39;ha inviata la voce nel widget; gli issue aperti a mano e i repository GitLab o Bitbucket non ricevono nessun commento. La nostra documentazione elenca la &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;configurazione di widget e feed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Una risposta può essere breve: &amp;quot;A marzo avevi chiesto l&amp;#39;import CSV. Oggi è online, ed ecco come funziona.&amp;quot; Ti regala anche la domanda successiva migliore: copre quello che ti serviva?&lt;/p&gt;
&lt;h2&gt;Un piano per cominciare&lt;/h2&gt;
&lt;p&gt;Scegli un momento dalla tabella in alto, quello in cui gli utenti più spesso riescono o rinunciano. Scrivi una domanda per quel momento, mettila in un solo canale e leggi ogni risposta per due settimane prima di aggiungere una seconda richiesta. Rispondi a chiunque ti abbia dato qualcosa di concreto.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Con che frequenza si dovrebbe chiedere feedback ai clienti?&lt;/strong&gt;
Lega le richieste agli eventi, non al calendario. Un utente dovrebbe vedere al massimo una richiesta a settimana, e nessuna subito dopo averne risposto a una. Il messaggio successivo al feedback dovrebbe essere una risposta su cosa ne è stato.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come si chiede feedback senza infastidire gli utenti?&lt;/strong&gt;
Chiedi dopo un&amp;#39;attività, mai nel mezzo, limitati a una domanda e rendi facile chiuderla. Rispetta una chiusura per qualche settimana.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conviene offrire un incentivo per il feedback?&lt;/strong&gt;
Di solito non serve. Una domanda specifica e una risposta visibile pesano più di un buono regalo, e gli incentivi attirano chi vuole il premio. Tienili per le interviste, dove chiedi 20 minuti del tempo di qualcuno.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se nessuno risponde?&lt;/strong&gt;
Restringi la domanda e avvicinala al momento, per esempio a una sola schermata, chiesta subito dopo averla usata. Se resta silenzio, scrivi direttamente a una manciata di utenti e usa quelle conversazioni per scrivere richieste migliori.&lt;/p&gt;
</content:encoded></item><item><title>Esempi di roadmap di prodotto: sei formati e come falliscono</title><link>https://changeloop.dev/blog/it/product-roadmap-examples/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/product-roadmap-examples/</guid><description>Sei esempi di roadmap di prodotto con voci realistiche: Now/Next/Later, trimestrale, per temi, per risultati, pubblica e di rilascio. Dove si rompono.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Gli esempi di roadmap di prodotto che vale la pena copiare rientrano in sei formati: Now/Next/Later, una timeline trimestrale, una roadmap per temi, una per risultati, una roadmap pubblica e una roadmap di rilascio interna. Ognuno risponde a una domanda diversa per un lettore diverso, quindi l&amp;#39;esempio giusto è quello che corrisponde a chi leggerà la tua. L&amp;#39;aspetto grafico è l&amp;#39;ultima cosa da decidere.&lt;/p&gt;
&lt;p&gt;Ogni esempio qui sotto riguarda un prodotto inventato, una piccola app di task per team, e ogni voce è inventata. Conta la forma: cosa va in ogni slot, che aspetto ha una voce reale e cosa rompe quel formato dopo un trimestre.&lt;/p&gt;
&lt;h2&gt;Quali sono dei buoni esempi di roadmap di prodotto?&lt;/h2&gt;
&lt;p&gt;Un buon esempio di roadmap è breve, nomina un lettore e fa un solo tipo di promessa. Scegli il formato in base alla promessa che sei disposto a mantenere: una direzione, una data, un tema di lavoro, un risultato, un impegno pubblico o un calendario di consegne.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Formato&lt;/th&gt;
&lt;th&gt;Pensato per&lt;/th&gt;
&lt;th&gt;Funziona quando&lt;/th&gt;
&lt;th&gt;Fallisce quando&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Now/Next/Later&lt;/td&gt;
&lt;td&gt;Tutta l&amp;#39;azienda&lt;/td&gt;
&lt;td&gt;I piani cambiano spesso&lt;/td&gt;
&lt;td&gt;&amp;quot;Next&amp;quot; si riempie e diventa una coda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timeline trimestrale&lt;/td&gt;
&lt;td&gt;Vendite, supporto, dirigenza&lt;/td&gt;
&lt;td&gt;Le date sono vincoli reali&lt;/td&gt;
&lt;td&gt;Le date slittano e nessuno le aggiorna&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per temi&lt;/td&gt;
&lt;td&gt;Dirigenza, nuovi assunti&lt;/td&gt;
&lt;td&gt;Vuoi spiegare il perché&lt;/td&gt;
&lt;td&gt;I temi diventano così ampi che ogni voce ci sta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per risultati&lt;/td&gt;
&lt;td&gt;Prodotto e ingegneria&lt;/td&gt;
&lt;td&gt;Puoi misurare l&amp;#39;obiettivo&lt;/td&gt;
&lt;td&gt;La metrica non ha un responsabile o non ha dati&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pubblica&lt;/td&gt;
&lt;td&gt;Clienti&lt;/td&gt;
&lt;td&gt;Riesci a tenerla piccola&lt;/td&gt;
&lt;td&gt;Diventa una discarica di backlog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rilascio interno&lt;/td&gt;
&lt;td&gt;Ingegneria, QA, supporto&lt;/td&gt;
&lt;td&gt;Più team rilasciano insieme&lt;/td&gt;
&lt;td&gt;La si scambia per strategia&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Che aspetto ha ciascun esempio di roadmap di prodotto?&lt;/h2&gt;
&lt;p&gt;Ogni formato qui sotto è mostrato con voci realistiche, seguite da chi lo usa, quando regge e come di solito fallisce.&lt;/p&gt;
&lt;h3&gt;Now/Next/Later&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;NOW (in costruzione questo mese)
  Viste salvate nella inbox
  Export CSV che funziona sugli account grandi
NEXT (deciso, ordine non fissato)
  SSO per il piano Team
  Notifiche Slack
LATER (una direzione, nessun impegno)
  App mobile
  Audit log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo formato va bene per un&amp;#39;azienda che non vuole promettere date, il che vale per molti team nelle prime fasi. Regge perché le tre colonne descrivono quanto sei sicuro: &amp;quot;now&amp;quot; è in corso, &amp;quot;next&amp;quot; è deciso, &amp;quot;later&amp;quot; è una speranza. Fallisce quando &amp;quot;later&amp;quot; diventa il posto dove parcheggiare ogni idea che nessuno vuole rifiutare, e quando &amp;quot;next&amp;quot; acquisisce di nascosto un ordine e una data senza che nessuno lo chiami timeline.&lt;/p&gt;
&lt;h3&gt;Timeline o roadmap trimestrale&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Q4 2026
  Ott   Viste salvate nella inbox
  Nov   SSO beta con cinque design partner
  Dic   SSO disponibilità generale
Q1 2027
  Gen   Notifiche Slack
  Mar   Audit log (solo export)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Serve a vendite, supporto e finanza, che hanno bisogno di pianificare intorno a qualcosa. Funziona quando le date sono vincoli reali, come un contratto, una conferenza o una scadenza di conformità. Fallisce quando le date sono ipotesi, perché un mese in roadmap diventa una promessa in una presentazione commerciale nel giro di poche settimane. Se usi questo formato, etichetta ogni trimestre come impegnato o previsto, e rendi il secondo trimestre visibilmente più morbido del primo.&lt;/p&gt;
&lt;h3&gt;Roadmap per temi&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;TEMA: La prima settimana
  Import da CSV e Trello
  Template iniziali
TEMA: Pronti per team più grandi
  SSO
  Audit log
  Permessi per ruolo
TEMA: Meno passaggi manuali
  Notifiche Slack
  Attività ricorrenti
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Va bene per gli aggiornamenti alla dirigenza e per i nuovi assunti, perché spiega perché esiste il lavoro prima di elencarlo. Regge quando ogni tema corrisponde a un motivo per cui un cliente ci terrebbe. Fallisce quando i temi sono così larghi (&amp;quot;Crescita&amp;quot;, &amp;quot;Qualità&amp;quot;) che ogni voce sta sotto ognuno di essi, e a quel punto il raggruppamento non spiega più nulla.&lt;/p&gt;
&lt;h3&gt;Roadmap per risultati&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;OBIETTIVO: Più nuovi team completano la configurazione
  Metrica: setup finito entro 7 giorni, dal 40% al 55%
  Scommesse: import da CSV, template iniziali
OBIETTIVO: Meno ticket di supporto sugli export
  Metrica: ticket sugli export a settimana, da 30 a 10
  Scommesse: fix export account grandi, pagina stato export
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I numeri sono illustrativi, e il punto è la struttura: un obiettivo, una metrica con un valore di partenza e uno di arrivo, e le scommesse che proverai. Serve ai team di prodotto e ingegneria a cui si lascia scegliere la soluzione. Funziona quando la metrica esiste e qualcuno ne è responsabile. Fallisce quando l&amp;#39;obiettivo non è misurabile, o quando le &amp;quot;scommesse&amp;quot; sono la stessa lista di funzionalità di prima con una frase sul risultato appiccicata sopra.&lt;/p&gt;
&lt;h3&gt;Roadmap pubblica per i clienti&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;PIANIFICATO
  Viste salvate nella inbox
IN COSTRUZIONE
  Notifiche Slack
RILASCIATO
  Export CSV per gli account grandi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;È il formato più piccolo, e fa la promessa più forte. Serve ai clienti, che vogliono sapere se la loro richiesta è stata ascoltata. Regge con pochissime voci, senza date e con titoli scritti con le parole del cliente. Fallisce come discarica di backlog: ogni &amp;quot;forse&amp;quot; che elenchi è una promessa su cui qualcuno ti chiederà conto più avanti. Come gestirne una a partire dal tuo issue tracker è spiegato in &lt;a href=&quot;https://changeloop.dev/blog/it/public-roadmap/&quot;&gt;una roadmap pubblica in tre colonne&lt;/a&gt;, quindi qui non lo ripetiamo.&lt;/p&gt;
&lt;h3&gt;Roadmap di rilascio interna&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rilascio&lt;/th&gt;
&lt;th&gt;Obiettivo&lt;/th&gt;
&lt;th&gt;Responsabile&lt;/th&gt;
&lt;th&gt;Dipende da&lt;/th&gt;
&lt;th&gt;Stato&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;5.2&lt;/td&gt;
&lt;td&gt;14 ott&lt;/td&gt;
&lt;td&gt;Piattaforma&lt;/td&gt;
&lt;td&gt;Upgrade del servizio di auth&lt;/td&gt;
&lt;td&gt;Codice completo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5.3&lt;/td&gt;
&lt;td&gt;11 nov&lt;/td&gt;
&lt;td&gt;Inbox&lt;/td&gt;
&lt;td&gt;API delle viste salvate&lt;/td&gt;
&lt;td&gt;In corso&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5.4&lt;/td&gt;
&lt;td&gt;9 dic&lt;/td&gt;
&lt;td&gt;Piattaforma&lt;/td&gt;
&lt;td&gt;Contratto col fornitore SSO&lt;/td&gt;
&lt;td&gt;Bloccato&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Serve a ingegneria, QA e supporto, che devono sapere cosa esce insieme e cosa blocca cosa. Funziona quando è precisa alla settimana e ogni riga ha un responsabile. Fallisce quando qualcuno la scambia per strategia: un calendario di consegne dice cosa sta uscendo e quando, e non dice nulla sul fatto che quei rilasci fossero le scommesse giuste.&lt;/p&gt;
&lt;h2&gt;Quale formato di roadmap di prodotto scegliere?&lt;/h2&gt;
&lt;p&gt;Scegli prima in base al lettore, poi in base a quanta certezza hai davvero. Se non sai dire chi legge la roadmap e quale decisione lo aiuta a prendere, nessuno degli esempi qui sopra la salverà.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Clienti che chiedono &amp;quot;mi avete ascoltato?&amp;quot;&lt;/strong&gt; Usa il formato pubblico, e tienilo a una manciata di voci.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vendite e supporto che chiedono &amp;quot;posso dare una data al cliente?&amp;quot;&lt;/strong&gt; Usa la timeline trimestrale, con impegnato e previsto ben separati.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La dirigenza che chiede &amp;quot;perché questo lavoro?&amp;quot;&lt;/strong&gt; Usa i temi, o i risultati se hai i dati.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un team che cambia direzione ogni mese.&lt;/strong&gt; Usa Now/Next/Later e resisti alla tentazione di datarlo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gli ingegneri che chiedono &amp;quot;cosa esce quando?&amp;quot;&lt;/strong&gt; Usa la roadmap di rilascio, e tienila separata da quella strategica.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La maggior parte dei team finisce con due roadmap: una strategica in una delle prime quattro forme, e sotto un calendario di rilasci. Una roadmap pubblica è allora una vista filtrata di quella strategica, che mostra solo ciò per cui accetti di essere chiamato a rispondere.&lt;/p&gt;
&lt;h2&gt;Come si scrive una roadmap di prodotto?&lt;/h2&gt;
&lt;p&gt;Scrivi una roadmap nominando il lettore, scegliendo il formato adatto alla sua domanda, elencando solo le voci che difenderesti in una riunione e dando a ciascuna uno stato e un responsabile. Poi decidi ogni quanto verrà rivista, prima di pubblicarla.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Nomina il lettore e la decisione.&lt;/strong&gt; &amp;quot;Il supporto decide cosa dire ai clienti sull&amp;#39;SSO&amp;quot; è un motivo. &amp;quot;Tutti dovrebbero vedere la roadmap&amp;quot; non ti dà nulla su cui progettare.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parti da ciò che già sai.&lt;/strong&gt; Le richieste aperte, &lt;a href=&quot;https://changeloop.dev/blog/it/prioritizing-feature-requests/&quot;&gt;ordinate con una regola che sai spiegare&lt;/a&gt;, sono materia prima migliore di un brainstorming.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scrivi ogni voce come un risultato per il cliente.&lt;/strong&gt; &amp;quot;Conserva un filtro che usi spesso&amp;quot; si legge meglio di &amp;quot;Implementare la persistenza delle viste salvate&amp;quot;, e dice al cliente se il problema è il suo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decidi cosa la roadmap non conterrà.&lt;/strong&gt; Date, stime e un backlog di idee sono le tre esclusioni abituali.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fissa una data di revisione.&lt;/strong&gt; Una roadmap senza revisione programmata ha un funerale non programmato.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Come si mantiene aggiornata una roadmap di prodotto?&lt;/h2&gt;
&lt;p&gt;Mantieni aggiornata una roadmap spostando le voci quando si muove il lavoro, dallo stesso posto in cui il lavoro è tracciato, e registrando cosa è successo quando una voce viene rilasciata o abbandonata. Una roadmap aggiornata a mano in uno strumento separato diventa obsoleta perché non è il lavoro quotidiano di nessuno.&lt;/p&gt;
&lt;p&gt;La fonte di verità più economica è l&amp;#39;issue tracker. Se ogni colonna della roadmap corrisponde a un&amp;#39;etichetta sull&amp;#39;issue, la roadmap cambia quando cambia l&amp;#39;etichetta, e nulla viene riscritto. La versione di Changeloop usa le etichette &lt;code&gt;roadmap:planned&lt;/code&gt;, &lt;code&gt;roadmap:building&lt;/code&gt; e &lt;code&gt;roadmap:shipped&lt;/code&gt;, e quando un issue ne porta due vince la più avanzata. Spostare una scheda su rilasciato resta comunque una modifica di etichetta a sé, quindi rendila parte della revisione in cui approvi la voce di changelog.&lt;/p&gt;
&lt;p&gt;Quella voce è l&amp;#39;altra metà. Quando una voce viene rilasciata, il changelog dice cosa è cambiato nei termini del cliente, e a chi lo aveva chiesto si può dire che è fatto. Chiudere questo ciclo è lo scopo del &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;ciclo di feedback del cliente&lt;/a&gt;, e la roadmap è il tratto di quel ciclo che il cliente può vedere prima che qualcosa venga rilasciato. Se abbandoni una voce, dillo; un &amp;quot;no&amp;quot; pubblico chiude anche quella richiesta, e &lt;a href=&quot;https://changeloop.dev/blog/it/declining-feature-requests/&quot;&gt;rifiutare le richieste di funzionalità&lt;/a&gt; spiega come formularlo. I team che vogliono vedere come si leggono le voci finite possono sfogliare gli &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Qual è il formato di roadmap di prodotto più semplice?&lt;/strong&gt;
Now/Next/Later. Ha tre colonne, non richiede date e raggruppa le voci per grado di certezza. Per un piccolo team che cambia direzione spesso, è anche il formato in cui è più difficile fare una figuraccia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quante voci dovrebbe avere una roadmap di prodotto?&lt;/strong&gt;
Meno di quante pensi. Meno di dieci su tutte le colonne bastano per una roadmap pubblica, e una strategica interna raramente ne richiede più di una dozzina. Oltre, è un backlog con un&amp;#39;intestazione più carina.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una roadmap di prodotto dovrebbe includere delle date?&lt;/strong&gt;
Solo se le date sono vincoli reali, e in quel caso solo per il trimestre più vicino. Oltre, usa colonne o temi. Una data in roadmap diventa un impegno in una trattativa commerciale, che tu lo voglia o no.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra una roadmap di prodotto e un piano di rilascio?&lt;/strong&gt;
La roadmap dice cosa intendi costruire e perché. Il piano di rilascio dice quale build esce in quale data e chi ne è responsabile. La roadmap cambia quando cambia la strategia, e il piano di rilascio cambia quando cambia il lavoro.&lt;/p&gt;
</content:encoded></item><item><title>Processo di release management per chi rilascia spesso</title><link>https://changeloop.dev/blog/it/release-management-process/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/release-management-process/</guid><description>Un processo di release management in sette passi, con responsabile e criteri di uscita per ciascuno, più le metriche DORA e un altro KPI da seguire.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un processo di release management è l&amp;#39;insieme dei passi che porta una modifica da &amp;quot;integrata&amp;quot; a &amp;quot;in esecuzione in produzione e spiegata alle persone che riguarda&amp;quot;. Per un team che rilascia spesso si riduce a sette passi: pianificare l&amp;#39;ambito, isolare la modifica, compilare e testare, approvare, rilasciare e verificare, comunicare, e fare la revisione. Ogni passo ha bisogno di un responsabile con nome e di un criterio di uscita, altrimenti smette di accadere senza che nessuno se ne accorga.&lt;/p&gt;
&lt;p&gt;Questa guida presuppone un team da 5 a 50 ingegneri che rilascia ogni settimana o ogni giorno e vuole che il processo non intralci.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Passo&lt;/th&gt;
&lt;th&gt;Responsabile&lt;/th&gt;
&lt;th&gt;Criteri di uscita&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;1. Pianificare l&amp;#39;ambito&lt;/td&gt;
&lt;td&gt;Product o tech lead&lt;/td&gt;
&lt;td&gt;L&amp;#39;elenco delle modifiche di questo rilascio è scritto, e ciò che è rischioso è segnato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Branch o flag&lt;/td&gt;
&lt;td&gt;L&amp;#39;ingegnere che possiede la modifica&lt;/td&gt;
&lt;td&gt;Il lavoro è su un branch di breve durata o dietro un flag, così main resta rilasciabile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Build e test&lt;/td&gt;
&lt;td&gt;La CI, con l&amp;#39;autore reperibile per i fallimenti&lt;/td&gt;
&lt;td&gt;Pipeline verde sul commit esatto che verrà rilasciato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Approvare&lt;/td&gt;
&lt;td&gt;Revisore, più il release manager per le modifiche rischiose&lt;/td&gt;
&lt;td&gt;Revisione fatta, percorso di rollback nominato, go o no-go registrato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. Deploy e verifica&lt;/td&gt;
&lt;td&gt;Release manager o ingegnere di turno&lt;/td&gt;
&lt;td&gt;Rilasciato, smoke check superati, tasso di errori e latenza in linea con la baseline pre-rilascio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6. Comunicare&lt;/td&gt;
&lt;td&gt;Chi capisce la modifica, rivisto da qualcuno che non la capisce&lt;/td&gt;
&lt;td&gt;Release notes pubblicate dove gli utenti le leggono, supporto e vendite avvisati&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7. Revisione&lt;/td&gt;
&lt;td&gt;Release manager&lt;/td&gt;
&lt;td&gt;Metriche lette, ciò che è andato storto ha un responsabile e una correzione&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Cos&amp;#39;è il processo di release management?&lt;/h2&gt;
&lt;p&gt;È il percorso ripetibile che una modifica segue per raggiungere gli utenti: ambito, build, test, approvazione, deploy, verifica, annuncio e bilancio finale. Il senso di metterlo per iscritto è che ogni rilascio segue lo stesso percorso, così una persona in ferie, un nuovo assunto o un ingegnere di turno alle 2 di notte può eseguirlo senza chiedere a nessuno come funziona.&lt;/p&gt;
&lt;h2&gt;Quali sono i diversi tipi di release management?&lt;/h2&gt;
&lt;p&gt;Ci sono tre tipi pratici: deploy continuo, rilasci programmati e gestione del cambiamento regolamentata. Si differenziano per quanto accade prima di un rilascio e quanto è automatizzato. Il deploy continuo rilascia ogni modifica integrata, i rilasci programmati raggruppano le modifiche in un treno, e la gestione del cambiamento regolamentata aggiunge approvazione formale e una traccia di audit.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Deploy continuo&lt;/th&gt;
&lt;th&gt;Rilasci programmati&lt;/th&gt;
&lt;th&gt;Gestione del cambiamento regolamentata o ITIL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Unità di rilascio&lt;/td&gt;
&lt;td&gt;Una pull request integrata&lt;/td&gt;
&lt;td&gt;Un lotto, settimanale o quindicinale&lt;/td&gt;
&lt;td&gt;Una richiesta di cambiamento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passo dell&amp;#39;ambito&lt;/td&gt;
&lt;td&gt;Implicito, l&amp;#39;integrazione è l&amp;#39;ambito&lt;/td&gt;
&lt;td&gt;Riunione di pianificazione del rilascio&lt;/td&gt;
&lt;td&gt;Record di cambiamento con valutazione del rischio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approvazione&lt;/td&gt;
&lt;td&gt;Code review più controlli automatici&lt;/td&gt;
&lt;td&gt;Il release manager approva il lotto&lt;/td&gt;
&lt;td&gt;Change advisory board o approvatore delegato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Controllo del rischio&lt;/td&gt;
&lt;td&gt;Feature flag, canary, rollback rapido&lt;/td&gt;
&lt;td&gt;Soak in staging, release candidate&lt;/td&gt;
&lt;td&gt;Piano di backout documentato, finestra di manutenzione&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cadenza tipica&lt;/td&gt;
&lt;td&gt;Molti al giorno&lt;/td&gt;
&lt;td&gt;Da settimanale a mensile&lt;/td&gt;
&lt;td&gt;Stabilita dal calendario dei cambiamenti&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Punto debole&lt;/td&gt;
&lt;td&gt;Nessuno dice agli utenti cosa è cambiato&lt;/td&gt;
&lt;td&gt;I lotti grandi nascondono la modifica che ha rotto qualcosa&lt;/td&gt;
&lt;td&gt;Il tempo di processo supera di molto la modifica stessa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;La maggior parte dei team è un misto. Un prodotto SaaS può fare deploy continuo mentre la sua app mobile esce con un treno settimanale, e l&amp;#39;unico servizio di pagamenti che interessa ai revisori segue un record di cambiamento formale. Scegli il tipo per servizio, non per azienda. Dove le modifiche vengono esposte gradualmente, rilascio e annuncio diventano eventi separati, come nel caso trattato in &lt;a href=&quot;https://changeloop.dev/blog/it/feature-flags-feature-requests/&quot;&gt;release notes con feature flag&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Quali sono le responsabilità di un release manager?&lt;/h2&gt;
&lt;p&gt;Un release manager possiede il percorso che una modifica compie fino alla produzione. Tiene il calendario dei rilasci, decide se una modifica è pronta, esegue o supervisiona il deploy, prende la decisione sul rollback, si assicura che gli utenti siano avvisati e conduce la revisione successiva.&lt;/p&gt;
&lt;p&gt;Prima del rilascio, conferma l&amp;#39;ambito e controlla che ogni modifica rischiosa abbia un percorso di rollback. Durante, esegue la checklist di deploy, osserva i primi minuti di metriche di produzione e decide presto un rollback. Dopo, conferma che le note siano uscite e registra cosa correggere nel processo.&lt;/p&gt;
&lt;p&gt;In un team piccolo, ruota il ruolo ogni settimana e scrivi la checklist in modo che nessuno abbia bisogno di conoscenze tramandate a voce. Un &lt;a href=&quot;https://changeloop.dev/blog/it/monorepo-changelogs/&quot;&gt;monorepo&lt;/a&gt; con molti pacchetti rilasciati in modo indipendente di solito richiede un responsabile del rilascio per pacchetto, altrimenti il ruolo diventa un collo di bottiglia.&lt;/p&gt;
&lt;h2&gt;Quali sono i KPI chiave per il release management?&lt;/h2&gt;
&lt;p&gt;Segui le metriche di delivery del software DORA, e aggiungine una tua: quanto tempo passa prima che gli utenti vengano avvisati. La ricerca DORA individua cinque metriche, divise in throughput (tempo di consegna delle modifiche, frequenza di deploy, tempo di ripristino da deploy fallito) e instabilità (tasso di fallimento delle modifiche, tasso di rilavorazione dei deploy).&lt;/p&gt;
&lt;p&gt;La guida DORA le definisce in termini semplici (&lt;a href=&quot;https://dora.dev/guides/dora-metrics/&quot;&gt;dora.dev, software delivery metrics&lt;/a&gt;):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;KPI&lt;/th&gt;
&lt;th&gt;Cosa misura&lt;/th&gt;
&lt;th&gt;A cosa fare attenzione&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Tempo di consegna delle modifiche&lt;/td&gt;
&lt;td&gt;Tempo dal commit nel controllo di versione al deploy in produzione&lt;/td&gt;
&lt;td&gt;Un numero in crescita di solito indica code in revisione o approvazione&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frequenza di deploy&lt;/td&gt;
&lt;td&gt;Quanto spesso fai deploy, o il tempo tra un deploy e l&amp;#39;altro&lt;/td&gt;
&lt;td&gt;Una frequenza in calo significa che i lotti stanno crescendo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tempo di ripristino da deploy fallito&lt;/td&gt;
&lt;td&gt;Tempo per riprendersi da un deploy che richiede intervento immediato&lt;/td&gt;
&lt;td&gt;Qui emergono i problemi di rollback e di allerta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tasso di fallimento delle modifiche&lt;/td&gt;
&lt;td&gt;Quota di deploy che richiedono un rollback o un hotfix&lt;/td&gt;
&lt;td&gt;Sale quando i lotti sono troppo grandi o i test sono scarsi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tasso di rilavorazione dei deploy&lt;/td&gt;
&lt;td&gt;Quota di deploy non pianificati e causati da un incidente in produzione&lt;/td&gt;
&lt;td&gt;Un segno che le correzioni escono più in fretta delle lezioni&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tempo prima che gli utenti siano avvisati&lt;/td&gt;
&lt;td&gt;Minuti dal deploy in produzione a una nota pubblicata per gli utenti&lt;/td&gt;
&lt;td&gt;Misuralo tu, nessun framework lo fornisce&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Il materiale più vecchio elenca quattro metriche chiave e chiama il ripristino &amp;quot;time to restore&amp;quot;. La guida attuale usa le cinque qui sopra.&lt;/p&gt;
&lt;p&gt;La stessa guida avverte di non trattarle come obiettivi. Fissare un traguardo come &amp;quot;tutto viene rilasciato più volte al giorno entro fine anno&amp;quot; invita i team a truccare i numeri, e le metriche vanno lette per applicazione o servizio, non mescolate su tutta l&amp;#39;azienda. Il suo consiglio pratico per migliorarle tutte è ridurre la dimensione di ogni modifica, perché le modifiche più piccole sono più facili da rivedere, da far passare nella pipeline e da cui riprendersi.&lt;/p&gt;
&lt;h2&gt;Come si inserisce la comunicazione dei rilasci nel processo di release management?&lt;/h2&gt;
&lt;p&gt;È il passo sei, e ha un responsabile e un criterio di uscita come ogni altro passo: note pubblicate dove gli utenti le leggono, e team interni avvisati. È il passo che i team saltano più spesso, perché gli strumenti di deploy segnalano il successo nel momento in cui il codice è online.&lt;/p&gt;
&lt;p&gt;Il modo più economico per tenere questo passo in orario è scrivere la voce quando la modifica viene integrata, non quando il rilascio esce. La pull request contiene già il titolo, l&amp;#39;autore, l&amp;#39;issue collegato e il contesto. Una bozza costruita da lì viene rivista, non scritta a memoria una settimana dopo. È l&amp;#39;idea dell&amp;#39;&lt;a href=&quot;https://changeloop.dev/blog/it/changelog-automation/&quot;&gt;automazione del changelog&lt;/a&gt;: ricavare una bozza all&amp;#39;integrazione, tenerla in attesa di approvazione umana, poi pubblicarla ovunque da un&amp;#39;unica fonte. Changeloop funziona così, preparando le voci dalle pull request integrate con l&amp;#39;AI e tenendole in attesa di approvazione prima che venga pubblicato qualcosa.&lt;/p&gt;
&lt;p&gt;Vale la pena pianificare in anticipo due varianti. Supporto e vendite hanno bisogno di una nota diversa da quella per i clienti, ed è a questo che servono le &lt;a href=&quot;https://changeloop.dev/blog/it/internal-release-notes/&quot;&gt;release note interne&lt;/a&gt;. Un rilascio guidato da un incidente non ha tempo per il normale ciclo di redazione, quindi tieni pronto un breve template, come descritto nelle &lt;a href=&quot;https://changeloop.dev/blog/it/emergency-release-notes/&quot;&gt;release notes di emergenza&lt;/a&gt;. Il &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;template di release notes&lt;/a&gt; ti dà una forma di partenza per la versione rivolta ai clienti.&lt;/p&gt;
&lt;h2&gt;Come si mantiene leggero il processo?&lt;/h2&gt;
&lt;p&gt;Automatizza ogni criterio di uscita che una macchina può controllare, e lascia agli umani i giudizi. Una pipeline verde, un marcatore di deploy sulle dashboard e una bozza di voce di changelog per ogni pull request integrata sono verificabili. Stabilire se un piano di rollback è credibile, o se le note hanno senso per un cliente, richiede una persona.&lt;/p&gt;
&lt;p&gt;Per mettere alla prova il processo, scegli un rilascio del mese scorso e chiediti se qualcuno fuori dal team potrebbe capire, dalla sola documentazione scritta, cosa è stato rilasciato, chi l&amp;#39;ha approvato, come è stato verificato e quando gli utenti sono stati avvisati. Ogni lacuna è il tuo prossimo miglioramento.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra release management e change management?&lt;/strong&gt;
Il release management porta un insieme di modifiche a essere compilate, testate, rilasciate e annunciate. Il change management, in senso ITIL, è il processo di approvazione e di rischio attorno a ogni modifica. I team che rilasciano spesso fondono l&amp;#39;approvazione nella code review e nei controlli automatici.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Con che frequenza dovremmo rilasciare?&lt;/strong&gt;
Con la frequenza che i vostri test e il percorso di rollback permettono, che per molti team web è ogni giorno o più. L&amp;#39;indicazione di DORA è ridurre la dimensione di ogni modifica, perché le modifiche piccole sono più facili da rivedere e da cui riprendersi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I team piccoli hanno bisogno di un release manager?&lt;/strong&gt;
Hanno bisogno delle responsabilità, ma non necessariamente del titolo. Fai ruotare il ruolo tra gli ingegneri, dai alla persona di turno una checklist scritta e assicurati che qualcuno sia responsabile di ciascuno dei sette passi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa dovrebbe includere una checklist di rilascio?&lt;/strong&gt;
Ambito confermato, pipeline verde sul commit da rilasciare, percorso di rollback nominato, approvazione registrata, smoke check dopo il deploy, metriche confrontate con la baseline, release notes pubblicate, supporto avvisato e una revisione in calendario. Tienila a una pagina.&lt;/p&gt;
</content:encoded></item><item><title>Esempi di release notes per ogni tipo di modifica</title><link>https://changeloop.dev/blog/it/release-notes-examples/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/release-notes-examples/</guid><description>Esempi di release notes per una funzionalità, una correzione, una breaking change, un fix di sicurezza, una deprecazione, un app store e una nota interna.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I migliori esempi di release notes sono brevi, dicono chi è interessato e cosa fare dopo. Qui sotto c&amp;#39;è un esempio per ogni tipo di modifica che rilascerai, con il motivo per cui funziona, così puoi copiare la forma e sostituire i tuoi fatti.&lt;/p&gt;
&lt;p&gt;Ogni esempio è inventato, per un&amp;#39;app di fatturazione fittizia chiamata Tidepool.&lt;/p&gt;
&lt;h2&gt;Cosa hanno in comune dei buoni esempi di release notes?&lt;/h2&gt;
&lt;p&gt;Dicono agli utenti cosa è cambiato e cosa, se serve, devono fare, con le parole degli utenti. Ogni tipo di modifica ha un compito diverso, quindi la forma cambia dall&amp;#39;una all&amp;#39;altra.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tipo di modifica&lt;/th&gt;
&lt;th&gt;La voce deve dire&lt;/th&gt;
&lt;th&gt;Dove va&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Nuova funzionalità&lt;/td&gt;
&lt;td&gt;Cosa può fare ora il lettore, e chi la riceve&lt;/td&gt;
&lt;td&gt;In cima alle note&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Miglioramento&lt;/td&gt;
&lt;td&gt;Cosa è diventato più veloce o facile, con un numero se ce l&amp;#39;hai&lt;/td&gt;
&lt;td&gt;Dopo le funzionalità&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correzione di bug&lt;/td&gt;
&lt;td&gt;Il sintomo che il lettore ha visto, e che è risolto&lt;/td&gt;
&lt;td&gt;Dopo i miglioramenti&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breaking change&lt;/td&gt;
&lt;td&gt;Chi è interessato, la data, la migrazione&lt;/td&gt;
&lt;td&gt;Per prima, sempre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fix di sicurezza&lt;/td&gt;
&lt;td&gt;Cosa era esposto, se è stato sfruttato, cosa fare&lt;/td&gt;
&lt;td&gt;Per prima&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deprecazione&lt;/td&gt;
&lt;td&gt;Cosa sparisce, la data di fine, il sostituto&lt;/td&gt;
&lt;td&gt;Vicino alla cima&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nota per l&amp;#39;app store&lt;/td&gt;
&lt;td&gt;Una frase semplice per modifica, entro il limite di caratteri&lt;/td&gt;
&lt;td&gt;Scheda dello store&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nota interna&lt;/td&gt;
&lt;td&gt;Cosa è cambiato e cosa dire ai clienti&lt;/td&gt;
&lt;td&gt;Canali di supporto e vendite&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Che aspetto ha una buona nota per una nuova funzionalità?&lt;/h2&gt;
&lt;p&gt;Una buona nota di funzionalità apre con ciò che il lettore può fare ora e nomina i piani o i ruoli che la ricevono. Salta l&amp;#39;implementazione.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Invia le fatture nella lingua del cliente.&lt;/strong&gt;
Ora puoi scegliere una lingua per ogni cliente, e le sue fatture, i solleciti e la pagina di pagamento la seguono. Francese, tedesco, spagnolo e portoghese sono disponibili su tutti i piani. Impostala nella pagina del cliente, sotto Preferenze di fatturazione.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il titolo è una frase che il lettore direbbe a voce alta, e il corpo dà ambito e posizione. Un lettore che scorre solo la riga in grassetto sa comunque cosa è stato rilasciato. Il metodo più ampio è in &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;come scrivere release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Che aspetto ha una buona nota di miglioramento?&lt;/h2&gt;
&lt;p&gt;Una nota di miglioramento descrive un cambiamento che il lettore sentirà, e mette un numero misurato quando esiste. Senza numero, di&amp;#39; cosa il lettore non deve più fare.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;L&amp;#39;elenco delle fatture si carica circa tre volte più in fretta.&lt;/strong&gt;
Gli account con più di 5.000 fatture aspettavano circa nove secondi per l&amp;#39;elenco. Ora si apre in circa tre. Nessuna azione necessaria.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;quot;Miglioramenti delle prestazioni&amp;quot; non dice niente al lettore, mentre nove secondi contro tre è un&amp;#39;affermazione che può verificare lunedì mattina. Il &amp;quot;Nessuna azione necessaria&amp;quot; finale risponde alla domanda che ogni lettore si fa.&lt;/p&gt;
&lt;h2&gt;Che aspetto ha una buona nota di correzione di bug?&lt;/h2&gt;
&lt;p&gt;Una nota di correzione descrive il sintomo che l&amp;#39;utente ha visto, non la causa nel codice, e dice se deve rifare qualcosa. Le correzioni che nessuno ha notato possono andare nell&amp;#39;elenco in fondo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Corretto: email di sollecito inviate due volte alla scadenza.&lt;/strong&gt;
Alcuni clienti ricevevano due solleciti identici se la fattura scadeva l&amp;#39;ultimo giorno del mese. Il problema è risolto. I solleciti già inviati non sono interessati, e nessuno deve rinviare nulla.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il titolo inizia con &amp;quot;Corretto&amp;quot; così chi scorre può smistarlo a colpo d&amp;#39;occhio, e la condizione reale (l&amp;#39;ultimo giorno del mese) segue subito.&lt;/p&gt;
&lt;h2&gt;Come si scrivono le release notes per una breaking change?&lt;/h2&gt;
&lt;p&gt;La nota di una breaking change apre con la data e il gruppo interessato, poi dà la migrazione nella stessa voce. Va per prima nelle release notes, perché è l&amp;#39;unica voce che un lettore non deve perdere.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Le firme dei webhook diventano obbligatorie il 1° dicembre 2026.&lt;/strong&gt;
Da quella data Tidepool smette di inviare payload webhook non firmati. Riguarda chi riceve webhook senza controllare l&amp;#39;header &lt;code&gt;Tidepool-Signature&lt;/code&gt;. Per migrare, verifica l&amp;#39;header con il segreto che trovi in Impostazioni, Sviluppatori. Se verifichi già le firme, nessuna azione necessaria.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La data è nel titolo, quindi sopravvive a una lettura veloce. Il gruppo interessato è nominato per ciò che fa, e l&amp;#39;ultima frase libera chi è già a posto, il che riduce il carico sul supporto. La guida alle &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;breaking changes&lt;/a&gt; spiega come decidere se una modifica conta.&lt;/p&gt;
&lt;h2&gt;Che aspetto ha una nota su un fix di sicurezza?&lt;/h2&gt;
&lt;p&gt;Una nota di sicurezza dice cosa era esposto, se qualcuno l&amp;#39;ha sfruttato, chi è interessato e cosa deve fare. Resta fattuale e calma.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sicurezza: i link di reimpostazione della password potevano essere riutilizzati.&lt;/strong&gt;
Tra il 3 e il 17 settembre 2026, un link di reimpostazione della password restava valido dopo essere stato usato una volta. Non abbiamo trovato segni di sfruttamento. Il problema è risolto, e tutti i link di reimpostazione in sospeso sono stati invalidati. Se hai richiesto una reimpostazione in quel periodo, richiedi un nuovo link.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La finestra esatta permette al lettore di valutare la propria esposizione, e la frase sullo sfruttamento risponde alla prima domanda che chiunque si fa. &amp;quot;Un potenziale problema&amp;quot; suona come un tentativo di nascondere, quindi di&amp;#39; ciò che sai.&lt;/p&gt;
&lt;h2&gt;Come si scrive un avviso di deprecazione?&lt;/h2&gt;
&lt;p&gt;Un avviso di deprecazione nomina ciò che viene rimosso, dà una data di fine ferma e indica il sostituto.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;L&amp;#39;endpoint v1 delle fatture è deprecato e termina il 1° marzo 2027.&lt;/strong&gt;
&lt;code&gt;GET /v1/invoices&lt;/code&gt; continua a funzionare fino al 1° marzo 2027, poi restituisce &lt;code&gt;410 Gone&lt;/code&gt;. Usa &lt;code&gt;GET /v2/invoices&lt;/code&gt;, che restituisce gli stessi campi più &lt;code&gt;currency&lt;/code&gt;. Le risposte di v1 ora includono un header &lt;code&gt;Sunset&lt;/code&gt; con la data di fine. Una guida di migrazione affiancata è nella documentazione.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il nome dell&amp;#39;endpoint è nel titolo, perché chi è interessato lo cerca, e il sostituto sta accanto alla rimozione. L&amp;#39;header &lt;code&gt;Sunset&lt;/code&gt; dice agli sviluppatori quali chiamate usano ancora la vecchia versione. Il trattamento più lungo è in &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;deprecare un&amp;#39;API&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Che aspetto ha una nota di rilascio per l&amp;#39;app store?&lt;/h2&gt;
&lt;p&gt;Una nota per l&amp;#39;app store è fatta di due o tre frasi semplici, perché la maggior parte delle persone legge solo la prima riga. Apri con la modifica che un utente noterebbe.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Scansiona una ricevuta cartacea e Tidepool compila importo, data e fornitore. La modalità scura ora segue l&amp;#39;impostazione del telefono. Abbiamo anche corretto un arresto anomalo all&amp;#39;apertura di una fattura da una notifica.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La modifica più utile viene per prima, e la correzione nomina la situazione che causava il crash. Niente numero di versione e niente &amp;quot;correzioni di bug e miglioramenti&amp;quot;. &lt;a href=&quot;https://changeloop.dev/blog/it/mobile-app-release-notes/&quot;&gt;Release notes per app mobile&lt;/a&gt; spiega le regole specifiche degli store.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe includere una nota di rilascio interna?&lt;/h2&gt;
&lt;p&gt;Una nota interna è la versione per supporto e vendite. Aggiunge ciò che la nota pubblica lascia fuori: cosa dire, e cosa evitare di promettere.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Le fatture multilingua sono uscite oggi (tutti i piani).&lt;/strong&gt;
Supporto: i clienti impostano la lingua sotto Preferenze di fatturazione, e le fatture esistenti mantengono la lingua originale. L&amp;#39;italiano non è ancora disponibile. Vendite: è aperta a ogni piano, quindi non presentarla come un upgrade.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ogni pubblico ha la sua riga etichettata, e la nota traccia il confine (&amp;quot;L&amp;#39;italiano non è ancora disponibile&amp;quot;) prima che un cliente lo chieda. L&amp;#39;articolo sulle &lt;a href=&quot;https://changeloop.dev/blog/it/internal-release-notes/&quot;&gt;release note interne&lt;/a&gt; spiega formato e canali.&lt;/p&gt;
&lt;h2&gt;Che aspetto ha una brutta release note, riscritta?&lt;/h2&gt;
&lt;p&gt;Una brutta release note elenca ciò che ha fatto il team invece di ciò che ottiene il lettore. Si corregge spostando il risultato in testa e togliendo il vocabolario interno.&lt;/p&gt;
&lt;p&gt;Prima:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;v3.8.1&lt;/strong&gt; Rifattorizzato lo scheduler dei solleciti. Corretta una race condition in &lt;code&gt;ReminderJob&lt;/code&gt;. Aggiornato &lt;code&gt;bull&lt;/code&gt; a 4.12. Miglioramenti vari.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dopo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Le email di sollecito non partono più due volte.&lt;/strong&gt;
I clienti con una fattura in scadenza l&amp;#39;ultimo giorno del mese potevano ricevere due solleciti. Il problema è risolto, e i solleciti già inviati non vanno rinviati. Nessuna azione necessaria.&lt;/p&gt;
&lt;p&gt;Anche nella 3.8.1: &lt;code&gt;bull&lt;/code&gt; aggiornato a 4.12.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;L&amp;#39;aggiornamento della dipendenza è sceso in una riga a piè di pagina, e la race condition è diventata un sintomo che un cliente riconoscerebbe.&lt;/p&gt;
&lt;h2&gt;Come si mantengono coerenti le release notes tra un rilascio e l&amp;#39;altro?&lt;/h2&gt;
&lt;p&gt;Scrivi ogni voce quando la modifica viene integrata, e fai approvare da una persona prima che esca.&lt;/p&gt;
&lt;p&gt;Changeloop funziona così: prepara una bozza di voce da ogni pull request integrata usando l&amp;#39;AI e la tiene in attesa finché una persona la approva. Il passaggio di approvazione è il punto in cui un editor applica le regole qui sopra. Per stabilire prima il formato, parti dal &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;template di release notes&lt;/a&gt;, e guarda gli &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; per vedere come sono fatte le pagine finite.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cosa sono le nuove release notes?&lt;/strong&gt;
Le nuove release notes sono il messaggio pubblicato con l&amp;#39;ultimo rilascio di un prodotto, che descrive cosa è cambiato e cosa devono fare gli utenti. Coprono funzionalità, miglioramenti, correzioni e breaking changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra una release note e un changelog?&lt;/strong&gt;
Il changelog tiene tutto, per chiunque voglia la storia intera. Una release note sceglie da lì: un solo rilascio, scritto per i lettori che stanno decidendo se li riguarda. Il confronto completo è in &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;changelog vs release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa significa release notes?&lt;/strong&gt;
Le release notes dicono agli utenti cosa è cambiato in un rilascio. L&amp;#39;espressione copre qualsiasi cosa che spiega cosa è stato rilasciato, dal testo &amp;quot;Novità&amp;quot; di un app store a una pagina sul sito di un&amp;#39;azienda.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quanto deve essere lunga ogni voce delle release notes?&lt;/strong&gt;
Da due a quattro frasi bastano per la maggior parte delle voci: il risultato, chi è interessato e cosa fare. Una breaking change o un fix di sicurezza possono essere più lunghi perché richiedono una data o una migrazione.&lt;/p&gt;
</content:encoded></item><item><title>Versionamento API di Stripe: come funziona e cosa copiare</title><link>https://changeloop.dev/blog/it/stripe-api-versioning/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/stripe-api-versioning/</guid><description>Il versionamento API di Stripe fissa ogni account a una versione datata e ammette l&apos;override per richiesta. Come funziona, cosa costa e cosa copiare.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Il versionamento API di Stripe funziona per data. Ogni account è fissato a una versione dell&amp;#39;API che prende il nome da una data di rilascio, e ogni singola richiesta può scavalcare quel valore con un header &lt;code&gt;Stripe-Version&lt;/code&gt;. Al momento della scrittura (ottobre 2026), la versione corrente nella documentazione di Stripe è &lt;code&gt;2026-09-30.endive&lt;/code&gt;, e lo stesso schema è qualcosa che un&amp;#39;API molto più piccola può copiare in un fine settimana.&lt;/p&gt;
&lt;p&gt;Ogni fatto su Stripe qui sotto viene dalle pagine di Stripe stessa, collegate dove vengono usate.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Meccanismo&lt;/th&gt;
&lt;th&gt;Cosa fa Stripe&lt;/th&gt;
&lt;th&gt;Fonte&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Nome della versione&lt;/td&gt;
&lt;td&gt;Una data, più un nome di rilascio dal 2024 (&lt;code&gt;2026-09-30.endive&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/api/versioning&quot;&gt;Versioning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versione predefinita&lt;/td&gt;
&lt;td&gt;Fissata sull&amp;#39;account, cambiata in Workbench&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/api/versioning&quot;&gt;Versioning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Override per richiesta&lt;/td&gt;
&lt;td&gt;Header &lt;code&gt;Stripe-Version&lt;/code&gt;, o l&amp;#39;opzione dell&amp;#39;SDK&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/upgrades&quot;&gt;Upgrades&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webhook&lt;/td&gt;
&lt;td&gt;Resi nella versione impostata sull&amp;#39;endpoint&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/upgrades&quot;&gt;Upgrades&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cadenza&lt;/td&gt;
&lt;td&gt;Rilasci mensili senza breaking changes, una major due volte l&amp;#39;anno&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.stripe.com/api/versioning&quot;&gt;Versioning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vecchie versioni&lt;/td&gt;
&lt;td&gt;Mantenute funzionanti con moduli interni di cambio versione&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://stripe.com/blog/api-versioning&quot;&gt;Engineering post&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Come funziona il versionamento API di Stripe?&lt;/h2&gt;
&lt;p&gt;Stripe dà a ogni account una versione API predefinita, e ogni richiesta che non nomina una versione usa quella. Chi chiama sceglie quando passare, cambiando il valore predefinito o impostando una versione sulle singole richieste.&lt;/p&gt;
&lt;p&gt;Il post di engineering di Stripe dice che l&amp;#39;account viene fissato la prima volta che fa una richiesta API: l&amp;#39;account è &amp;quot;automatically pinned to the most recent version available&amp;quot;, e da lì ogni chiamata riceve implicitamente quella versione.&lt;/p&gt;
&lt;p&gt;La stringa di versione è una data. Dal rilascio &lt;code&gt;2024-09-30.acacia&lt;/code&gt; porta anche un nome, come in &lt;code&gt;2026-09-30.endive&lt;/code&gt;. La data ordina le versioni, e il nome dice a quale famiglia di rilasci major appartiene una versione.&lt;/p&gt;
&lt;h2&gt;Come si sceglie una versione per ogni richiesta?&lt;/h2&gt;
&lt;p&gt;Invia l&amp;#39;header &lt;code&gt;Stripe-Version&lt;/code&gt; sulla richiesta, oppure imposta la versione nell&amp;#39;SDK. La guida all&amp;#39;upgrade di Stripe mostra la forma con l&amp;#39;header, e la stessa chiamata funziona negli ambienti live e di test.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;curl https://api.stripe.com/v1/charges \
  -u &amp;quot;$STRIPE_SECRET_KEY:&amp;quot; \
  -H &amp;quot;Stripe-Version: 2026-09-30.endive&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La guida di Stripe osserva che quando imposti la versione a livello globale o per richiesta in un SDK, gli oggetti di risposta tornano in quella versione.&lt;/p&gt;
&lt;p&gt;Stripe sconsiglia anche di appoggiarsi al valore predefinito dell&amp;#39;account. Nelle sue parole, specifica la versione per ogni richiesta, con l&amp;#39;header o con un SDK bloccato, così che sia il tuo codice a decidere la versione e non un&amp;#39;impostazione della dashboard.&lt;/p&gt;
&lt;p&gt;Gli SDK fissano la versione in modo diverso a seconda del linguaggio. La documentazione dice che le versioni recenti delle librerie a tipizzazione dinamica usano la versione API che era l&amp;#39;ultima quando è uscita quella release dell&amp;#39;SDK, mentre quelle fortemente tipizzate (Java, Go e .NET) sono ancorate a essa. Installare una versione della libreria significa, di fatto, scegliere una versione API.&lt;/p&gt;
&lt;h2&gt;Cosa succede ai webhook quando cambia la versione?&lt;/h2&gt;
&lt;p&gt;Un evento webhook viene reso nella versione API associata al suo endpoint, non nella versione che usa il codice del tuo server. La documentazione di Stripe dice che gli eventi usano la versione impostata alla creazione dell&amp;#39;endpoint, e altrimenti quella predefinita dell&amp;#39;account. Cambiare la versione del tuo SDK non cambia ciò che riceve il tuo gestore webhook.&lt;/p&gt;
&lt;p&gt;Il percorso delle richieste e quello degli eventi possono quindi trovarsi su due versioni diverse. Per le destinazioni degli eventi, imposti &lt;code&gt;snapshot_api_version&lt;/code&gt; solo quando crei la destinazione, quindi una versione diversa richiede una nuova destinazione.&lt;/p&gt;
&lt;p&gt;Il percorso di upgrade di Stripe per questo è un&amp;#39;esecuzione in parallelo. Crea un nuovo endpoint alla versione di destinazione, invia gli stessi eventi a entrambi, insegna al gestore a elaborarne uno e a ignorare l&amp;#39;altro, poi passa e disattiva il vecchio endpoint. Poiché durante la sovrapposizione ogni evento arriva due volte, il gestore deve essere idempotente. È un buon schema da copiare per qualsiasi API che emette eventi, e &lt;a href=&quot;https://changeloop.dev/blog/it/webhook-changelog/&quot;&gt;un changelog dei webhook&lt;/a&gt; è il posto dove annunciare le modifiche ai payload che lo rendono necessario.&lt;/p&gt;
&lt;h2&gt;Cosa sono i rilasci mensili e major?&lt;/h2&gt;
&lt;p&gt;Dal rilascio &lt;code&gt;2024-09-30.acacia&lt;/code&gt;, Stripe pubblica una nuova versione dell&amp;#39;API ogni mese senza breaking changes, ed emette una nuova major due volte l&amp;#39;anno che parte con una versione contenente breaking changes. La sua pagina sul versionamento dice che puoi passare a qualsiasi rilascio mensile senza aggiornare il codice, mentre una major può richiedere modifiche.&lt;/p&gt;
&lt;p&gt;Le major hanno dei nomi. La pagina sul versionamento fa l&amp;#39;esempio di Basil, e l&amp;#39;annuncio del processo da parte di Stripe dice che i nomi vengono dalle piante, a partire da Acacia, e che i rilasci mensili mantengono il nome della major precedente, così il nome segnala che si può passare in sicurezza. Il &lt;a href=&quot;https://docs.stripe.com/changelog&quot;&gt;changelog&lt;/a&gt; di Stripe elenca i nomi in uso, e al momento della scrittura la voce più recente è &lt;code&gt;2026-09-30.endive&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Quindi la data risponde a &amp;quot;quanto è nuova&amp;quot;, e il nome risponde a &amp;quot;è un confine di breaking change&amp;quot;. L&amp;#39;annuncio di Stripe lascia anche spazio a eccezioni: si riserva il diritto di rilasciare una breaking change fuori ciclo dove un&amp;#39;integrazione sarebbe gravemente colpita senza di essa. L&amp;#39;annuncio è in &lt;a href=&quot;https://stripe.com/blog/introducing-stripes-new-api-release-process&quot;&gt;Stripe&amp;#39;s new API release process&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Qual è l&amp;#39;ultima versione dell&amp;#39;API di Stripe?&lt;/h2&gt;
&lt;p&gt;Al momento della scrittura (ottobre 2026), la pagina di Stripe sul versionamento indica che la versione corrente è &lt;code&gt;2026-09-30.endive&lt;/code&gt;, e il suo changelog elenca la stessa versione come la più recente. Stripe pubblica una nuova versione ogni mese, quindi qualsiasi stringa stampata in un articolo invecchia in fretta. Leggi il changelog aggiornato prima di fissare qualcosa, e fissa la versione con cui hai testato.&lt;/p&gt;
&lt;h2&gt;Come fa Stripe a mantenere funzionanti le vecchie versioni?&lt;/h2&gt;
&lt;p&gt;Stripe mantiene vive le vecchie versioni scrivendo ogni breaking change come un modulo di cambio versione autonomo e applicando i moduli all&amp;#39;indietro a partire dalla forma più recente dei dati. Il suo &lt;a href=&quot;https://stripe.com/blog/api-versioning&quot;&gt;post di engineering sul versionamento API&lt;/a&gt; descrive il meccanismo.&lt;/p&gt;
&lt;p&gt;Ogni modulo dichiara cosa cambia, documenta la modifica e include una funzione di trasformazione. Il post fa l&amp;#39;esempio di un campo che passa da stringa a hash. Per costruire una risposta, il sistema determina la versione di destinazione, poi risale nel tempo e applica ogni modulo che trova lungo la strada fino a raggiungere quella versione.&lt;/p&gt;
&lt;p&gt;Da questa progettazione seguono due effetti collaterali, e il post nomina entrambi. Poiché i moduli dichiarano i campi e le risorse che toccano, Stripe può generare il proprio changelog API da essi al momento del deploy. E poiché la versione dell&amp;#39;account è nota, la documentazione può adattarsi a essa e avvisare delle modifiche incompatibili dall&amp;#39;ultima versione usata.&lt;/p&gt;
&lt;h2&gt;Quanto costa, e cosa dovrebbe copiare un&amp;#39;API più piccola?&lt;/h2&gt;
&lt;p&gt;Il versionamento costa attenzione ingegneristica, e Stripe lo dice. Il post di engineering riconosce un onere di manutenzione e indica l&amp;#39;obiettivo: meno bisogna pensare al vecchio comportamento quando si scrive nuovo codice, meglio è. Descrive anche revisioni leggere dell&amp;#39;API prima del rilascio, per evitare di dover cambiare versione.&lt;/p&gt;
&lt;p&gt;Un&amp;#39;API piccola non può permettersi una catena di moduli per ogni vecchia versione, e non ne ha bisogno. Copia le parti che portano valore:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Versioni datate.&lt;/strong&gt; Una data non richiede di giudicare cosa conti come &amp;quot;major&amp;quot;, e chi chiama la può leggere. L&amp;#39;articolo sulle &lt;a href=&quot;https://changeloop.dev/blog/it/api-versioning-best-practices/&quot;&gt;buone pratiche di versionamento&lt;/a&gt; la confronta con gli schemi a URL e a header.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un valore predefinito fissato.&lt;/strong&gt; Fissa l&amp;#39;account o la chiave alla versione del primo uso, così l&amp;#39;API non cambia sotto un&amp;#39;integrazione funzionante.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un override per richiesta.&lt;/strong&gt; Un header che permette a chi chiama di testare una nuova versione su una sola chiamata, in produzione, prima di impegnarsi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una versione sull&amp;#39;endpoint dei webhook.&lt;/strong&gt; I payload degli eventi sono il punto in cui chi chiama si sorprende di più.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una voce di changelog per versione.&lt;/strong&gt; Fai in modo che nomini la versione, la data, chi è interessato e cosa fare. &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;Cosa conta come breaking&lt;/a&gt; è il test per decidere cosa appartiene a una nuova versione, e l&amp;#39;articolo sul &lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;changelog API&lt;/a&gt; copre la voce in sé.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Salta la catena di moduli finché il numero di versioni supportate non la impone. Due o tre versioni attive si gestiscono con qualche ramo e una data di sunset, come spiega &lt;a href=&quot;https://changeloop.dev/blog/it/sunsetting-api-version/&quot;&gt;dismettere una versione API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Se pubblichi un changelog datato, la cronologia delle versioni vale quanto le sue voci. In &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;Changeloop&lt;/a&gt;, una bozza di voce viene creata da ogni pull request integrata e tenuta in attesa finché una persona la approva, prima di pubblicarla nella pagina del changelog e nel feed. È lì che si scrive la voce per versione, e l&amp;#39;unico controllo umano è la revisione che dice cosa deve fare chi chiama.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Qual è l&amp;#39;ultima versione dell&amp;#39;API di Stripe?&lt;/strong&gt;
Al momento della scrittura (ottobre 2026), la pagina di Stripe sul versionamento indica che la versione corrente è &lt;code&gt;2026-09-30.endive&lt;/code&gt;. Stripe emette una nuova versione ogni mese, quindi controlla il suo changelog prima di fissarla, e scrivi la versione nel tuo codice invece di affidarti al valore predefinito dell&amp;#39;account.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come imposto la versione dell&amp;#39;API di Stripe su una richiesta?&lt;/strong&gt;
Invia l&amp;#39;header &lt;code&gt;Stripe-Version&lt;/code&gt;, per esempio &lt;code&gt;Stripe-Version: 2026-09-30.endive&lt;/code&gt;, oppure imposta la versione nel tuo SDK lato server, a livello globale o per richiesta. Senza nessuno dei due, una richiesta usa la versione predefinita del tuo account, che imposti in Workbench.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I webhook usano la stessa versione dell&amp;#39;API di Stripe delle mie richieste?&lt;/strong&gt;
Non necessariamente. Gli eventi webhook usano la versione impostata alla creazione dell&amp;#39;endpoint, e quella predefinita dell&amp;#39;account se non ne è stata impostata una. Aggiornare l&amp;#39;SDK non cambia il payload che riceve il tuo gestore webhook, quindi aggiorna gli endpoint separatamente e testali in parallelo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il versionamento per data in stile Stripe va bene per una piccola API?&lt;/strong&gt;
Versioni datate, un valore predefinito fissato, un header per richiesta e una voce di changelog per versione costano poco e vale la pena copiarli. La catena interna di moduli di cambio versione no, finché non supporti molte vecchie versioni insieme. Parti con due versioni attive e una data di sunset per la più vecchia.&lt;/p&gt;
</content:encoded></item><item><title>Chi scrive il changelog, e chi dovrebbe</title><link>https://changeloop.dev/blog/it/changelog-entry-ownership/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/changelog-entry-ownership/</guid><description>Chi scrive il changelog? Chi apre la PR sa cosa è cambiato, la PM perché conta. Nessuna delle due scrive sola una voce utile, e sceglierne una la logora.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Chiedete a un team chi scrive il changelog e la risposta onesta di solito è &amp;quot;chiunque se ne
ricordi&amp;quot;, che è la stessa modalità di fallimento che &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-ci-enforcement/&quot;&gt;imporre una voce di changelog in
CI&lt;/a&gt; esiste per risolvere a livello meccanico. Ma forzare
l&amp;#39;esistenza di una voce non decide chi è qualificata a scriverne una buona, e i team che saltano
quella domanda tendono a ripiegare su chiunque sia più facile da obbligare, di solito chi apre la
PR, senza controllare se quella sia davvero la persona che può scriverla bene.&lt;/p&gt;
&lt;h2&gt;Perché chi apre la PR non è automaticamente chi scrive meglio il changelog?&lt;/h2&gt;
&lt;p&gt;Perché conosce l&amp;#39;implementazione, non necessariamente l&amp;#39;impatto, e sono due tipi di conoscenza
diversi. &lt;a href=&quot;https://changeloop.dev/blog/it/conventional-commits-changelog/&quot;&gt;Dove si fermano i conventional commit&lt;/a&gt; copre
questo divario dal lato del messaggio di commit: &lt;code&gt;fix(auth): reject expired refresh tokens&lt;/code&gt; è
corretto e inutile per una cliente, e chi ha scritto quella correzione è spesso la persona meno
attrezzata per tradurla, perché ha pensato in termini del bug per ore e ha perso la visuale
esterna di cosa un&amp;#39;utente abbia effettivamente vissuto. È la stessa ragione per cui le tecniche di
scrittura esistono come professione: tradurre l&amp;#39;implementazione in impatto è un&amp;#39;abilità distinta
dall&amp;#39;aver costruito la cosa, e serve pratica indipendentemente da quanto sia brava
la sviluppatrice nel codice in sé.&lt;/p&gt;
&lt;h2&gt;Questo significa che prodotto o supporto dovrebbero scrivere ogni voce al posto loro?&lt;/h2&gt;
&lt;p&gt;No, perché hanno il divario opposto: sanno cosa conta per le utenti ma non sempre cosa è stato
davvero rilasciato, il che produce voci leggibili ma occasionalmente sbagliate nell&amp;#39;ambito, un
&amp;quot;ora supporta X&amp;quot; per una funzionalità ancora dietro un flag, o una correzione descritta come
completa quando copre solo uno di tre casi. La modalità di fallimento delle voci scritte da
sviluppatrici è illeggibile-ma-accurata; la modalità di fallimento delle voci scritte da PM è
leggibile-ma-non-verificata. Nessun ruolo possiede entrambe le metà di ciò di cui ha bisogno una
buona voce.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ruolo&lt;/th&gt;
&lt;th&gt;Di solito azzecca&lt;/th&gt;
&lt;th&gt;Di solito sbaglia&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Sviluppatrice che ha scritto il codice&lt;/td&gt;
&lt;td&gt;Ambito esatto di cosa è cambiato&lt;/td&gt;
&lt;td&gt;Inquadrarlo per chi non l&amp;#39;ha costruito&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PM o responsabile del supporto&lt;/td&gt;
&lt;td&gt;Perché conta per l&amp;#39;utente&lt;/td&gt;
&lt;td&gt;Confini precisi di cosa è davvero stato rilasciato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responsabile dedicata del changelog&lt;/td&gt;
&lt;td&gt;Voce coerente, verifica l&amp;#39;ambito&lt;/td&gt;
&lt;td&gt;Ha bisogno di entrambe le precedenti per verificare&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Come appare davvero un modello di proprietà che funziona?&lt;/h2&gt;
&lt;p&gt;Una bozza da chi è più vicino al cambiamento, revisionata da chi è più vicino all&amp;#39;utente, con una
persona nominata responsabile della formulazione finale invece che tutti assumano che qualcun
altro catturerà i problemi. La bozza deve esistere ed essere accurata più di quanto debba essere
buona; una
frase grezza scritta da una sviluppatrice che dice correttamente cosa è cambiato è un punto di
partenza migliore di una levigata ma non verificata, perché riscrivere per chiarezza è più facile
che riscrivere per correttezza. Il passaggio di revisione è dove una PM o responsabile del
supporto legge la bozza e fa l&amp;#39;unica domanda che cattura il divario di leggibilità: lo capirei se
non avessi visto il codice.&lt;/p&gt;
&lt;h2&gt;Dovrebbe essere sempre la stessa persona quella responsabile, o ruota?&lt;/h2&gt;
&lt;p&gt;Nominata e stabile batte rotante, almeno per l&amp;#39;approvazione finale. Una responsabile rotante
significa che ogni voce viene revisionata da qualcuno che ri-deriva da zero le convenzioni del
team, il che è esattamente come la voce deriva da una voce all&amp;#39;altra e chi legge inizia a notare
che il changelog è stato scritto da un comitato. Una singola persona, o un gruppo stabile molto
piccolo, accumula nel tempo i giudizi, quando dire &amp;quot;migliorato&amp;quot; invece di nominare la cifra
specifica, quando una correzione ha bisogno di una propria voce invece di confluire in un lotto, e
quel giudizio vale più della distribuzione uniforme del lavoro.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Bozza (sviluppatrice, dalla PR):
&amp;quot;Fixed pagination cursor not respecting the `sort` param
in some edge cases.&amp;quot;

Revisionata (responsabile del changelog, verificata contro la PR reale):
&amp;quot;Corretto: le esportazioni ordinate per data potevano
restituire risultati fuori ordine oltre la prima pagina.
Ora coerente su tutte le pagine.&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Un piccolo team ha bisogno di così tanto processo per una riga di testo?&lt;/h2&gt;
&lt;p&gt;Non i ruoli come persone separate, ma i due passaggi contano ancora anche in solitaria. Un team di
una persona è sia la sviluppatrice sia la revisora, e la disciplina che sopravvive a quella scala
è fare la revisione come un passaggio mentale separato, non saltare direttamente dallo scrivere la
correzione al pubblicarne una descrizione nello stesso respiro. La trappola su piccola scala è
saltare del tutto il secondo passaggio, non la mancanza di una seconda persona, perché nessuno
esterno lo impone, e il divario di accuratezza che quel passaggio esiste per catturare non
scompare solo perché la stessa persona potrebbe teoricamente notare il proprio punto cieco.&lt;/p&gt;
&lt;h2&gt;Cosa succede quando nessuno è responsabile della voce finale?&lt;/h2&gt;
&lt;p&gt;Il changelog degrada in modo irregolare invece di fallire apertamente, il che è peggio perché
nessuno se ne accorge finché una lettrice non lo segnala. Alcune voci restano nitide perché a chi
le ha scritte importava; altre diventano vaghe, &amp;quot;vari miglioramenti e correzioni di bug&amp;quot;, perché
chi le ha scritte andava veloce e nessuno l&amp;#39;ha notato prima della pubblicazione. I vincoli di
formato di &lt;a href=&quot;https://changeloop.dev/blog/it/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt; catturano la deriva
strutturale, date mancanti, categorie sbagliate, ma niente in un template cattura una voce vaga
che è tecnicamente ben formattata, che è esattamente il divario che una responsabile nominata è lì
per colmare.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La responsabile del changelog dovrebbe essere un ruolo di ingegneria o di prodotto?&lt;/strong&gt;
Entrambi possono funzionare se la persona ha sia fluidità tecnica per verificare l&amp;#39;ambito sia
abbastanza distanza dall&amp;#39;implementazione per scrivere per una lettrice esterna; il titolo conta
meno di se sappia fare entrambe le metà, o sappia a chi chiedere per la metà che non sa fare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un programma rotante tipo reperibilità è mai appropriato per la proprietà del changelog?&lt;/strong&gt;
Per il volume, a volte, se il team è troppo piccolo perché una persona revisioni tutto; per voce e
giudizio, no, perché è esattamente ciò che la rotazione erode. Una rotazione che condivide il
carico di stesura mantenendo una revisora stabile ottiene il beneficio senza la deriva.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è il segno più veloce che qualcosa non va nell&amp;#39;attuale configurazione di proprietà?&lt;/strong&gt;
Voci che sono accurate ma illeggibili, o leggibili ma sbagliate nell&amp;#39;ambito, in uno schema che
segue chi le ha scritte. Se la qualità correla con l&amp;#39;autrice invece di restare coerente, la
proprietà è il divario, non l&amp;#39;abilità di scrittura.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L&amp;#39;automazione riduce quanto conta la proprietà?&lt;/strong&gt;
Riduce quanta scrittura serve, non quanto giudizio serve. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-automation/&quot;&gt;Automazione del changelog&lt;/a&gt;
copre cosa una pipeline può generare in sicurezza, formattazione, pubblicazione, cross-posting; la
formulazione, il raggruppamento e cosa conta come degno di menzione restano decisioni umane
indipendentemente da quanto della pipeline sia automatizzata.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa succede se l&amp;#39;autrice della PR e la revisora non sono d&amp;#39;accordo sulla formulazione?&lt;/strong&gt;
Decide la revisora, perché la domanda a cui sta rispondendo, capirebbe questo una lettrice esterna,
è quella che il ruolo esiste per proteggere. Questo non rende inutile il parere della sviluppatrice:
se il disaccordo riguarda l&amp;#39;accuratezza invece della formulazione, la revisora si rimette a lei,
perché l&amp;#39;ambito è la metà che spetta all&amp;#39;autrice fare bene. Separare i due tipi di disaccordo,
formulazione contro accuratezza, evita che la maggior parte di questi casi diventi uno stallo.&lt;/p&gt;
</content:encoded></item><item><title>Release notes di emergenza: scrivere sotto vera pressione</title><link>https://changeloop.dev/blog/it/emergency-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/emergency-release-notes/</guid><description>Un rilascio guidato da un incidente richiede note scritte in minuti, non giorni, e il solito processo di scrittura presuppone tempo che non avete.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;La maggior parte delle release notes viene scritta dopo che il codice è pronto, revisionata con
calma, e pubblicata secondo un calendario che non ha nulla a che fare con quanto urgentemente
qualcuno ha bisogno di leggerla. Un rilascio d&amp;#39;emergenza, una patch di sicurezza, un bug di perdita
dati, la correzione di un&amp;#39;interruzione, capovolge tutte quelle condizioni insieme: le note devono
esistere prima che la maggior parte delle persone normalmente inizierebbe a scriverle, ricevono
quasi nessuna revisione, e vengono lette da persone ansiose invece che rilassate. &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;Come scrivere
release notes&lt;/a&gt; copre il processo normale; questo riguarda
cosa cambia quando non c&amp;#39;è più tempo per seguirlo.&lt;/p&gt;
&lt;h2&gt;Qual è l&amp;#39;unica cosa che una release note di emergenza deve assolutamente azzeccare?&lt;/h2&gt;
&lt;p&gt;Se chi legge deve fare qualcosa, dichiarato nella prima frase, senza alcuna cornice prima. Chi
legge una release note guidata da un incidente è spesso già preoccupato, avendo sentito parlare del
problema da una pagina di stato, un thread di supporto, o le proprie utenti, e una nota che apre
con contesto prima dell&amp;#39;azione richiesta si legge come trattenere informazioni proprio nelle
circostanze in cui trattenere si legge peggio. &amp;quot;Nessuna azione necessaria, questo corregge una
vulnerabilità che non richiedeva dati utente per essere sfruttata&amp;quot; e &amp;quot;Aggiornate immediatamente:
questo rilascio corregge un bug che poteva mostrare i dati di un account a un altro&amp;quot; sono
entrambe una frase, ed entrambe fanno tutto il lavoro di cui ha bisogno chi legge nel panico prima
di leggere qualsiasi altra cosa.&lt;/p&gt;
&lt;h2&gt;Il solito passaggio di editing si applica ancora quando non c&amp;#39;è tempo per farlo?&lt;/h2&gt;
&lt;p&gt;L&amp;#39;istinto di comprimere sopravvive anche quando il processo a più bozze che di solito lo produce
non lo fa. &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;La riscrittura&lt;/a&gt; descrive il tagliare una prima
bozza prolissa fino alla sua frase essenziale; sotto pressione di tempo spesso non c&amp;#39;è una prima
bozza da tagliare, il che significa che la disciplina deve girare nella vostra testa mentre
scrivete invece che come passaggio separato dopo. Il modo più veloce per approssimarla: scrivete
la frase che direste ad alta voce a qualcuno che chiede &amp;quot;cosa devo sapere&amp;quot;, poi fermatevi, perché
quella frase è di solito sia la più veloce da produrre sia l&amp;#39;unica che chi legge in quello stato
processerà davvero.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Release note normale&lt;/th&gt;
&lt;th&gt;Release note di emergenza&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Scritta dopo la code review, prima della pubblicazione&lt;/td&gt;
&lt;td&gt;Spesso scritta insieme alla correzione, prima della revisione completa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ottimizzata per la scorribilità tra molte voci&lt;/td&gt;
&lt;td&gt;Ottimizzata per una voce letta isolatamente, sotto stress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Può rimandare il dettaglio a un changelog collegato&lt;/td&gt;
&lt;td&gt;Dovrebbe anteporre l&amp;#39;unico fatto più importante&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cornice e contesto sono benvenuti&lt;/td&gt;
&lt;td&gt;La cornice prima dell&amp;#39;azione richiesta si legge come ritardo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;È mai accettabile pubblicare una nota prima di essere del tutto sicuri di cosa abbia causato il problema?&lt;/h2&gt;
&lt;p&gt;Sì, se la nota è onesta su quell&amp;#39;incertezza invece di suggerire una certezza che non avete.
&amp;quot;Abbiamo distribuito una correzione per tassi di errore elevati nel checkout; stiamo ancora
confermando la causa radice e aggiorneremo questa nota&amp;quot; è difendibile e guadagna tempo
correttamente; una nota che afferma una causa specifica che in realtà non avete confermato è il
tipo di ipotesi che diventa ciò che la gente vi cita indietro più tardi se risulta sbagliata. La
disciplina che conta qui non è la velocità di diagnosi, è non lasciare mai che la certezza della
nota superi la certezza reale del team, perché un&amp;#39;affermazione tecnica sbagliata in una nota di
emergenza fa più danno alla fiducia di un&amp;#39;incognita ammessa.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Troppo sicuro, non verificato:
&amp;quot;Corretto: una race condition nel gestore del webhook
di pagamento causava addebiti duplicati.&amp;quot;

Onesto sotto pressione di tempo:
&amp;quot;Corretto: ad alcune clienti è stato addebitato due volte
un singolo ordine. Abbiamo fermato nuove occorrenze e
stiamo rimborsando gli account interessati entro 24 ore.
Stiamo indagando la causa radice.&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Una nota di emergenza dovrebbe dire cosa ha causato il problema, o solo che è stato corretto?&lt;/h2&gt;
&lt;p&gt;Dite cosa è corretto e cosa dovrebbe fare chi legge; conservate la causa radice per un follow-up
una volta che è davvero nota, non ipotizzata. Chi legge nel mezzo di un incidente vuole
esattamente due fatti, se questo è risolto e se lo riguarda, e una spiegazione della causa radice,
anche accurata, compete con quei due fatti per l&amp;#39;attenzione nel momento peggiore possibile per
perderla. Il postmortem, pubblicato separatamente una volta finita l&amp;#39;indagine, è dove appartiene
la causa radice; mescolare i due documenti sotto pressione di tempo produce una nota più lenta da
scrivere e più lenta da leggere, l&amp;#39;opposto di ciò di cui ha bisogno un&amp;#39;emergenza.&lt;/p&gt;
&lt;h2&gt;Il problema dell&amp;#39;aggiornamento forzato delle app mobile si applica anche qui?&lt;/h2&gt;
&lt;p&gt;Lo stesso principio, ancora più compresso. &lt;a href=&quot;https://changeloop.dev/blog/it/mobile-app-release-notes/&quot;&gt;Release notes per app mobile&lt;/a&gt;
copre gli aggiornamenti forzati, dove la nota deve dichiarare il motivo e la scadenza prima di
tutto perché chi legge è già infastidito dal non avere scelta; una release note di emergenza web è
di solito opt-in per chi legge nel senso che sceglie se agire su di essa, ma lo stesso istinto
&amp;quot;dichiarate prima il vincolo&amp;quot; si applica, solo per una ragione diversa: non fastidio, urgenza.&lt;/p&gt;
&lt;h2&gt;Come evitate che una nota di emergenza si legga come un&amp;#39;ammissione di colpa quando non dovrebbe?&lt;/h2&gt;
&lt;p&gt;Descrivete la correzione e il suo effetto, non la colpa, e resistete all&amp;#39;impulso di scusarvi
eccessivamente, il che si legge come riempitivo per chi legge e vuole i due fatti sopra. &amp;quot;Abbiamo
trovato e corretto un bug che riguardava alcune esportazioni&amp;quot; dice cosa è successo senza
assegnargli dramma; &amp;quot;Siamo incredibilmente dispiaciuti per questo grave problema che ha colpito le
nostre preziose clienti&amp;quot; ritarda l&amp;#39;informazione utile di un&amp;#39;intera frase per consegnare un
momento emotivo che chi legge non ha chiesto. Una nota breve e fattuale non è fredda, è rispettosa
dello stato reale di chi legge, che sotto vera pressione è impazienza, non bisogno di
rassicurazione.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Una release note di emergenza dovrebbe passare attraverso lo stesso processo di revisione di una normale?&lt;/strong&gt;
Uno più leggero, non nessuno: una singola revisora veloce che controlla che la nota non esageri la
certezza vale i pochi minuti che costa, perché il rischio che un&amp;#39;affermazione tecnica non
revisionata sia sbagliata è più alto proprio perché è stata scritta velocemente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Va bene pubblicare una nota di emergenza senza alcun link a ulteriori dettagli?&lt;/strong&gt;
Solo brevemente. Una nota senza link funziona come la prima cosa pubblicata; aggiungetene uno a
una pagina di stato o un follow-up appena esiste uno dei due, perché chi legge e vuole più
dell&amp;#39;unica frase che avete dato ha bisogno di un posto dove andare, anche se quel posto dice
&amp;quot;maggiori dettagli presto&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una nota di emergenza dovrebbe mai essere saltata del tutto, lasciando che la correzione venga distribuita in silenzio?&lt;/strong&gt;
Solo per problemi che nessuna lettrice avrebbe potuto notare o esserne stata colpita; se c&amp;#39;è
qualche possibilità che una lettrice abbia sperimentato il problema, la nota è ciò che le dice che
è finito, e il silenzio si legge come se il problema potesse ancora essere attivo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per quanto tempo una nota di emergenza dovrebbe restare fissata o prominente dopo che l&amp;#39;incidente è risolto?&lt;/strong&gt;
Finché la finestra di ansia immediata non si chiude, tipicamente un giorno o due, poi può confluire
nel changelog normale come qualsiasi altra voce; una nota che resta fissata per settimane inizia a
leggersi come una preoccupazione irrisolta invece che risolta.&lt;/p&gt;
</content:encoded></item><item><title>I breaking change di Protobuf: cosa sopravvive sul wire</title><link>https://changeloop.dev/blog/it/grpc-protobuf-api-changes/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/grpc-protobuf-api-changes/</guid><description>I breaking change di Protobuf avvengono sul wire, non nell&apos;URL. Certi cambi di campo gRPC sono gratis, altri rompono i client muti, e sembrano uguali.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un&amp;#39;API REST cambia quando cambia una forma JSON, e la maggior parte di quella forma è visibile
nella risposta che potete leggere in un browser. Un&amp;#39;API gRPC cambia quando cambia un file
&lt;code&gt;.proto&lt;/code&gt;, e il formato binario di wire di Protocol Buffers ha regole proprie su cosa può tollerare
un client che non hanno nulla a che fare con quello che dicono i nomi dei campi. Due modifiche che
sembrano ugualmente piccole in un diff, rinumerare un campo contro aggiungerne uno, cadono su lati
opposti di una linea che &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;breaking changes&lt;/a&gt; traccia in generale: una
è invisibile per ogni client esistente, l&amp;#39;altra li rompe tutti insieme.
Distinguere i breaking change di Protobuf da quelli sicuri significa leggere le regole proprie del
formato di wire, non indovinare da come si legge il cambiamento in un diff &lt;code&gt;.proto&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Perché la numerazione dei campi conta più del nome del campo in Protobuf?&lt;/h2&gt;
&lt;p&gt;Perché il formato di wire codifica i campi per numero, non per nome. Il codice generato in ogni
linguaggio legge e scrive quei numeri; il nome del campo &lt;code&gt;email&lt;/code&gt; nel vostro file &lt;code&gt;.proto&lt;/code&gt; è una
comodità per gli umani che non tocca mai i byte binari inviati sulla rete. Rinominare un
campo, &lt;code&gt;email&lt;/code&gt; in &lt;code&gt;email_address&lt;/code&gt;, è sicuro sul wire binario finché il numero resta lo
stesso, il che sorprende chi viene da REST, dove una chiave JSON rinominata è esattamente il tipo
di cambiamento che rompe un client. L&amp;#39;eccezione è proprio il caso REST: i
&lt;a href=&quot;https://protobuf.dev/programming-guides/json/&quot;&gt;formati ProtoJSON e testo&lt;/a&gt; serializzano il nome, quindi
una ridenominazione rompe il transcoding JSON (un grpc-gateway, per esempio), i file in formato testo
e le field mask. Rinumerare quello stesso campo, tenendo il nome ma cambiando
&lt;code&gt;1&lt;/code&gt; in &lt;code&gt;7&lt;/code&gt;, è esattamente l&amp;#39;opposto: invisibile in una code review che mostra solo nomi, e
corrompe ogni messaggio che un client invia o riceve da quel punto in poi.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cambiamento&lt;/th&gt;
&lt;th&gt;Sicuro sul wire&lt;/th&gt;
&lt;th&gt;Perché&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Rinominare un campo, mantenere il numero&lt;/td&gt;
&lt;td&gt;Binario sì, JSON e testo no&lt;/td&gt;
&lt;td&gt;La codifica binaria usa il numero; ProtoJSON e il formato testo usano il nome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cambiare il numero di un campo&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Ogni messaggio esistente viene ora letto come il campo sbagliato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aggiungere un campo nuovo con numero nuovo&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;I client vecchi ignorano campi che non riconoscono&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rimuovere un campo, riusare il suo vecchio numero per altro&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;I dati vecchi vengono decodificati nel campo nuovo sbagliato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cambiare il tipo di un campo in modo incompatibile (es. &lt;code&gt;int32&lt;/code&gt; a &lt;code&gt;string&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;La codifica di wire differisce per tipo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Cosa rende diverso rimuovere un campo rispetto a farlo in una risposta JSON REST?&lt;/h2&gt;
&lt;p&gt;Il numero diventa radioattivo. &lt;a href=&quot;https://protobuf.dev/programming-guides/proto3/&quot;&gt;Le indicazioni ufficiali di Protobuf&lt;/a&gt; raccomandano di marcare come &lt;code&gt;reserved&lt;/code&gt;
il numero di un campo rimosso invece di lasciarlo riusare, perché il riuso è dove avviene il danno
vero: un client che esegue ancora codice generato del mese scorso invia un messaggio usando il
vecchio numero del campo per il vecchio significato, e il server, che ora si aspetta che quel
numero significhi qualcos&amp;#39;altro, interpreta male i dati in silenzio invece di rifiutarli
apertamente. REST non ha una trappola equivalente, perché una chiave JSON rimossa smette
semplicemente di apparire; non c&amp;#39;è modo che la richiesta di un client vecchio venga
silenziosamente reinterpretata come qualcos&amp;#39;altro. Un file &lt;code&gt;.proto&lt;/code&gt; con &lt;code&gt;reserved 4, 9, 12;&lt;/code&gt; in
cima a un messaggio è una cicatrice permanente, ed è quello il punto: impedisce che il numero
venga assegnato a un campo nuovo da qualcuno che non ne conosceva la storia.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-protobuf&quot;&gt;message Invoice {
  reserved 4; // era `legacy_customer_id`, rimosso il 2026-06-01
  reserved &amp;quot;legacy_customer_id&amp;quot;; // anche il nome, per JSON/testo
  string customer_id = 5;
  string status = 6;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Aggiungere un campo arriva mai a richiedere una voce di changelog?&lt;/h2&gt;
&lt;p&gt;Di solito non una voce di breaking change, ma spesso sì una normale, perché &amp;quot;sicuro sul wire&amp;quot; e
&amp;quot;invisibile per chi legge e ci tiene&amp;quot; sono affermazioni diverse. Aggiungere un campo a un messaggio
di risposta non costa nulla strutturalmente, i client vecchi decodificano il messaggio e ignorano
il campo nuovo automaticamente. Ma chi costruisce una nuova integrazione contro quel servizio non
ha modo di sapere che il campo esiste a meno che qualcuno non glielo dica, perché nulla in una
build riuscita o in un test superato rende visibile un nuovo campo opzionale. &lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;Changelog di
API&lt;/a&gt; copre in generale cosa deve una voce additiva a chi legge; il motivo
specifico di gRPC per scriverne una comunque è che non c&amp;#39;è un equivalente a navigare una risposta
REST in un debugger per notare che è comparsa una chiave nuova.&lt;/p&gt;
&lt;h2&gt;In cosa differisce questo da ciò con cui deve fare i conti chi chiama GraphQL?&lt;/h2&gt;
&lt;p&gt;Le regole per le aggiunte coincidono, ma l&amp;#39;esposizione è diversa. &lt;a href=&quot;https://changeloop.dev/blog/it/graphql-schema-deprecation/&quot;&gt;Deprecazione di schema GraphQL&lt;/a&gt;
copre un modello in cui un client riceve solo i campi che richiede esplicitamente, il che rende i
cambiamenti additivi essenzialmente privi di rischio e le rimozioni l&amp;#39;unico pericolo reale. I
client gRPC, al contrario, ricevono qualunque cosa il server invii e decodificano tutto contro la
propria copia compilata dello schema; l&amp;#39;esposizione di un client non è limitata da ciò che ha
richiesto, solo da ciò che il suo codice generato sa leggere. Questa differenza conta per scrivere
i changelog: una voce GraphQL può ragionevolmente assumere che i client siano protetti dai campi
che non hanno richiesto, e una voce gRPC non può assumerlo affatto.&lt;/p&gt;
&lt;h2&gt;Versionare un servizio gRPC funziona come &lt;code&gt;/v1/&lt;/code&gt;, &lt;code&gt;/v2/&lt;/code&gt; di REST?&lt;/h2&gt;
&lt;p&gt;Il meccanismo è diverso anche quando l&amp;#39;intento è lo stesso. &lt;a href=&quot;https://changeloop.dev/blog/it/api-versioning-best-practices/&quot;&gt;Cosa sono v1 e v2 in un&amp;#39;API
REST&lt;/a&gt; copre il versionamento come percorsi URL paralleli
che servono contratti diversi; i servizi gRPC tipicamente versionano tramite il nome del package
nel file &lt;code&gt;.proto&lt;/code&gt; stesso, &lt;code&gt;payments.v1.InvoiceService&lt;/code&gt; diventa &lt;code&gt;payments.v2.InvoiceService&lt;/code&gt;, il
che cambia il nome di servizio completamente qualificato che un client chiama invece di un
segmento URL che richiede. Entrambi gli approcci risolvono lo stesso problema, lasciare che un
contratto vecchio continui a funzionare mentre ne esiste uno nuovo, ma un team che viene da un
background REST spesso cerca un numero di versione nel posto sbagliato e si perde che la
dichiarazione del package sta facendo quel lavoro.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe nominare davvero una voce di changelog gRPC?&lt;/h2&gt;
&lt;p&gt;Il messaggio, il numero del campo, e se è additivo o una rimozione che richiede migrazione, in
quell&amp;#39;ordine di importanza per chi legge e deve decidere se agire. &amp;quot;Aggiunto &lt;code&gt;shipping_address&lt;/code&gt;
(campo 8) a &lt;code&gt;Order&lt;/code&gt;&amp;quot; dice a chi integra tutto il necessario per aggiornare il codice generato e
iniziare a usarlo. &amp;quot;Riservato il campo 4 su &lt;code&gt;Invoice&lt;/code&gt;, &lt;code&gt;legacy_customer_id&lt;/code&gt; non c&amp;#39;è più&amp;quot; gli dice
di controllare se qualcosa nella loro codebase legge ancora quel campo, cosa che una nota in stile
REST &amp;quot;rimosso un campo dalla risposta&amp;quot; non comunica con la stessa urgenza, perché le rimozioni
REST restituiscono semplicemente meno dati mentre il riuso dei campi Protobuf li corrompe
attivamente.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Il tipo di un campo può mai essere cambiato senza rompere il formato di wire?&lt;/strong&gt;
Solo entro specifici gruppi compatibili che Protobuf documenta, come allargare &lt;code&gt;int32&lt;/code&gt; a &lt;code&gt;int64&lt;/code&gt;
in alcuni casi. Trattate qualsiasi cambio di tipo come rompente a meno che non l&amp;#39;abbiate
controllato contro la tabella di compatibilità di Protobuf stessa; assumere compatibilità per
analogia con il sistema di tipi di un linguaggio è come questo va storto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deprecare un campo in Protobuf funziona come la direttiva &lt;code&gt;@deprecated&lt;/code&gt; di GraphQL?&lt;/strong&gt;
In modo simile: Protobuf supporta un&amp;#39;opzione di campo &lt;code&gt;[deprecated = true]&lt;/code&gt; che gli strumenti
possono mostrare. Nessuna delle due è imposta: un server GraphQL risponde comunque a una query su un
campo deprecato, e un client protobuf ne codifica comunque uno. Entrambe sono consultive e hanno
bisogno dello stesso supporto di changelog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rinumerare è mai sicuro se controllate ogni client?&lt;/strong&gt;
In un sistema completamente chiuso, in linea di principio, ma elimina l&amp;#39;intera proprietà di
sicurezza per cui esistono i numeri di campo, e &amp;quot;controlliamo ogni client&amp;quot; è un&amp;#39;affermazione che
smette di essere vera nel momento in cui una build viene messa in cache, un deploy viene ritardato,
o viene aggiunto un client di cui nessuno si ricordava. Riservate il numero invece di riusarlo,
anche internamente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I servizi gRPC hanno bisogno di una pagina di changelog come un&amp;#39;API REST pubblica?&lt;/strong&gt;
Solo se team esterni li consumano senza leggere direttamente i diff &lt;code&gt;.proto&lt;/code&gt;, lo stesso test &amp;quot;chi
c&amp;#39;è dall&amp;#39;altra parte&amp;quot; che &lt;a href=&quot;https://changeloop.dev/blog/it/internal-api-changelog/&quot;&gt;changelog di API interne&lt;/a&gt; applica in
generale. Un servizio gRPC consumato solo da altri servizi dello stesso team può spesso saltare un
changelog formale a favore della cronologia dei commit, perché chiunque lo legga ha già lo schema
aperto.&lt;/p&gt;
</content:encoded></item><item><title>Formati file del changelog: JSON, YAML o solo Markdown</title><link>https://changeloop.dev/blog/it/changelog-file-formats/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/changelog-file-formats/</guid><description>Il formato del file di un changelog decide se alimenta una pagina e un widget, o solo lo legge una persona. Markdown, JSON e YAML costano cose diverse.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;La maggior parte dei team inizia un changelog come file Markdown perché è la via di minor
resistenza: leggibile nel diff di una pull request, leggibile su GitHub senza renderizzare nulla,
e familiare a chiunque abbia mai scritto un README. Questa scelta funziona bene finché qualcosa
di diverso da una persona non deve leggere il file, una pagina, un widget, un riepilogo via
email, e allora il formato smette di essere gratuito. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-automation/&quot;&gt;Automazione del changelog&lt;/a&gt;
copre il requisito strutturale in generale, un tipo, una data, un corpo e un link; qui si tratta
di quale formato file consegna davvero quella struttura e cosa costa arrivarci con ciascuno.&lt;/p&gt;
&lt;h2&gt;Cosa c&amp;#39;è di sbagliato in un changelog Markdown semplice?&lt;/h2&gt;
&lt;p&gt;Niente, finché qualcosa non deve riparsarlo in campi. Un titolo, una data e un elenco puntato
sotto sono banali da leggere per una persona e genuinamente difficili da parsare in modo
affidabile, perché Markdown non ha uno schema: la data potrebbe stare nel titolo, in grassetto
sulla prima riga, o mancare del tutto in una voce vecchia, e ognuna di queste varianti è Markdown
valido che una persona legge correttamente e un parser no. I team che automatizzano un changelog
Markdown finiscono di solito per scrivere un parser artigianale basato su regex che si rompe alla
prima volta che la formattazione di una voce devia anche leggermente, il che succede spesso,
perché niente impone coerenza al momento della scrittura.&lt;/p&gt;
&lt;h2&gt;Cosa vi dà davvero un formato strutturato?&lt;/h2&gt;
&lt;p&gt;Una garanzia che ogni voce abbia la stessa forma, verificata quando la voce viene scritta invece
di indovinata quando viene letta. Un file JSON o YAML con uno schema definito, tipo, data,
versione, pubblico, corpo, link, fallisce rumorosamente se manca un campo obbligatorio, esattamente
come farebbe una risposta API rigida; un file Markdown renderizza semplicemente ciò che c&amp;#39;è,
corretto o no. Questa differenza è invisibile fino al giorno in cui uno script ha bisogno della
data di ogni voce per ordinare un feed, e metà delle voci ce l&amp;#39;ha in un posto diverso.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# CHANGELOG.yml
- date: 2026-09-05
  type: breaking
  version: v2
  audience: api
  body: &amp;quot;POST /invoices now rejects a currency mismatch instead of silently converting.&amp;quot;
  link: /blog/api-changelog/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Questo significa che il file leggibile dall&amp;#39;uomo deve sparire?&lt;/h2&gt;
&lt;p&gt;No, e cercare di far fare a un file YAML o JSON anche da cosa una persona legge in una pull
request è di solito un errore nella direzione opposta: revisionare un diff di JSON annidato è
peggio che revisionare una frase in prosa, e una revisora che deve parsare mentalmente una
struttura dati per cogliere un errore di formulazione è una revisora che prima o poi smetterà di
coglierli. I due formati possono coesistere: i dati strutturati sono la fonte di verità che legge
una pipeline di automazione, e un rendering generato in Markdown o HTML è ciò che una persona
effettivamente revisiona e legge, prodotto dal file strutturato invece di essere mantenuto a mano
in parallelo.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Formato&lt;/th&gt;
&lt;th&gt;Leggibile dall&amp;#39;uomo così com&amp;#39;è&lt;/th&gt;
&lt;th&gt;Parsabile da macchina senza codice su misura&lt;/th&gt;
&lt;th&gt;Fallimento comune&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Forma incoerente delle voci rompe i parser ingenui&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON&lt;/td&gt;
&lt;td&gt;Scarso&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;Prolisso; facile da modificare a mano in JSON non valido&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YAML&lt;/td&gt;
&lt;td&gt;Discreto&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;Sensibile agli spazi; un&amp;#39;indentazione sbagliata è un errore di parsing silenzioso, non rumoroso&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Quale formato strutturato è davvero più facile da modificare a mano, JSON o YAML?&lt;/h2&gt;
&lt;p&gt;YAML, per chi scrive voci a mano invece che tramite un generatore, perché elimina il quoting e
l&amp;#39;abbinamento di parentesi che JSON richiede per ogni stringa e oggetto annidato. Il compromesso è
che la sensibilità di YAML agli spazi fallisce silenziosamente in un modo in cui i disallineamenti
di parentesi di JSON di solito non lo fanno: un parser JSON rifiuta subito un input malformato,
mentre un parser YAML può accettare un file mal indentato e semplicemente parsarlo nella struttura
sbagliata, il che è un fallimento peggiore perché niente vi dice che è successo. Se le voci sono
sempre e solo scritte da uno script, questo compromesso praticamente scompare e il parsing più
rigido di JSON diventa la scelta predefinita più sicura.&lt;/p&gt;
&lt;h2&gt;Una pagina di changelog ha bisogno di un proprio formato strutturato, separato dal file che la alimenta?&lt;/h2&gt;
&lt;p&gt;Non uno separato, lo stesso renderizzato diversamente. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-page/&quot;&gt;Una pagina di changelog&lt;/a&gt;
copre come rendere la pagina stessa leggibile da macchina tramite un feed JSON e markup
schema.org; quel feed è output generato, non una seconda fonte di verità da mantenere sincronizzata
con il file sottostante. Mantenere dati strutturati a mano in due posti, un file sorgente e il
feed di una pagina, è come i due finiscono per divergere, quindi la decisione sul formato file
presa qui dovrebbe essere l&amp;#39;unica cosa da cui tutto ciò che segue, pagina, widget, email, viene
generato, mai copiato a mano.&lt;/p&gt;
&lt;h2&gt;Vale il costo di migrazione convertire un changelog Markdown esistente in un formato strutturato?&lt;/h2&gt;
&lt;p&gt;Di solito solo una volta che l&amp;#39;automazione è l&amp;#39;obiettivo reale, non prima. Un progetto di una
sola persona che pubblica un file Markdown in un README di GitHub non ha un vero bisogno di
automazione, e convertirlo in YAML non compra nulla se non cerimonia. La conversione si ripaga da
sola nel momento in cui più di un consumatore a valle, una pagina, un&amp;#39;email di riepilogo, un feed
pubblico, ha bisogno di leggere gli stessi dati, perché è esattamente il punto in cui le
incoerenze di un parser Markdown iniziano a produrre output visibilmente sbagliato invece di
essere solo fastidiose da mantenere.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Un changelog Markdown può essere reso parsabile senza cambiare formato del tutto?&lt;/strong&gt;
Parzialmente, con il frontmatter: un piccolo blocco YAML in cima a ogni voce (data, tipo,
versione) accanto a un corpo Markdown per la prosa. Questo ottiene i campi strutturati di cui un
parser ha bisogno senza forzare l&amp;#39;intera voce in JSON o YAML, ed è un ragionevole punto
intermedio per un team non ancora pronto per una migrazione completa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il formato del file conta per la SEO o per come si posiziona una pagina di changelog?&lt;/strong&gt;
Non direttamente. I motori di ricerca leggono la pagina renderizzata, non il file sorgente, quindi
il formato del file è invisibile per loro; ciò che conta per la pagina stessa è se è leggibile da
macchina di per sé, il che è una questione separata da cosa la genera.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ogni voce di changelog dovrebbe passare attraverso lo stesso file, o i tipi possono essere divisi su più file?&lt;/strong&gt;
Un file solo è più semplice finché il volume delle voci non lo rende scomodo da diffare o
revisionare; dividere per anno o per categoria è una valvola di sfogo ragionevole una volta che i
diff di un singolo file diventano troppo grandi da revisionare sensatamente, ma aggiunge un
passaggio di merge prima che qualcosa a valle possa leggere &amp;quot;tutte le voci&amp;quot; come un&amp;#39;unica lista.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Esiste un formato file standard per il changelog, come esiste uno standard per RSS?&lt;/strong&gt;
Non uno ampiamente adottato. Keep a Changelog propone una convenzione Markdown, e diversi
strumenti ne hanno una propria; un &lt;a href=&quot;https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md&quot;&gt;changeset&lt;/a&gt;
è un file Markdown con un frontmatter YAML che nomina il pacchetto e il bump, cioè lo schema a
frontmatter descritto sopra. Nessuno di questi è un formato che altri strumenti leggono di serie come i lettori RSS capiscono RSS
universalmente.&lt;/p&gt;
</content:encoded></item><item><title>Richieste duplicate: unire senza perdere la voce originale</title><link>https://changeloop.dev/blog/it/duplicate-feature-requests/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/duplicate-feature-requests/</guid><description>Raggruppare richieste di funzionalità duplicate protegge il conteggio. Unirle senza cura perde la formulazione che rendeva utile una di esse.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tre clienti chiedono la stessa capacità in tre settimane diverse, formulata in tre modi diversi, e
un processo di triage costruito per intercettare i duplicati fa il suo lavoro: li raggruppa, li
conta come un&amp;#39;unica richiesta con tre voti, e il backlog resta pulito. Questa è la parte facile.
&lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-tracking/&quot;&gt;Quali etichette valgono la pena&lt;/a&gt; copre il raggruppare per
capacità sottostante prima di smistare per formulazione come soluzione meccanica ai duplicati;
quello che non copre è cosa succede alle parole stesse quando tre richieste diventano una sola
riga, e quella perdita è di solito più grande del problema di conteggio dei duplicati che ha
risolto.&lt;/p&gt;
&lt;h2&gt;Cosa si perde davvero quando i duplicati vengono uniti?&lt;/h2&gt;
&lt;p&gt;La formulazione specifica usata da ogni richiedente, che spesso è più informativa del conteggio
voti in cui collassa. Una cliente potrebbe chiedere &amp;quot;un modo per esportare i risultati filtrati&amp;quot;,
un&amp;#39;altra &amp;quot;esportazione CSV che rispetti i miei filtri salvati&amp;quot;, e una terza &amp;quot;esportazione che non
includa colonne nascoste&amp;quot;. Tutte e tre sono la stessa richiesta sottostante, raggruppata
correttamente, ma ogni formulazione porta un&amp;#39;enfasi leggermente diversa su cosa conta per quella
persona, e una fusione che conserva solo la formulazione della prima segnalazione butta via
completamente le altre due. Il conteggio sopravvive; la trama che aiuterebbe qualcuno a costruire
la versione giusta della funzionalità, no.&lt;/p&gt;
&lt;h2&gt;Perché la trama conta se il conteggio voti già dice che esiste domanda?&lt;/h2&gt;
&lt;p&gt;Perché domanda e design sono domande diverse, e solo la formulazione specifica risponde alla
seconda. Dieci voti su &amp;quot;esportazione&amp;quot; dice a un team che vale la pena costruire la funzionalità;
non dice nulla su se &amp;quot;esportazione&amp;quot; significhi CSV, PDF, un&amp;#39;email programmata o un endpoint API, e
una fusione che scarta nove delle dieci segnalazioni originali a favore della formulazione della
prima può silenziosamente restringere la specifica a qualunque cosa la prima richiedente abbia
chiesto per caso, anche se le altre nove volevano qualcosa di sottilmente diverso. &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-tracking/&quot;&gt;Cosa dovrebbe
registrare davvero una richiesta di funzionalità&lt;/a&gt; copre
proprio questo divario dal lato dell&amp;#39;acquisizione; unire i duplicati è dove riemerge dopo
l&amp;#39;acquisizione, proprio nel punto in cui un team ha più bisogno della gamma di ciò che è stato
davvero chiesto.&lt;/p&gt;
&lt;h2&gt;Com&amp;#39;è un processo di fusione che conserva la formulazione invece di scartarla?&lt;/h2&gt;
&lt;p&gt;Aggiungere invece di sostituire. L&amp;#39;elemento canonico conserva un unico titolo per la vista del
backlog, ma la formulazione originale di ogni segnalazione unita resta attaccata ad esso, o come
elenco di citazioni o come ticket sorgente collegati, così chiunque riveda l&amp;#39;elemento in seguito
può vedere la gamma reale di ciò che le persone hanno chiesto invece del riassunto di una persona
del team. Costa quasi niente costruirlo, un campo sul ticket invece di un nuovo sistema, ed è la
differenza tra una fusione che comprime informazione e una che comprime solo come viene mostrata.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Funzionalità: Esportazione CSV filtrata
Voti: 12
Richieste unite:
  - &amp;quot;un modo per esportare i risultati filtrati&amp;quot; (acct_4421)
  - &amp;quot;esportazione CSV che rispetti i miei filtri salvati&amp;quot; (acct_8832)
  - &amp;quot;esportazione che non includa colonne nascoste&amp;quot; (acct_1097)
  ...
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Ogni duplicato merita di essere unito, o ci sono corrispondenze false?&lt;/h2&gt;
&lt;p&gt;Alcune sono corrispondenze false, e trattare &amp;quot;suona simile&amp;quot; come &amp;quot;è la stessa richiesta&amp;quot; è un
modo di fallire a sé stante. &amp;quot;Lasciami esportare i miei dati&amp;quot; e &amp;quot;lasciami esportare solo la vista
filtrata&amp;quot; possono essere raggruppate da una corrispondenza di parola chiave su &amp;quot;esportare&amp;quot; mentre
in realtà descrivono due ambiti diversi della stessa capacità generale; unirle o gonfia il
conteggio voti per la cosa sbagliata o, peggio, rilascia la versione più ristretta perché è
arrivata prima per caso. Un passaggio umano sul raggruppamento, anche veloce, coglie questo prima
che si accumuli; una corrispondenza automatica per similarità da sola unirà troppo per vocabolario
e troppo poco per intento.&lt;/p&gt;
&lt;h2&gt;Quando dovrebbe girare davvero il controllo dei duplicati, all&amp;#39;intake o dopo?&lt;/h2&gt;
&lt;p&gt;Entrambi, per motivi diversi. Controllare all&amp;#39;intake coglie il caso ovvio, una nuova richiesta che
riformula qualcosa già aperto, prima ancora che diventi una voce non tracciata a sé stante; una
ricerca per similarità contro le richieste aperte al momento dell&amp;#39;invio gestisce la maggior parte
di questi casi senza alcun intervento umano. Un secondo passaggio più avanti, con un ritmo più
lento, coglie il caso che l&amp;#39;intake si perde: due richieste che hanno usato un linguaggio abbastanza
diverso da sfuggire a una corrispondenza per parola chiave o per embedding al momento, ma che si
scoprono, una volta che un team ne ha viste una dozzina di varianti, descrivere la stessa capacità
di fondo. Saltare il secondo passaggio lascia i quasi-duplicati sparsi sotto titoli separati a
tempo indeterminato, ciascuno con il proprio piccolo conteggio voti che non si somma mai al numero
che l&amp;#39;avrebbe fatta costruire.&lt;/p&gt;
&lt;h2&gt;La richiedente dovrebbe sapere che la sua segnalazione è stata unita a un elemento esistente?&lt;/h2&gt;
&lt;p&gt;Sì, ed è la stessa disciplina di &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;chiudere il ciclo di feedback del cliente&lt;/a&gt;
applicata un passo prima del solito: una richiedente che ha inviato qualcosa e non ne sente più
parlare conclude che la sua richiesta non è andata da nessuna parte, anche se è stata unita
correttamente a un elemento con altri undici voti che alla fine è stato rilasciato. Un breve
riconoscimento, &amp;quot;abbiamo combinato questo con una richiesta esistente che anche altri hanno
fatto&amp;quot;, costa un messaggio ed evita che una cliente reinvii la stessa richiesta ogni pochi mesi
perché non ha visibilità su se sia mai stata effettivamente tracciata.&lt;/p&gt;
&lt;h2&gt;Unire cambia a chi viene dato credito quando la funzionalità viene rilasciata?&lt;/h2&gt;
&lt;p&gt;Dovrebbe includere tutti, non solo chi ha inviato per primo. &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;Chiudere il ciclo di
feedback&lt;/a&gt; copre l&amp;#39;avvisare le richiedenti quando la loro
richiesta viene rilasciata; per un elemento unito questo significa ogni account collegato alla
fusione, non solo quello la cui formulazione è diventata il titolo canonico, perché dal punto di
vista di ogni richiedente lei ha chiesto questo ed è stato rilasciato, indipendentemente da quale
formulazione un processo di triage abbia scelto di conservare. Con Changeloop significa che la pull
request nomina ogni issue collegato (&lt;code&gt;Fixes #142, fixes #187&lt;/code&gt;); un issue che non nomina non riceve
alcun commento.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Quanta formulazione vale la pena conservare per richiesta unita, una citazione o un link completo al ticket?&lt;/strong&gt;
Una citazione breve di solito basta per il caso comune, dato che il suo scopo è far vedere a chi
revisiona la gamma di formulazioni a colpo d&amp;#39;occhio; conservate anche il link completo al ticket
quando l&amp;#39;originale aveva contesto extra significativo, come uno screenshot o una descrizione
dettagliata del flusso che una citazione di una riga appiattirebbe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conservare la formulazione di ogni duplicato rende il backlog più difficile da scorrere?&lt;/strong&gt;
No, se è collassata di default. Il titolo canonico è ciò che vede chi scorre velocemente; la
formulazione unita è a un clic o un&amp;#39;espansione di distanza, presente per chi fa ricerca più
approfondita ma senza affollare la vista di chi conta solo i voti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa succede se due richieste sembrano identiche ma si scoprono volere cose diverse una volta costruite?&lt;/strong&gt;
Separatele di nuovo nel momento in cui diventa chiaro, e trattate la fusione originale come una
decisione ragionevole presa con le informazioni disponibili all&amp;#39;epoca, non come un errore da
evitare di ripetere. Un sistema di raggruppamento che non separa mai nulla finirà per avere
alcune fusioni sbagliate incorporate permanentemente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C&amp;#39;è una soglia di voti oltre la quale una richiesta unita dovrebbe ricevere una revisione umana della formulazione sottostante?&lt;/strong&gt;
Non un numero fisso, ma qualsiasi richiesta vicina a una decisione di costruzione la merita
indipendentemente dal conteggio voti, perché è il punto in cui la differenza tra &amp;quot;esportazione&amp;quot; e
&amp;quot;esportazione come CSV con filtri salvati&amp;quot; smette di essere una sfumatura e comincia a essere la
specifica.&lt;/p&gt;
</content:encoded></item><item><title>Deprecazione di GraphQL senza numero di versione</title><link>https://changeloop.dev/blog/it/graphql-schema-deprecation/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/graphql-schema-deprecation/</guid><description>GraphQL non ha v1 o v2 nell&apos;URL. I campi si deprecano uno alla volta con una direttiva, su uno schema condiviso, e questo cambia cosa deve un changelog.</description><pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un&amp;#39;API REST può pubblicare &lt;code&gt;/v2/&lt;/code&gt; accanto a &lt;code&gt;/v1/&lt;/code&gt; e lasciare che chi chiama si muova al proprio
ritmo. GraphQL ha uno schema a un endpoint, e ogni client, l&amp;#39;app mobile con la build dell&amp;#39;anno
scorso e la dashboard interna distribuita stamattina, interroga lo stesso grafo. Non c&amp;#39;è URL da
biforcare. Deprecare un campo significa marcarlo come deprecato sul posto, in uno schema da cui
tutti già dipendono, il che rende la disciplina diversa da REST anche se il problema di fondo,
dire a chi chiama che qualcosa sta per sparire, è lo stesso che &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;deprecazione di API&lt;/a&gt;
copre in generale.&lt;/p&gt;
&lt;h2&gt;Come marca GraphQL un campo come deprecato, se non c&amp;#39;è versione da incrementare?&lt;/h2&gt;
&lt;p&gt;Con la &lt;a href=&quot;https://spec.graphql.org/October2021/#sec--deprecated&quot;&gt;direttiva &lt;code&gt;@deprecated&lt;/code&gt;&lt;/a&gt;, applicata direttamente al campo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-graphql&quot;&gt;type Product {
  price: Float @deprecated(reason: &amp;quot;Use priceV2 for multi-currency support.&amp;quot;)
  priceV2: Money
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il campo resta interrogabile. Non sparisce, non restituisce un 404, non cambia comportamento;
porta solo una nota leggibile da macchina che la maggior parte degli strumenti GraphQL, GraphiQL,
Apollo Studio, i linter di schema, mostrerà a chiunque navighi lo schema o scriva una query contro
di esso. Questo è l&amp;#39;intero meccanismo. Non c&amp;#39;è un endpoint di deprecazione separato, nessun
header, nessun documento aggiuntivo richiesto dalla specifica, il che è sia l&amp;#39;attrattiva sia la
trappola: la direttiva è facile da aggiungere e facile da ignorare, perché niente costringe un
client a guardarla.&lt;/p&gt;
&lt;h2&gt;Qualcuno vede davvero il motivo della deprecazione?&lt;/h2&gt;
&lt;p&gt;Solo chi usa lo schema direttamente, tramite introspezione o un editor consapevole dello schema, e
questo è un pubblico più piccolo dei lettori abituali di un changelog di API. Un&amp;#39;app mobile
costruita contro una query sei mesi fa ha già quella query incorporata nel suo binario; continuerà
a chiedere &lt;code&gt;price&lt;/code&gt; e continuerà a ricevere una risposta, deprecato o no, finché qualcuno non
ricostruisce l&amp;#39;app con il nuovo campo e rilascia un aggiornamento. La direttiva dice a chi scrive
codice nuovo di non usare il campo vecchio. Non fa nulla per il client già distribuito e in
esecuzione.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Meccanismo&lt;/th&gt;
&lt;th&gt;Chi raggiunge&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Direttiva &lt;code&gt;@deprecated&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sviluppatrici che navigano lo schema o scrivono nuove query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fallimenti CI del linter di schema&lt;/td&gt;
&lt;td&gt;Il team proprietario del codice client, se ne gestisce uno&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Una voce di changelog&lt;/td&gt;
&lt;td&gt;Chiunque la legga, incluso un team client senza linter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Niente (il campo funziona e basta)&lt;/td&gt;
&lt;td&gt;Un client già costruito che usa il campo vecchio&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Un campo deprecato dovrebbe comunque avere una voce di changelog?&lt;/h2&gt;
&lt;p&gt;Sì, e fa più lavoro della sola direttiva, perché un changelog raggiunge persone che la direttiva
non può: un team partner che consuma il grafo senza navigarne lo schema, un client costruito
contro una copia cachata dello schema di mesi fa, chiunque se ne accorgerebbe solo leggendo prosa.
&lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;Changelog di API&lt;/a&gt; copre in generale cosa deve una voce a chi chiama; una
voce GraphQL deve una cosa che REST raramente deve esplicitare, perché chi chiama REST la deduce
dal numero di versione: se il campo vecchio funziona ancora oggi, funziona ancora con un avviso, o
ha effettivamente smesso di restituire dati. La direttiva da sola non risponde a nulla di questo
per una lettrice che non ha mai aperto lo schema.&lt;/p&gt;
&lt;h2&gt;Quando è davvero sicuro rimuovere un campo dallo schema?&lt;/h2&gt;
&lt;p&gt;Solo quando i log delle query mostrano che nessuno lo chiede più, il che è una domanda di
utilizzo, non di calendario. Un campo può portare &lt;code&gt;@deprecated&lt;/code&gt; per un anno ed essere ancora
portante per un client mai ricostruito; rimuoverlo su un calendario fisso, come spesso fa un
&lt;code&gt;Sunset&lt;/code&gt; REST, rompe quel client senza alcun avviso su cui possa agire, perché GraphQL non gli dà
nulla su cui agire oltre alla direttiva che non ha mai letto. Registrate l&amp;#39;utilizzo a livello di
campo prima di impegnarvi su una data di rimozione, e trattate qualsiasi conteggio di query
diverso da zero come una pausa, non un conto alla rovescia.&lt;/p&gt;
&lt;h2&gt;Aggiungere un campo comporta lo stesso rischio che in un&amp;#39;API REST?&lt;/h2&gt;
&lt;p&gt;Meno, per un nuovo campo, perché un client GraphQL riceve solo i campi che chiede esplicitamente.
Aggiungere &lt;code&gt;priceV2&lt;/code&gt; accanto a &lt;code&gt;price&lt;/code&gt; non può rompere una query esistente nel modo in cui
aggiungere un campo a una risposta JSON REST può rompere un deserializzatore rigido, dato che
niente costringe il client a richiedere il campo nuovo. Aggiungere un valore a un enum esistente è
l&amp;#39;eccezione che vale la pena nominare nello stesso respiro: un client che fa uno switch esaustivo
su ogni valore dell&amp;#39;enum, cosa che i linguaggi fortemente tipizzati incoraggiano, si rompe nel
momento in cui arriva un valore nuovo, indipendentemente dal fatto che una query lo chiedesse. La
sicurezza vale solo per i campi e i membri di union su cui un client sceglie di entrare; non vale
per un insieme chiuso che il codice di un client enumera a mano.&lt;/p&gt;
&lt;h2&gt;Cosa serve a una voce di changelog GraphQL che non serve a una REST?&lt;/h2&gt;
&lt;p&gt;La forma della query, non solo il nome del campo, perché &amp;quot;il campo &lt;code&gt;price&lt;/code&gt; è deprecato&amp;quot; manca del
pezzo di cui chi chiama ha davvero bisogno: quali tipi e quali query lo toccano. Una voce utile
nomina il tipo, il campo, il campo sostitutivo e, se potete generarlo, le query reali in
produzione che ancora richiedono la forma vecchia. Quest&amp;#39;ultimo pezzo, legare l&amp;#39;avviso di
deprecazione all&amp;#39;utilizzo reale, è ciò che chi chiama REST ottiene gratis dai log del server su un
URL e chi chiama GraphQL no, perché ogni query colpisce lo stesso endpoint indipendentemente da
cosa chiede.&lt;/p&gt;
&lt;h2&gt;Qualcos&amp;#39;altro oltre a un campo può portare la direttiva &lt;code&gt;@deprecated&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;I valori enum, usando la stessa direttiva sulla definizione del valore stesso invece che su quella
del campo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-graphql&quot;&gt;enum ShippingMethod {
  STANDARD
  EXPRESS
  OVERNIGHT @deprecated(reason: &amp;quot;Use EXPRESS with priority: true instead.&amp;quot;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La specifica definisce &lt;code&gt;@deprecated&lt;/code&gt; per esattamente due posizioni, la definizione di un campo o
un valore enum, e nient&amp;#39;altro nella release stabile; la deprecazione a livello di argomento e di
campo di input esiste solo nel linguaggio delle bozze successive, non in quello che la maggior
parte dei server implementa oggi. Un valore enum marcato in questo modo resta un valore legale che
un server può ancora restituire o accettare, la stessa promessa di non-rottura che fa un campo
deprecato, ed è quello che lo rende sicuro da pubblicare prima di rimuovere davvero il valore.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;GraphQL supporta qualcosa come un header Sunset per un intero endpoint?&lt;/strong&gt;
No, perché di solito c&amp;#39;è un solo endpoint. Il tempismo della deprecazione vive a livello di campo,
nel testo del motivo della direttiva &lt;code&gt;@deprecated&lt;/code&gt; e in qualunque changelog o guida alla
migrazione un team pubblichi accanto ad esso, non in un header di risposta che un client possa
leggere programmaticamente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un campo deprecato può essere rimosso e riaggiunto in seguito con un tipo diverso?&lt;/strong&gt;
Solo come nuovo nome di campo. Reintrodurre lo stesso nome di campo con un tipo cambiato è
esattamente il breaking change che il ciclo di deprecazione esiste per evitare; date al
sostituto un proprio nome, come fa &lt;code&gt;priceV2&lt;/code&gt;, e lasciate che il vecchio si estingua completamente
prima che il nome sia libero per il riutilizzo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il testo del motivo &lt;code&gt;@deprecated&lt;/code&gt; dovrebbe linkare alla voce di changelog?&lt;/strong&gt;
Sì, quando gli strumenti dello schema lo supportano. Il campo motivo accetta una stringa semplice,
e un URL dentro quella stringa è il percorso più breve da una sviluppatrice che fissa l&amp;#39;output
dell&amp;#39;introspezione alla spiegazione più completa che una voce di changelog può dare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un cambiamento di schema GraphQL è mai retrocompatibile in un modo in cui REST non lo è?&lt;/strong&gt;
I cambiamenti additivi di campo, sì, per il motivo sopra: i client ottengono solo ciò che
chiedono. I nuovi valori enum sono l&amp;#39;eccezione, perché un client che enumera un insieme chiuso può
rompersi su un valore che non si aspettava. Le rimozioni e i cambiamenti di tipo sono esattamente
rompenti quanto i loro equivalenti REST.&lt;/p&gt;
</content:encoded></item><item><title>Come scrivere una guida di migrazione per API</title><link>https://changeloop.dev/blog/it/api-migration-guide/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/api-migration-guide/</guid><description>Una guida di migrazione API trasforma un cambiamento incompatibile in una checklist. Cosa deve contenere, e perché una voce di changelog da sola non basta.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Una guida di migrazione API è il documento che trasforma un cambiamento incompatibile in una
checklist invece che in un&amp;#39;interruzione: cosa è cambiato, cosa fare al riguardo, ed entro quando.
Una voce di changelog può nominare un cambiamento incompatibile in due frasi; una guida di
migrazione è ciò che chi chiama apre davvero quando quelle due frasi dicono &amp;quot;questo ti rompe&amp;quot; e ha
bisogno di sapere esattamente cosa modificare. Pubblicare la voce senza la guida è come chi chiama
scopre un cambiamento incompatibile da un ticket di supporto invece che dal documento scritto per
prevenirlo.&lt;/p&gt;
&lt;h2&gt;Cos&amp;#39;è una guida di migrazione API?&lt;/h2&gt;
&lt;p&gt;Un documento passo passo che porta chi chiama dalla vecchia forma di un&amp;#39;API alla nuova, scritto
per chi ha codice da modificare, non per chi sta decidendo se adottare l&amp;#39;API. Questa distinzione
conta: una guida di migrazione presuppone un&amp;#39;integrazione esistente e traffico di produzione
esistente, quindi deve coprire il rollback, la migrazione parziale, e come capire se la migrazione
è riuscita, nulla di ciò che serve a una guida per una prima integrazione.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Documento&lt;/th&gt;
&lt;th&gt;Presuppone&lt;/th&gt;
&lt;th&gt;Risponde a&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Guida di migrazione&lt;/td&gt;
&lt;td&gt;Un&amp;#39;integrazione esistente&lt;/td&gt;
&lt;td&gt;Come passo dalla vecchia forma alla nuova?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voce di changelog&lt;/td&gt;
&lt;td&gt;Niente, solo che la lettrice controlla&lt;/td&gt;
&lt;td&gt;Cosa è cambiato, e quando?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Riferimento API&lt;/td&gt;
&lt;td&gt;Niente, o una prima integrazione&lt;/td&gt;
&lt;td&gt;Cosa fa questo endpoint?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avviso di deprecazione&lt;/td&gt;
&lt;td&gt;Un&amp;#39;integrazione che usa il vecchio&lt;/td&gt;
&lt;td&gt;Quando smette di funzionare?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Una guida di migrazione si colloca di solito tra gli ultimi due: un avviso di deprecazione fa
partire un conto alla rovescia, e la guida di migrazione è ciò che chi chiama segue prima che
quel conto scada.&lt;/p&gt;
&lt;h2&gt;Quando un cambiamento ha bisogno di una guida di migrazione, e non solo di una voce di changelog?&lt;/h2&gt;
&lt;p&gt;Quando c&amp;#39;è più di un passaggio tra il vecchio comportamento e il nuovo, o quando il cambiamento
tocca abbastanza punti di chiamata che chi chiama trae beneficio da un esempio lavorato più che da
una descrizione. &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;Cos&amp;#39;è un cambiamento incompatibile, e come rilasciarlo&lt;/a&gt;
copre il test per stabilire se un cambiamento è incompatibile; se la risposta è sì, la seconda
domanda è se la correzione è una modifica di una riga o una vera migrazione. Un campo rinominato
può gestirlo chi chiama solo con la voce di changelog. Un cambiamento all&amp;#39;autenticazione, alla
paginazione o alla gestione degli errori si guadagna quasi sempre una guida, perché il codice di
sostituzione corretto non è ovvio da una descrizione di una frase.&lt;/p&gt;
&lt;h2&gt;Cosa deve contenere una guida di migrazione?&lt;/h2&gt;
&lt;p&gt;Cinque cose, e saltarne anche una sola è ciò che trasforma una guida in una pagina che chi chiama
legge una volta e poi abbandona per procedere per tentativi. Il codice vecchio, mostrato così come
apparirebbe davvero in un progetto. Il codice nuovo, mostrato allo stesso modo, non come
descrizione astratta della differenza. Cosa si rompe se non si cambia nulla, detto chiaramente,
perché &amp;quot;nulla&amp;quot; è una risposta valida e comune che chi chiama deve comunque sentirsi dire
esplicitamente. Un modo per verificare che la migrazione abbia funzionato, come un campo di
risposta o un codice di stato da controllare. E una tempistica: quando il vecchio comportamento
smette di funzionare, e se entrambe le forme sono disponibili nel frattempo.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Migrazione dei campi valuta da float a intero (v3.0.0)

Prima:
  { &amp;quot;amount&amp;quot;: 19.99 }

Dopo:
  { &amp;quot;amount&amp;quot;: 1999 }  // unità di valuta più piccola (centesimi)

Cosa cambia: `amount` è ora un intero nell&amp;#39;unità più piccola della
valuta dell&amp;#39;account. Il codice che legge `amount` come float leggerà
un valore 100 volte troppo grande a partire dal 1 ottobre 2026.

Verifica: dopo la migrazione, un addebito di 19,99 dovrebbe leggersi
come `amount: 1999`, non come `amount: 19.99`.

Tempistica: v2 continua a restituire float fino al 15 gennaio 2027.
v3 restituisce interi dal lancio. Entrambe le versioni sono attive ora.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ognuna di queste cinque cose risponde a una domanda che chi chiama dovrebbe altrimenti indovinare
o chiedere al supporto, ed è proprio quello il costo reale che una guida di migrazione fa
risparmiare.&lt;/p&gt;
&lt;h2&gt;Chi dovrebbe scriverla, e quando?&lt;/h2&gt;
&lt;p&gt;Chi ha progettato il cambiamento, nello stesso momento in cui viene rilasciato, non un team di
supporto che la ricostruisce dai ticket in seguito. Chi ha preso la decisione sa su quali parti
del vecchio comportamento nessuno avrebbe dovuto fare affidamento e quali erano un contratto
accidentale; una guida scritta più tardi da qualcuno senza quel contesto tende o a spiegare
troppo l&amp;#39;ovvio o a perdere l&amp;#39;unico caso limite che rompe davvero le persone. La guida e la voce di
changelog che annuncia il cambiamento incompatibile dovrebbero uscire insieme, con la voce che
rimanda alla guida invece di ripeterla.&lt;/p&gt;
&lt;h2&gt;Come si collega questo al versionamento e al changelog API?&lt;/h2&gt;
&lt;p&gt;Direttamente: una guida di migrazione è la versione dettagliata di ciò che una voce MAJOR in
&lt;a href=&quot;https://changeloop.dev/blog/it/semantic-versioning-changelog/&quot;&gt;semantic versioning e il tuo changelog&lt;/a&gt; riassume solo in
una frase. La voce di changelog dice che un cambiamento è incompatibile e a grandi linee cosa è
cambiato; la guida di migrazione è il link che quella voce dovrebbe portare.
&lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;Changelog di API: cosa pubblicare e chi lo legge&lt;/a&gt; elenca la guida di
migrazione come uno dei cinque documenti che un&amp;#39;API mantiene, ognuno risponde a una domanda
diversa; questa è quella che risponde &amp;quot;come passo davvero da A a B&amp;quot;, e si guadagna una pagina
tutta sua proprio perché quella risposta di solito è troppo lunga per una voce di changelog.&lt;/p&gt;
&lt;h2&gt;Per quanto tempo dovrebbe restare pubblicata una guida di migrazione?&lt;/h2&gt;
&lt;p&gt;Almeno finché il vecchio comportamento resta raggiungibile, e idealmente anche dopo. Chi migra con
diciotto mesi di ritardo, dopo aver ignorato tre avvisi di deprecazione, ha comunque bisogno della
guida, e cancellarla il giorno in cui il vecchio comportamento viene spento garantisce solo che chi
ne ha più bisogno non la trovi. Tienila a un URL stabile e aggiorna la sezione tempistica invece di
ritirare la pagina. La &lt;a href=&quot;https://docs.stripe.com/upgrades&quot;&gt;guida di upgrade&lt;/a&gt; di Stripe è un esempio
pubblico di questo schema: una pagina sola, mantenuta aggiornata release dopo release, invece di un
documento nuovo per ogni versione che diventa vecchio nel momento in cui esce la successiva. La
vostra guida merita un posto altrettanto trovabile, accanto alla &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;documentazione&lt;/a&gt; che chi
chiama sta già leggendo, invece che sepolta in un archivio del blog.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ogni cambiamento incompatibile ha bisogno di una guida di migrazione?&lt;/strong&gt;
No. Un cambiamento che chi chiama può risolvere solo con la voce di changelog, come un singolo
campo rinominato con un sostituto ovvio, non ha bisogno di una guida separata. Un cambiamento che
tocca più punti di chiamata o richiede un esempio lavorato, sì.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una guida di migrazione dovrebbe stare con la documentazione API o nel changelog?&lt;/strong&gt;
Con la documentazione, collegata dalla voce di changelog. La voce è ciò che una lettrice vede per
prima; la guida è ciò di cui ha bisogno una volta deciso di agire, e appartiene accanto al
materiale di riferimento che chi chiama sta già usando.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra una guida di migrazione e un avviso di deprecazione?&lt;/strong&gt;
Un avviso di deprecazione dichiara che qualcosa sta per sparire ed entro quando. Una guida di
migrazione sono le istruzioni su cosa fare al riguardo. Un avviso di deprecazione senza guida di
migrazione collegata dice a chi chiama una scadenza senza dirle come rispettarla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il vecchio e il nuovo comportamento andrebbero entrambi documentati durante una finestra di migrazione?&lt;/strong&gt;
Sì, sulla stessa pagina se possibile, così chi chiama vede esattamente cosa è cambiato invece di
ricostruirlo da due documenti separati scritti in momenti diversi.&lt;/p&gt;
</content:encoded></item><item><title>Un check di changelog per GitHub Actions</title><link>https://changeloop.dev/blog/it/changelog-ci-enforcement/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/changelog-ci-enforcement/</guid><description>Un check di changelog in GitHub Actions rifiuta il merge senza una voce, perché affidarsi alla memoria fallisce puntualmente. E cosa rompe quel check.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ogni team che mantiene un changelog a mano ha avuto la stessa conversazione dopo lo stesso
incidente: un rilascio è uscito senza voce, qualcuno chiede perché, e la risposta onesta è che la
persona che l&amp;#39;avrebbe scritta stava andando veloce e il passaggio del changelog viveva solo nella
memoria. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-automation/&quot;&gt;Automazione del changelog&lt;/a&gt; copre cosa una pipeline può
automatizzare in sicurezza e cosa ha ancora bisogno di una persona; un check di changelog in CI è
l&amp;#39;altra metà di questo problema, perché automatizzare la scrittura non aiuta se nessuno è obbligato
a innescarla in primo luogo. GitHub Actions è dove la maggior parte dei team esegue già i controlli
delle proprie pull request, quindi è lì che vive anche questo.&lt;/p&gt;
&lt;h2&gt;Perché &amp;quot;chiediamo alle persone di aggiungere una voce&amp;quot; fallisce con un modello prevedibile?&lt;/h2&gt;
&lt;p&gt;Perché compete per l&amp;#39;attenzione con tutto il resto in una pull request, ed è l&amp;#39;unica parte senza
conseguenza immediata nel saltarla. I test falliscono rumorosamente e bloccano il merge. Una voce
di changelog mancante non blocca niente, quindi perde nel momento in cui qualcuno ha fretta, che
nella pratica è la maggior parte delle volte. Una politica imposta dalla memoria si degrada
esattamente al ritmo che ci si aspetterebbe: bene per le prime settimane dopo che tutti sono
d&amp;#39;accordo, poi silenziosamente abbandonata appena la persona a cui importava va in vacanza o
cambia team.&lt;/p&gt;
&lt;h2&gt;Cosa verifica davvero un check CI per una voce di changelog?&lt;/h2&gt;
&lt;p&gt;Non la qualità della scrittura, solo che una voce esista e sia ben formata, che è l&amp;#39;ambito giusto
per un check di changelog che gira in CI invece che nella testa di una persona.
Una forma comune: il check guarda il diff della PR e richiede o un nuovo file in
una directory di changeset (il modello che &lt;a href=&quot;https://github.com/changesets/changesets&quot;&gt;Changesets&lt;/a&gt;
e strumenti simili usano) o una riga modificata in un file di changelog, e fa fallire la build se
nessuno dei due esiste. La revisione di cosa dice davvero la voce accade ancora dove è sempre
accaduta, nel code review, perché quel giudizio non appartiene a uno script.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cosa verifica il check CI&lt;/th&gt;
&lt;th&gt;Cosa non verifica&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Esiste un changeset o una riga di changelog nel diff&lt;/td&gt;
&lt;td&gt;Se la formulazione è chiara&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;La voce fa riferimento al pacchetto giusto, in un monorepo&lt;/td&gt;
&lt;td&gt;Se il cambiamento merita davvero una voce&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Il file è sintatticamente valido (front matter, forma JSON)&lt;/td&gt;
&lt;td&gt;Se la voce è onesta sull&amp;#39;impatto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Ogni PR ne ha bisogno, o alcuni cambiamenti sono esenti?&lt;/h2&gt;
&lt;p&gt;Alcuni sono esenti, e la lista delle eccezioni è dove questi sistemi vengono davvero costruiti o
abbandonati. Un aggiornamento di dipendenza senza effetto visibile, un cambiamento solo di test,
un refactor interno senza cambiamento di comportamento: nessuno di questi dovrebbe costringere chi
contribuisce a inventare una voce di changelog per qualcosa a cui nessuno che legge il changelog
tiene. Il modello che funziona è un&amp;#39;etichetta o un flag che chi contribuisce può applicare
(&lt;code&gt;no-changelog-needed&lt;/code&gt;) e che soddisfa il check CI senza file, revisionato da chi approva la PR,
così l&amp;#39;eccezione stessa passa lo stesso controllo che passerebbe una voce.&lt;/p&gt;
&lt;h2&gt;Cosa succede alle eccezioni legittime, come un hotfix urgente?&lt;/h2&gt;
&lt;p&gt;Il gate appartiene al merge, non al deploy: un hotfix
sotto vera pressione di tempo può fare merge con una voce segnaposto o un ticket di follow-up,
purché il check CI sia soddisfatto dall&amp;#39;intenzione invece che solo da un paragrafo finito; alcuni
team accettano uno stub di una riga che una maintainer rifinisce prima del prossimo taglio di
rilascio. Ciò che il gate non dovrebbe mai permettere è saltare il passaggio in silenzio, perché
uno stub che viene dimenticato è un fallimento minore di una voce mai esistita, e uno stub lascia
almeno una traccia che qualcuno può trovare dopo.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# .github/workflows/changelog-check.yml
on:
  pull_request:
    types: [opened, synchronize, reopened, labeled, unlabeled]
jobs:
  changelog:
    if: &amp;gt;-
      !contains(github.event.pull_request.labels.*.name,
      &amp;#39;no-changelog-needed&amp;#39;)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 # the diff needs the base branch
      - name: Require changelog entry
        run: |
          base=&amp;quot;origin/${{ github.base_ref }}&amp;quot;
          if ! git diff --name-only &amp;quot;$base&amp;quot;...HEAD \
              | grep -q &amp;#39;^\.changeset/&amp;#39;; then
            echo &amp;quot;No changeset. Add one, or have a maintainer&amp;quot;
            echo &amp;quot;apply the no-changelog-needed label.&amp;quot;
            exit 1
          fi
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Come si fa a sapere che il check stesso è corretto prima che inizi a bloccare PR reali?&lt;/h2&gt;
&lt;p&gt;Aprite prima una pull request di prova su un branch usa-e-getta: una con un changeset, una senza,
e una con l&amp;#39;etichetta di eccezione, e confermate che tutte e tre ottengono l&amp;#39;esito atteso prima che
il check si applichi al lavoro di qualcun altro. Un check di changelog che fallisce aperto, facendo
passare ogni PR perché una condizione è stata scritta al contrario, è peggio che non avere nessun
check, perché sembra una copertura che non esiste davvero. &lt;code&gt;workflow_dispatch&lt;/code&gt; sullo stesso file,
eseguito manualmente contro un paio di PR recenti già mergiate, cattura la maggior parte di questi
errori senza bisogno di una pull request live.&lt;/p&gt;
&lt;h2&gt;La stessa idea funziona anche fuori da GitHub Actions?&lt;/h2&gt;
&lt;p&gt;La forma si porta dietro, cambia solo la sintassi. GitLab CI esprime la stessa regola come un blocco
&lt;code&gt;rules&lt;/code&gt; di un job che controlla &lt;code&gt;$CI_MERGE_REQUEST_LABELS&lt;/code&gt; invece di un &lt;code&gt;if&lt;/code&gt; di GitHub Actions, e
un&amp;#39;approvazione obbligatoria della merge request può sostituire il passaggio di revisione
dell&amp;#39;eccezione. Il check descritto in questo articolo è su GitHub Actions perché è la piattaforma su
cui già si trova la maggior parte di chi lo legge, ma il requisito di fondo, un gate verificato da
una macchina invece di una convenzione chiesta a voce, è lo stesso ovunque giri una CI prima di un
merge.&lt;/p&gt;
&lt;h2&gt;Funziona allo stesso modo in un monorepo?&lt;/h2&gt;
&lt;p&gt;Serve un pezzo in più: per quale pacchetto è la voce. &lt;a href=&quot;https://changeloop.dev/blog/it/monorepo-changelogs/&quot;&gt;Changelog di
monorepo&lt;/a&gt; copre perché un singolo file per l&amp;#39;intero repo smette di
funzionare appena i pacchetti vengono rilasciati indipendentemente; il check CI eredita lo stesso
requisito; un changeset che non nomina un pacchetto non è una prova utile che il changelog giusto
si aggiornerà, solo che qualche file è cambiato da qualche parte nel diff. Gli strumenti costruiti
per questo (Changesets è quello comune nell&amp;#39;ecosistema JavaScript) chiedono a chi contribuisce di
scegliere il pacchetto interessato e un bump semver nello stesso momento in cui il changeset viene
creato, così il check CI ottiene entrambi i pezzi gratis invece di inferirli dopo.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Il check CI dovrebbe bloccare il merge, o solo avvisare?&lt;/strong&gt;
Bloccare. Un avviso è funzionalmente identico a chiedere gentilmente, che è proprio la cosa già
fallita. L&amp;#39;etichetta di eccezione esiste proprio perché un caso genuino di solo-avviso abbia
comunque un percorso legittimo attraverso lo stesso gate rigido.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chi revisiona se un&amp;#39;etichetta di eccezione è stata applicata correttamente?&lt;/strong&gt;
Chi approva la pull request, come parte della revisione che sta già facendo comunque.
L&amp;#39;etichetta non dovrebbe mai essere auto-applicata e non revisionata, o diventa la stessa scappatoia
silenziosa che il gate doveva chiudere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Imporlo in CI sostituisce il bisogno di una pipeline di automazione del changelog?&lt;/strong&gt;
No, la alimenta. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-automation/&quot;&gt;Automazione del changelog&lt;/a&gt; copre come trasformare
voci strutturate in una pagina, un feed e un&amp;#39;email; il check CI è ciò che garantisce che quelle
voci strutturate esistano per automatizzarle in primo luogo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è la versione più piccola di questo che vale la pena costruire per prima?&lt;/strong&gt;
Un singolo check che fallisce se nessun file è cambiato sotto una directory di changelog
designata, con un&amp;#39;etichetta di eccezione. Il routing per pacchetto e l&amp;#39;inferenza semver per un
monorepo possono arrivare dopo; l&amp;#39;abitudine centrale, una voce esiste o qualcuno ha detto
esplicitamente che non serve, è quella che vale la pena avere fin dal primo giorno.&lt;/p&gt;
</content:encoded></item><item><title>Come rifiutare una richiesta senza perdere la cliente</title><link>https://changeloop.dev/blog/it/declining-feature-requests/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/declining-feature-requests/</guid><description>Chiudere il cerchio di solito vuol dire dire a qualcuno che la sua richiesta è uscita. La parte difficile è dire di no senza rovinare il rapporto.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Chiudere il cerchio di solito vuol dire dire a qualcuno che la sua richiesta è stata rilasciata. La
metà difficile, per cui la maggior parte dei sistemi di tracciamento non ha alcun processo, è dire
di no. La maggior parte delle richieste di funzionalità non viene mai rilasciata, il che significa
che la maggior parte della chiusura del cerchio che un prodotto deve davvero alle sue utenti è un
rifiuto, non un annuncio, e un rifiuto gestito male costa più buona volontà di quanto ne sarebbe
costato il silenzio. Gestito bene, può costare quasi nulla, perché ciò che chi fa una richiesta
vuole davvero, il più delle volte, è sapere di essere stata ascoltata, non la funzionalità in sé.&lt;/p&gt;
&lt;h2&gt;Perché rifiutare bene conta quanto rilasciare bene?&lt;/h2&gt;
&lt;p&gt;Perché il silenzio si legge come un rifiuto senza spiegazione, e un no spiegato si legge come
attenzione. Chi non sente nulla presume che la richiesta sia stata ignorata o persa, ed entrambe le
conclusioni le insegnano a smettere di disturbarsi a chiedere, che è lo stesso risultato che un
prodotto ottiene con un rifiuto vero e proprio, solo raggiunto più lentamente e con più risentimento
lungo la strada. Una risposta che dice no, chiaramente e con un motivo, chiude il cerchio in modo
completo quanto una funzionalità rilasciata, e lo fa più in fretta.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risposta&lt;/th&gt;
&lt;th&gt;Cosa impara chi ha chiesto&lt;/th&gt;
&lt;th&gt;Costo per il rapporto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Silenzio&lt;/td&gt;
&lt;td&gt;Nessuno ha letto, o a nessuno importa&lt;/td&gt;
&lt;td&gt;Alto, e cresce con ogni richiesta futura&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risposta automatica senza motivo&lt;/td&gt;
&lt;td&gt;È in coda da qualche parte, a tempo indeterminato&lt;/td&gt;
&lt;td&gt;Medio; guadagna tempo ma non fiducia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rifiuto con motivo&lt;/td&gt;
&lt;td&gt;È stata letta, considerata e risposta&lt;/td&gt;
&lt;td&gt;Basso, se il motivo è onesto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rifiuto con alternativa&lt;/td&gt;
&lt;td&gt;Il bisogno reale è stato davvero ascoltato&lt;/td&gt;
&lt;td&gt;Il più basso; spesso costruisce fiducia&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Cosa fa atterrare male un rifiuto?&lt;/h2&gt;
&lt;p&gt;Quasi sempre tre cose, in combinazione. Genericità: un &amp;quot;grazie per il feedback&amp;quot; preconfezionato che
non fa riferimento a cosa è stato davvero chiesto si legge come non letto affatto, anche se lo era.
Ritardo: un rifiuto che arriva sei mesi dopo la richiesta, quando chi ha chiesto se l&amp;#39;è ormai
dimenticato, sembra peggio di un no rapido, perché implica che la richiesta sia rimasta ferma
invece di essere stata considerata e rifiutata. E un motivo che non regge: &amp;quot;non è nella nostra
roadmap&amp;quot; non risponde a nulla, mentre &amp;quot;questo richiederebbe riprogettare come funzionano i
permessi, e non intendiamo toccarli quest&amp;#39;anno&amp;quot; dà a chi ha chiesto qualcosa che può davvero
valutare e, se conta abbastanza, far scalare o aggirare.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe dire davvero un buon rifiuto?&lt;/h2&gt;
&lt;p&gt;Quattro cose, in quest&amp;#39;ordine: un riconoscimento che nomina la richiesta specifica, non una
parafrasi generica; il motivo reale, dichiarato onestamente anche quando il motivo onesto è &amp;quot;questo
non si adatta a dove sta andando il prodotto&amp;quot; invece di una scusa più morbida; se la porta è chiusa
o semplicemente non è aperta ora, perché servono toni molto diversi; e, quando esiste, un&amp;#39;alternativa
che affronta il bisogno sottostante anche se non è la funzionalità richiesta alla lettera.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ciao Jamie,

Grazie per la richiesta di aggiungere l&amp;#39;importazione CSV in blocco per
gli inviti al team. L&amp;#39;abbiamo valutata, e non la costruiremo: il nostro
flusso di invito si basa sulla revisione individuale di ogni nuovo
membro per motivi di sicurezza, e l&amp;#39;importazione in blocco andrebbe
contro questo per progettazione, non per svista.

Se il vero problema è invitare rapidamente un team numeroso, l&amp;#39;API
supporta inviti individuali via script, che ti dà quasi tutta la
velocità senza saltare la revisione: [link]. Fammi sapere se vuoi
aiuto per configurarlo.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nota cosa fa questo che un modello non può: nomina la funzionalità reale, dà un motivo legato a una
vera decisione di design invece che a una politica vaga, e offre un percorso che risolve il
problema sottostante invece di chiudere solo il ticket.&lt;/p&gt;
&lt;h2&gt;In cosa differisce dal chiudere il cerchio su una funzionalità rilasciata?&lt;/h2&gt;
&lt;p&gt;La meccanica è simile, il tono no. &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;Chiudere il ciclo di feedback con il cliente&lt;/a&gt;
copre il caso rilasciato, dove il messaggio è una buona notizia e il rischio principale è
dimenticarsi di inviarlo. Un rifiuto è una cattiva notizia, o almeno non quella desiderata, e ha
bisogno di più cura nel motivo dato e meno automazione nella consegna: una notifica di
funzionalità rilasciata può essere un commento preconfezionato innescato da un cambio di stato, ma
un rifiuto che si legge come preconfezionato è esattamente il fallimento che questo intero approccio
vuole evitare. I due condividono un requisito, però: la richiesta originale deve restare collegata
a chi l&amp;#39;ha fatta, la stessa disciplina di tracciamento coperta da &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-tracking/&quot;&gt;tracciamento delle richieste di funzionalità&lt;/a&gt;,
altrimenti non c&amp;#39;è modo di inviare nessuno dei due messaggi individualmente.&lt;/p&gt;
&lt;h2&gt;Un rifiuto dovrebbe essere pubblico, come uno stato su una roadmap pubblica?&lt;/h2&gt;
&lt;p&gt;Di solito non il motivo specifico, anche se lo stato sì. &lt;a href=&quot;https://changeloop.dev/blog/it/public-roadmap/&quot;&gt;Roadmap pubblica&lt;/a&gt;
copre le etichette di stato che chi ha chiesto può controllare senza chiedere di nuovo, e uno stato
&amp;quot;rifiutato&amp;quot; o &amp;quot;non pianificato&amp;quot; può far parte di quel sistema. Ma il motivo dettagliato, specie
quando tocca priorità interne o contesto poco lusinghiero, di solito vale di più nella risposta
individuale che in una pagina di stato pubblica, dove la stessa formulazione deve funzionare per
ogni lettrice invece che per l&amp;#39;unica persona che ha davvero chiesto.&lt;/p&gt;
&lt;h2&gt;Ogni richiesta rifiutata merita una risposta individuale?&lt;/h2&gt;
&lt;p&gt;Ogni richiesta da una persona nominata e raggiungibile sì, almeno breve. Richieste ad alto volume,
duplicate o anonime sono l&amp;#39;eccezione: raggruppare richieste simili e rispondere una volta per
gruppo, o aggiornare un&amp;#39;etichetta di stato condivisa, è ragionevole quando le risposte individuali
davvero non scalano. La linea da mantenere è che &amp;quot;non possiamo rispondere a tutti individualmente&amp;quot;
dovrebbe essere un vincolo operativo reale, verificato contro il volume effettivo, non una scusa
predefinita per saltare una risposta che avrebbe richiesto due minuti.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;È meglio rifiutare rapidamente con un motivo debole, o prendersi tempo per uno buono?&lt;/strong&gt;
Rapidamente, con un motivo onesto, batte entrambi presi separatamente. Una risposta rapida con un
motivo vero, anche breve, supera una risposta lenta con uno rifinito; il ritardo stesso è parte di
ciò che danneggia la fiducia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un rifiuto dovrebbe mai promettere di rivalutare la richiesta più avanti?&lt;/strong&gt;
Solo se è davvero probabile e c&amp;#39;è un meccanismo per rivalutarla davvero, come un&amp;#39;etichetta che la
fa riemergere a un ciclo di pianificazione. Un vago &amp;quot;lo terremo presente&amp;quot; senza tale meccanismo è
funzionalmente uguale al silenzio, solo formulato più gentilmente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se il motivo onesto è qualcosa che l&amp;#39;azienda non può condividere, come una preoccupazione competitiva?&lt;/strong&gt;
Dillo direttamente invece di inventare un motivo più morbido. &amp;quot;Non possiamo condividere il
ragionamento specifico qui, ma non è qualcosa che pianifichiamo di costruire&amp;quot; è più onesto, e più
rispettato, di una spiegazione inventata che crolla davanti a una domanda di approfondimento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rifiutare una richiesta significa che dovrebbe essere cancellata dal tracciamento?&lt;/strong&gt;
No. Tienila, etichettata come rifiutata con il motivo, così fa parte del pattern contro cui viene
raggruppata la prossima richiesta simile, e così un contesto cambiato più avanti (una nuova
integrazione, una nuova priorità di team) può farla riemergere invece di ripartire da zero con la
valutazione.&lt;/p&gt;
</content:encoded></item><item><title>Release notes per i feature flag: cosa dire, e quando</title><link>https://changeloop.dev/blog/it/feature-flags-feature-requests/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/feature-flags-feature-requests/</guid><description>Le release notes per i feature flag separano merge e rilascio, che con un flag non coincidono. Chiudere il ciclo presto annuncia una funzione invisibile.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Chiudere il ciclo su una richiesta di funzionalità presuppone un momento netto in cui la cosa è
stata rilasciata. Un feature flag elimina quel momento, ed è per questo che scegliere quando pubblicare le release notes per i feature flag è difficile. Il codice viene mergiato, il flag esiste,
e per giorni o settimane dopo la funzionalità è contemporaneamente live in produzione e invisibile
per quasi chiunque potrebbe volerla usare, spesso inclusa la persona che l&amp;#39;aveva richiesta in
origine. Avvisare troppo presto la fa imbattere in una funzionalità che ancora non c&amp;#39;è. Avvisare
troppo tardi fa sì che il ciclo che doveva costruire fiducia si legga, invece, come dimenticato.&lt;/p&gt;
&lt;h2&gt;Perché un flag rompe la solita sequenza &amp;quot;rilascialo, avvisa&amp;quot;?&lt;/h2&gt;
&lt;p&gt;Perché divide un evento in almeno due: il codice che diventa live, e il flag che viene attivato
per un account specifico. Ogni processo per chiudere un ciclo di feedback presuppone che questi
accadano insieme, il che è vero per la maggior parte dei rilasci e falso per qualsiasi cosa dietro
a un flag usato per rollout graduale, targeting o come interruttore di emergenza. &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;Chiudere il
ciclo di feedback del cliente&lt;/a&gt; descrive l&amp;#39;avvisare chi ha fatto
la richiesta nel momento esatto in cui una voce di changelog viene approvata e pubblicata; quel
passaggio è scritto per il caso in cui pubblicare la voce e l&amp;#39;usabilità della funzionalità siano
lo stesso momento, e un flag è esattamente il caso in cui non lo sono.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Momento&lt;/th&gt;
&lt;th&gt;Cosa è vero&lt;/th&gt;
&lt;th&gt;Bisogna già avvisare chi ha fatto la richiesta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Codice mergiato, flag spento ovunque&lt;/td&gt;
&lt;td&gt;La funzionalità esiste, nessuno può usarla&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flag acceso per l&amp;#39;account di chi ha richiesto&lt;/td&gt;
&lt;td&gt;La funzionalità esiste, quella persona specifica può usarla&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flag acceso per una percentuale di rollout che la esclude&lt;/td&gt;
&lt;td&gt;La funzionalità esiste, quella persona ancora non può usarla&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flag rimosso del tutto, la funzionalità è semplicemente attiva&lt;/td&gt;
&lt;td&gt;La funzionalità esiste per tutti&lt;/td&gt;
&lt;td&gt;Sì, se non già avvisato&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Qual è la regola vera per sapere quando avvisare qualcuno?&lt;/h2&gt;
&lt;p&gt;Avvisa quando il flag è acceso per il suo account, non quando il codice viene mergiato e non quando
il flag viene creato. Questa singola regola copre ogni riga della tabella sopra, perché lega
l&amp;#39;avviso all&amp;#39;unico fatto che conta davvero per chi ha fatto la richiesta: se può, proprio adesso,
andare a usare la cosa. Un avviso legato al merge o alla creazione del flag è in realtà un
resoconto di avanzamento ingegneristico, e chi ha richiesto una funzionalità non vuole un resoconto
di avanzamento, vuole sapere quando andare a guardare.&lt;/p&gt;
&lt;h2&gt;Questo significa che chi ha fatto la richiesta ha bisogno di accesso anticipato o speciale?&lt;/h2&gt;
&lt;p&gt;Non necessariamente, e forzarlo crea un problema tutto suo. Se il flag viene rilasciato
gradualmente per motivi di carico o stabilità, spostare un account in cima alla coda solo per
chiudere un ciclo più velocemente mina la ragione per cui il rollout è scaglionato in primo luogo.
Le opzioni oneste sono: aspettare che l&amp;#39;account di chi ha fatto la richiesta raggiunga il rollout
naturalmente e avvisarlo allora, oppure, se l&amp;#39;urgenza lo giustifica, attivargli deliberatamente il
flag in anticipo, come una decisione reale di chi possiede il rollout, non come effetto collaterale
del voler mandare una notifica.&lt;/p&gt;
&lt;h2&gt;E se il flag è un interruttore di emergenza, non un meccanismo di rollout?&lt;/h2&gt;
&lt;p&gt;Allora l&amp;#39;assunzione sicura si capovolge. Un flag pensato per poter disattivare rapidamente una
funzionalità, piuttosto che scaglionarne il rilascio, di solito significa che la funzionalità è
pensata per essere completamente live appena viene creato, e il flag esiste per sicurezza
piuttosto che per sequenza. In quel caso, avvisare chi ha fatto la richiesta al momento del deploy
è corretto, come per qualsiasi rilascio senza flag; la presenza del flag è un dettaglio operativo
che non dovrebbe cambiare quando il ciclo si chiude. La distinzione che conta è a cosa serve il
flag, non se ne esiste uno.&lt;/p&gt;
&lt;h2&gt;Il flag cambia cosa dovrebbero dire le release notes per il feature flag?&lt;/h2&gt;
&lt;p&gt;Cambia quando la voce viene pubblicata, non cosa contiene. Una voce pubblicata nel momento esatto
in cui il flag è acceso per il 100% degli account si legge esattamente come una normale voce di
changelog, ed è giusto così; chi la trova più tardi non ha motivo di sapere che un flag sia mai
stato coinvolto. Quello che non dovrebbe fare è essere pubblicata mentre il flag è acceso solo per
una piccola percentuale di rollout, perché una voce pubblica di changelog manda chiunque la legga,
inclusi gli account senza il flag, a cercare una funzionalità che non troveranno, il che è una
versione peggiore dello stesso problema, su scala di tutto il prodotto invece che sulla scala di
chi ha fatto la richiesta. Quella regola sul tempismo è tutta la differenza tra le release notes
per un feature flag e una voce ordinaria: il contenuto è lo stesso, cambia solo la data di
pubblicazione. &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;Come scrivere release notes&lt;/a&gt;
copre la disciplina del &amp;quot;nessuna azione necessaria&amp;quot; che si applica anche qui: chi legge deve sapere
se questo lo riguarda, non solo che esiste da qualche parte.&lt;/p&gt;
&lt;h2&gt;Le email di aggiornamento prodotto dovrebbero trattare diversamente una funzionalità con flag?&lt;/h2&gt;
&lt;p&gt;Sì, soprattutto ritardandola invece di riscriverla. &lt;a href=&quot;https://changeloop.dev/blog/it/product-update-email/&quot;&gt;Il template dell&amp;#39;email di aggiornamento
prodotto&lt;/a&gt; copre le notifiche mirate contro i digest ampi; una
funzionalità con flag è un caso in cui il tempismo di una notifica mirata va verificato contro lo
stato del flag della destinataria prima di essere inviata, cosa che un digest ampio non può fare
facilmente affatto, il che è un motivo in più per cui un digest è il canale sbagliato per qualsiasi
cosa ancora a metà rollout.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bisogna dire a chi ha fatto la richiesta che la sua funzionalità &amp;quot;arriverà presto&amp;quot; quando il flag esiste ma non è ancora acceso per lei?&lt;/strong&gt;
Solo se c&amp;#39;è una data reale e vicina, e anche allora con parsimonia. Un &amp;quot;presto&amp;quot; senza data si legge,
passato abbastanza tempo, esattamente come il silenzio, e crea una seconda promessa che va anche
lei tracciata e mantenuta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chi decide quando un flag è abbastanza avanti da chiudere il ciclo?&lt;/strong&gt;
Chi possiede il rollout, non chi possiede la notifica. Chi ha il rollout sa se il &amp;quot;100% degli
account&amp;quot; è imminente o ancora a settimane di distanza; legare il passaggio di chiusura del ciclo al
suo stato, invece che a una data fissa, mantiene onesto l&amp;#39;avviso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una funzionalità dietro un flag permanente (mai rimosso del tutto) riceve mai una voce pubblica di changelog?&lt;/strong&gt;
Sì, appena raggiunge qualunque cosa significhi &amp;quot;disponibilità generale&amp;quot; per quel prodotto, anche se
il flag stesso resta nel codice per sempre per ragioni operative. La voce di changelog riguarda la
disponibilità per chi legge, non il dettaglio implementativo di come quella disponibilità è
realizzata.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se il flag viene rimosso e la funzionalità viene eliminata invece di essere rilasciata?&lt;/strong&gt;
Quello è un rifiuto, non un avviso di rilascio, e merita la stessa cura di qualsiasi altro
rifiuto. &lt;a href=&quot;https://changeloop.dev/blog/it/declining-feature-requests/&quot;&gt;Come rifiutare una richiesta di funzionalità&lt;/a&gt;
copre cosa dovrebbe dire quel messaggio; chiudere il ciclo onestamente a volte significa chiuderlo
con un no.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le release notes per un feature flag hanno bisogno di un template separato da una voce normale?&lt;/strong&gt;
Nessun cambio di template, solo un passaggio di controllo prima della pubblicazione: verificare lo
stato del flag per l&amp;#39;account che ha fatto la richiesta, non solo che il codice sia stato mergiato, e
trattenere la voce finché quel controllo non passa. Tutto il resto della voce, la formulazione, la
lunghezza, la disciplina delle FAQ, resta uguale a qualsiasi altra release note.&lt;/p&gt;
</content:encoded></item><item><title>Quando una richiesta di funzionalità è in realtà un bug</title><link>https://changeloop.dev/blog/it/feature-request-vs-bug-report/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/feature-request-vs-bug-report/</guid><description>Un ticket che chiede una nuova impostazione può essere un workaround per un bug nascosto. L&apos;etichetta sbagliata la manda a coda e responsabile sbagliate.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;quot;Potete aggiungere un&amp;#39;impostazione per aumentare il limite di esportazione?&amp;quot; si legge come una
richiesta di funzionalità, e la maggior parte dei sistemi di triage la etichetta così sul posto. A
volte lo è. A volte l&amp;#39;esportazione fallisce a un numero sotto il limite documentato per colpa di
un bug, e la cliente, incapace di vedere il codice, ha inventato la soluzione più plausibile che
sa descrivere: datemi un numero più grande e forse funzionerà. &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-tracking/&quot;&gt;Quali etichette valgono la
pena&lt;/a&gt; copre l&amp;#39;etichetta di tipo che divide un backlog in
richieste di funzionalità e bug; questo è il caso in cui le parole stesse di una cliente puntano
l&amp;#39;etichetta nella direzione sbagliata, e il costo di sbagliare è una deriva lenta verso un backlog
pieno di richieste che nessuno vuole davvero una volta guardato sotto.&lt;/p&gt;
&lt;h2&gt;Come si presenta una richiesta di funzionalità che in realtà è un bug?&lt;/h2&gt;
&lt;p&gt;Nomina un workaround invece del problema. Una richiesta di funzionalità genuina di solito descrive
un risultato che il prodotto non supporta affatto: &amp;quot;lasciatemi programmare questo per dopo&amp;quot;,
&amp;quot;aggiungete una modalità scura&amp;quot;. Un bug mal classificato descrive un numero, una soglia o un
comportamento specifico che suona come un&amp;#39;impostazione mancante ma in realtà è un sintomo:
&amp;quot;aumentate il timeout&amp;quot;, &amp;quot;aggiungete un&amp;#39;opzione di retry&amp;quot;, &amp;quot;lasciatemi esportare più righe alla
volta&amp;quot;. Il segnale è che chi chiede propone un&amp;#39;implementazione, un&amp;#39;impostazione, un interruttore,
un override, invece di descrivere un obiettivo, perché ha già provato la funzionalità come
documentata e non ha fatto quello che la documentazione dice che dovrebbe fare.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Segnale&lt;/th&gt;
&lt;th&gt;Richiesta di funzionalità&lt;/th&gt;
&lt;th&gt;Bug travestito da richiesta di funzionalità&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Cosa descrive chi chiede&lt;/td&gt;
&lt;td&gt;Un risultato che il prodotto non può fare&lt;/td&gt;
&lt;td&gt;Un parametro che vuole cambiare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Se il comportamento documentato copre già questo&lt;/td&gt;
&lt;td&gt;No, davvero mancante&lt;/td&gt;
&lt;td&gt;Sì, ma non funziona come documentato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Se più sforzo fa sparire la richiesta&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;A volte, se il bug dipende da una soglia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dove dovrebbe essere instradato&lt;/td&gt;
&lt;td&gt;Backlog di prodotto&lt;/td&gt;
&lt;td&gt;Coda dei bug&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Perché questo conta più di quanto sembri?&lt;/h2&gt;
&lt;p&gt;Perché le due code hanno responsabili, tempistiche e criteri di successo diversi, e un bug
archiviato come richiesta di funzionalità viene prioritizzato contro le richieste di funzionalità,
competendo per l&amp;#39;attenzione con lacune di prodotto reali invece di essere risolto secondo la
tempistica che un bug merita. &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-tracking/&quot;&gt;Come tracciare le richieste di funzionalità&lt;/a&gt;
copre perché mescolare bug e funzionalità in una sola coda lascia che le lamentele più rumorose
spostino le richieste reali; una richiesta di funzionalità che in segreto è un bug fa il danno
opposto, resta nel backlog di prodotto accumulando voti per una &amp;quot;funzionalità&amp;quot; che sparirebbe non
appena il bug sottostante venisse risolto, il che spreca il segnale di prioritizzazione per
chiunque legga quel backlog.&lt;/p&gt;
&lt;h2&gt;Come si distingue quando le parole stesse della cliente puntano nella direzione sbagliata?&lt;/h2&gt;
&lt;p&gt;Chiedete cosa si aspettava che succedesse, non cosa vuole che aggiungiate. &amp;quot;L&amp;#39;esportazione si è
fermata a 500 righe e me ne servono 2.000, potete alzare il limite&amp;quot; suona come una richiesta di
funzionalità di aumento del limite finché la domanda di follow-up, &amp;quot;500 è il limite documentato&amp;quot;,
non rivela che il numero documentato era 5.000 e l&amp;#39;esportazione fallisce in anticipo. Quella sola
domanda, cosa si aspettava contro cosa è successo, fa la maggior parte del lavoro di
classificazione, perché una richiesta di funzionalità genuina non ha un comportamento documentato
a cui viene meno; non c&amp;#39;è niente da aspettarsi perché la capacità ancora non esiste.&lt;/p&gt;
&lt;h2&gt;Dovrebbero decidere gli agenti di supporto o le ingegnere?&lt;/h2&gt;
&lt;p&gt;Gli agenti di supporto fanno il primo passaggio, perché vedono il ticket per primi, ma l&amp;#39;etichetta
dovrebbe essere facile da cambiare ed economica da sbagliare, non una decisione una tantum che
fissa l&amp;#39;elemento nella coda sbagliata per sempre. Un secondo controllo leggero, un&amp;#39;ingegnera che
scandaglia settimanalmente le nuove etichette &amp;quot;richiesta di funzionalità&amp;quot; per qualcosa che
puzza di bug travestito, cattura quelle che un agente di supporto senza contesto sul codice non
avrebbe potuto riconoscere. Non deve essere formale; è più uno sguardo di cinque minuti che un
processo di revisione.&lt;/p&gt;
&lt;h2&gt;Chiudere il ciclo cambia una volta trovato il bug vero?&lt;/h2&gt;
&lt;p&gt;Sì, e migliora il messaggio che potete inviare. &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;Chiudere il ciclo di feedback del
cliente&lt;/a&gt; copre l&amp;#39;avvisare chi ha chiesto quando qualcosa viene
rilasciato; un bug ricategorizzato riceve una versione migliore di quel messaggio, perché &amp;quot;abbiamo
trovato e risolto il bug dietro a questo&amp;quot; suona come competenza, mentre &amp;quot;abbiamo costruito la
funzionalità che avete chiesto&amp;quot; sarebbe stato vero solo per caso, perché la vera richiesta di
funzionalità, un limite di esportazione davvero più alto, potrebbe non venire mai costruita una
volta che il bug è sparito e il limite originale di 5.000 righe basta.&lt;/p&gt;
&lt;h2&gt;Cosa succede se la classificazione sbagliata non viene mai colta?&lt;/h2&gt;
&lt;p&gt;Il backlog si riempie di richieste che sembrano domanda reale e non lo sono, e le decisioni di
prioritizzazione prese contro quel backlog ereditano la distorsione. Una &amp;quot;funzionalità&amp;quot; con
quaranta voti potrebbe in realtà essere quaranta persone che incontrano lo stesso bug, e costruire
la richiesta letterale, un&amp;#39;impostazione per alzare un limite che non era mai stato davvero il
vincolo, consegna complessità che non risolve niente, mentre il bug sottostante continua a
generare nuove &amp;quot;richieste di funzionalità&amp;quot; da clienti che non hanno ancora trovato questo thread.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Vale la pena aggiungere un passaggio formale per controllare ogni richiesta di funzionalità contro bug noti?&lt;/strong&gt;
Non un passaggio formale, piuttosto un&amp;#39;abitudine: chiunque triagi una nuova richiesta di
funzionalità dovrebbe chiedere &amp;quot;il comportamento documentato afferma già di fare questo&amp;quot; prima di
applicare l&amp;#39;etichetta, perché quella sola domanda cattura la maggior parte delle classificazioni
sbagliate senza aggiungere sovraccarico di processo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se la cliente insiste che è una richiesta di funzionalità anche dopo che il bug è stato trovato?&lt;/strong&gt;
Spiegate cosa avete trovato e perché l&amp;#39;impostazione che proponeva non servirebbe più una volta
risolto il bug. La maggior parte delle clienti chiede un workaround perché ha assunto che la vera
soluzione non fosse disponibile, non perché volesse specificamente quell&amp;#39;impostazione.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un elemento ricategorizzato perde i voti o i commenti che ha accumulato come richiesta di funzionalità?&lt;/strong&gt;
Dovrebbe conservarli, visibili, perché quei voti sono la prova che ha portato a trovare il bug in
primo luogo, e nascondere quella traccia rende più difficile cogliere la stessa classificazione
sbagliata la prossima volta, su un ticket diverso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Può succedere al contrario, un bug che in realtà è una richiesta di funzionalità?&lt;/strong&gt;
Meno spesso, ma sì: &amp;quot;questo è rotto&amp;quot; a volte significa &amp;quot;questo non fa quello che ho assunto che
facesse&amp;quot;, che è una capacità mancante, non un difetto. La stessa domanda, cosa si aspettava contro
cosa è documentato, classifica anche in questa direzione.&lt;/p&gt;
</content:encoded></item><item><title>Come tracciare le richieste di funzionalità senza perderle</title><link>https://changeloop.dev/blog/it/feature-request-tracking/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/feature-request-tracking/</guid><description>Il tracciamento delle richieste fallisce di solito in due modi: non arrivano da nessuna parte, o dove nessuno le riguarda. Un sistema che regge a entrambi.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Il tracciamento delle richieste di funzionalità fallisce quasi sempre in uno di due modi. O le
richieste non hanno un posto dove andare, quindi vivono in caselle di posta e thread Slack dove
vengono dimenticate una a una, oppure hanno un posto dove andare che nessuno riguarda più, quindi
vengono dimenticate tutte insieme. Un sistema che funziona deve reggere entrambi i fallimenti:
serve un unico luogo dove ogni richiesta atterra, e una ragione per riaprire quel luogo il mese
prossimo.&lt;/p&gt;
&lt;h2&gt;Da dove arrivano davvero le richieste di funzionalità?&lt;/h2&gt;
&lt;p&gt;Da più canali di quanti la maggior parte dei sistemi di tracciamento preveda. Un ticket di
supporto che include un &amp;quot;sarebbe bello se&amp;quot;. Un commento su una roadmap pubblica. Una chiamata di
vendita in cui una potenziale cliente nomina l&amp;#39;unica cosa che blocca l&amp;#39;accordo. Un widget nel
prodotto. Ogni canale ha una propria responsabile e propri strumenti, ed è proprio per questo che
le richieste si disperdono: la coda ticket del supporto e il backlog del team prodotto raramente
sono lo stesso sistema, e una richiesta che raggiunge solo uno dei due ha, di fatto, raggiunto
solo un reparto.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Origine&lt;/th&gt;
&lt;th&gt;Responsabile tipica&lt;/th&gt;
&lt;th&gt;Dove tende a scomparire&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Ticket di supporto&lt;/td&gt;
&lt;td&gt;Team supporto&lt;/td&gt;
&lt;td&gt;Chiuso come risolto, mai più ripreso&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chiamate di vendita&lt;/td&gt;
&lt;td&gt;Vendite / account management&lt;/td&gt;
&lt;td&gt;Un campo del CRM che nessuno in prodotto legge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Widget nel prodotto&lt;/td&gt;
&lt;td&gt;Prodotto&lt;/td&gt;
&lt;td&gt;Un form inviato senza follow-up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commenti sulla roadmap&lt;/td&gt;
&lt;td&gt;Chi ha costruito la roadmap&lt;/td&gt;
&lt;td&gt;Il thread di commenti stesso&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Social media / recensioni&lt;/td&gt;
&lt;td&gt;Marketing o nessuno&lt;/td&gt;
&lt;td&gt;Catturato in uno screenshot una volta, poi sparito&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Un unico form di raccolta per ogni canale non funziona, perché nessuno lo adotta. Quello che
funziona è una destinazione in cui ogni canale confluisce, anche se il routing sono cinque minuti
al giorno di copia e incolla finché non viene automatizzato.&lt;/p&gt;
&lt;h2&gt;Cosa rompe davvero il tracciamento delle richieste?&lt;/h2&gt;
&lt;p&gt;Quasi sempre due cose. La prima è una destinazione mancante: le richieste vengono risposte nel
canale in cui sono arrivate e mai registrate da nessuna parte in modo duraturo, per cui la stessa
richiesta di tre clienti diversi sembra tre risposte isolate e scollegate invece di un unico
segnale. La seconda, più comune, è una destinazione che si riempie e smette di essere letta. Un
foglio di calcolo con 400 righe senza filtro non è più un sistema di tracciamento; è un archivio
che risulta essere scrivibile.&lt;/p&gt;
&lt;p&gt;Il secondo fallimento è il più pericoloso, perché sembra che il tracciamento funzioni. Le
richieste vengono registrate. Niente sembra rotto finché qualcuno chiede &amp;quot;quante persone hanno
chiesto X&amp;quot; e la risposta onesta è &amp;quot;dovremmo leggere tutte le 400 righe per saperlo&amp;quot;.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe registrare davvero una richiesta di funzionalità?&lt;/h2&gt;
&lt;p&gt;Abbastanza per rispondere a tre domande in seguito senza rileggere il messaggio originale: cosa
è stato chiesto, possibilmente con le parole di chi ha fatto la richiesta; chi ha chiesto, e come
contattarla se la risposta finisce per essere &amp;quot;l&amp;#39;abbiamo costruito&amp;quot;; e cosa servirebbe per capire
se è una richiesta comune o un caso isolato. Una citazione testuale conta più di una parafrasi,
perché una parafrasi scritta da chi ha smistato la richiesta porta già la sua lettura, ed è
proprio quella lettura che una seconda persona non può verificare sei mesi dopo.&lt;/p&gt;
&lt;h2&gt;Quali etichette valgono la pena?&lt;/h2&gt;
&lt;p&gt;Due, e rispondono a domande diverse. Un&amp;#39;etichetta di &lt;strong&gt;tipo&lt;/strong&gt; separa una richiesta di
funzionalità da un bug report, perché entrambi richiedono responsabili e tempistiche diverse, e
mescolarli in una coda sola lascia che le lamentele più rumorose spostino le richieste. Un&amp;#39;etichetta
di &lt;strong&gt;priorità&lt;/strong&gt;, mantenuta a un piccolo insieme come low, medium e high, separa &amp;quot;blocca qualcuno
nell&amp;#39;uso del prodotto&amp;quot; da &amp;quot;sarebbe carino&amp;quot;, perché entrambe meritano tempi di risposta molto
diversi e nessuna dovrebbe ereditare il ritmo dell&amp;#39;altra. Mettere
correttamente l&amp;#39;etichetta di &lt;strong&gt;tipo&lt;/strong&gt; presuppone che la richiesta sia quello che dice di essere;
&lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-vs-bug-report/&quot;&gt;quando una richiesta di funzionalità è in realtà un bug&lt;/a&gt;
copre il caso in cui le parole stesse di una cliente puntano quell&amp;#39;etichetta nella direzione
sbagliata.&lt;/p&gt;
&lt;p&gt;Il triage automatizzato può applicare entrambe nel momento in cui arriva la richiesta. In
changeloop, un invio dal widget riceve l&amp;#39;etichetta &lt;code&gt;feature-request&lt;/code&gt; o &lt;code&gt;bug&lt;/code&gt; e un&amp;#39;etichetta
&lt;code&gt;priority:low|medium|high&lt;/code&gt; nello stesso passaggio, più un tag &lt;code&gt;from-widget&lt;/code&gt; così l&amp;#39;origine è
visibile senza aprire l&amp;#39;elemento. Basta per filtrare il backlog in un minuto invece che in un
pomeriggio: mostrami ogni richiesta di funzionalità ad alta priorità arrivata dal widget questo
mese.&lt;/p&gt;
&lt;p&gt;Una terza etichetta vale la pena appena esiste una roadmap pubblica: uno stato che chi ha fatto
la richiesta può controllare da solo. &lt;a href=&quot;https://changeloop.dev/blog/it/public-roadmap/&quot;&gt;Roadmap pubblica&lt;/a&gt; copre per intero
gli stati planned, building e shipped; in breve, quell&amp;#39;etichetta trasforma una coda privata in
qualcosa che chi ha fatto la richiesta può consultare senza chiedere di nuovo.&lt;/p&gt;
&lt;h2&gt;Come si decide cosa costruire dopo?&lt;/h2&gt;
&lt;p&gt;Raggruppare prima di contare. Dieci richieste formulate in modo diverso per la stessa capacità
sottostante si leggono come dieci righe disperse in un foglio di calcolo, e come un segnale forte
appena raggruppate, e quel raggruppamento è di solito il passaggio mancante, non il conteggio. Un
conteggio grezzo senza raggruppamento tende a premiare la funzionalità con il nome più
accattivante, non quella con più domanda reale dietro.&lt;/p&gt;
&lt;p&gt;Pesare in base a chi chiede, non solo a quanti chiedono. Una richiesta da un account vicino al
rinnovo porta un&amp;#39;urgenza diversa dalla stessa richiesta da una registrazione di prova, e un
sistema di tracciamento che scarta questo contesto a favore di un conteggio nudo sta ottimizzando
per il numero più facile da calcolare, non per quello più utile.&lt;/p&gt;
&lt;p&gt;Ogni decisione qui produce anche richieste che perdono, e anche quelle meritano una risposta;
&lt;a href=&quot;https://changeloop.dev/blog/it/declining-feature-requests/&quot;&gt;come rifiutare una richiesta&lt;/a&gt; copre cosa dire a chi ha fatto
una richiesta che non ce l&amp;#39;ha fatta. Raggruppare e pesare è solo metà di &amp;quot;cosa costruire dopo&amp;quot;;
&lt;a href=&quot;https://changeloop.dev/blog/it/prioritizing-feature-requests/&quot;&gt;come dare priorità alle richieste di funzionalità&lt;/a&gt; copre
i framework veri, RICE, ponderazione per fatturato e conteggi grezzi, e dove ognuno si rompe.&lt;/p&gt;
&lt;h2&gt;Come si chiude il cerchio una volta rilasciato qualcosa?&lt;/h2&gt;
&lt;p&gt;Questo è il passaggio che i sistemi di tracciamento saltano più spesso, ed è quello che chi ha
fatto la richiesta nota davvero. &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;Chiudere il ciclo di feedback con il cliente&lt;/a&gt;
copre la meccanica per intero; ciò che conta qui è che chiudere il cerchio funziona solo se la
richiesta originale è rimasta collegata a chi l&amp;#39;ha fatta. Un template di richiesta di
funzionalità costruito da un issue GitHub, con l&amp;#39;identità di chi ha chiesto legata all&amp;#39;issue
invece che sepolta in un commento, è ciò che rende possibile una notifica automatica di
&amp;quot;rilasciato&amp;quot; invece di una che qualcuno deve ricordarsi di inviare. &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-template/&quot;&gt;Template di richiesta di funzionalità&lt;/a&gt;
mostra il template concreto e a cosa serve ogni campo.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Che strumento dovrei usare per tracciare le richieste di funzionalità?&lt;/strong&gt;
Ciò che il team già controlla ogni giorno batte qualsiasi strumento dedicato che nessuno apre. Un
tracker di issue GitHub funziona bene se l&amp;#39;ingegneria vive già lì; una board leggera funziona
bene se il prodotto vive lì. Lo strumento conta meno del fatto che venga riaperto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come evito che le richieste di funzionalità si duplichino?&lt;/strong&gt;
Raggruppare per capacità sottostante prima di smistare per formulazione. Una ricerca tra le
richieste esistenti prima di aprirne una nuova intercetta la maggior parte dei duplicati; un
passaggio mensile di raggruppamento intercetta il resto.
&lt;a href=&quot;https://changeloop.dev/blog/it/duplicate-feature-requests/&quot;&gt;Unire i duplicati senza perdere la voce originale&lt;/a&gt; copre
cosa fare con la formulazione una volta fatto il raggruppamento in sé, così la fusione non
restringe silenziosamente la richiesta a qualunque segnalazione sia arrivata per prima.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ogni richiesta di funzionalità dovrebbe ricevere una risposta?&lt;/strong&gt;
Ognuna dovrebbe ricevere una conferma, anche breve, ma non ognuna ha bisogno di una decisione
subito. Uno stato visibile, come un&amp;#39;etichetta di roadmap che chi ha chiesto può controllare da
solo, sostituisce la maggior parte delle risposte individuali che un team dovrebbe altrimenti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra tracciamento delle richieste e roadmap pubblica?&lt;/strong&gt;
Il tracciamento è il registro interno di ogni richiesta, incluse quelle che non verranno mai
rilasciate. Una roadmap pubblica è il sottoinsieme a cui un team si impegna pubblicamente, con
uno stato che chi ha fatto la richiesta può vedere senza chiedere di nuovo.&lt;/p&gt;
</content:encoded></item><item><title>Ticket di supporto vs. richieste: di cosa ti fidi?</title><link>https://changeloop.dev/blog/it/feedback-signal-quality/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/feedback-signal-quality/</guid><description>Un ticket di supporto e una bacheca richieste misurano cose diverse, e trattare un picco nell&apos;uno come nell&apos;altro produce priorità sbagliate con sicurezza.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Una bacheca di richieste di funzionalità cattura ciò che le utenti chiedono quando hanno tempo di
sedersi e descrivere cosa vogliono. Un ticket di supporto cattura in cosa sono bloccate le utenti
proprio adesso, spesso infastidite, spesso senza il vocabolario per descrivere pulitamente la
richiesta sottostante. Entrambi sono segnale reale, e i team che guardano solo uno dei due finiscono
per risolvere il problema sbagliato con sicurezza, perché ogni canale sovrarappresenta
sistematicamente un tipo diverso di utente e un tipo diverso di bisogno. &lt;a href=&quot;https://changeloop.dev/blog/it/prioritizing-feature-requests/&quot;&gt;Dare priorità alle
richieste di funzionalità&lt;/a&gt; copre come classificare ciò che
è già in bacheca; questo riguarda il divario tra ciò che arriva in bacheca e ciò che compare solo
mai come ticket di supporto.&lt;/p&gt;
&lt;h2&gt;Perché lo stesso problema sottostante comparirebbe in un canale e non nell&amp;#39;altro?&lt;/h2&gt;
&lt;p&gt;Perché i due canali hanno costi di attivazione diversi, e la dimensione di quel costo determina chi
lo supera. Presentare una richiesta di funzionalità richiede iniziativa: un&amp;#39;utente deve credere che
la richiesta valga la pena di essere articolata, trovare la bacheca, e scrivere qualcosa di
coerente, il che seleziona utenti coinvolte e pazienti già investite nel prodotto. Presentare un
ticket di supporto richiede quasi nessuna iniziativa a confronto, spesso solo un clic su &amp;quot;aiuto&amp;quot; a
metà di un compito, il che significa che cattura utenti frustrate nel momento, incluse quelle che
non si sarebbero mai disturbate con una bacheca di richieste. Un divario reale nel prodotto può
essere invisibile sulla bacheca funzionalità e rumoroso nel supporto semplicemente perché le utenti
che ci si imbattono sono quelle meno propense a presentare una richiesta formale.&lt;/p&gt;
&lt;h2&gt;Il volume di ticket per una funzionalità mancante significa la stessa cosa del conteggio voti per essa?&lt;/h2&gt;
&lt;p&gt;No, perché misurano popolazioni diverse in condizioni diverse. Una richiesta di funzionalità con
cento voti rappresenta cento persone che si sono prese il tempo di trovare e sostenere una
richiesta esistente, il che è un segnale forte di domanda durevole e ponderata. Cento ticket di
supporto sullo stesso divario sottostante, presentati nello stesso periodo, probabilmente
rappresentano utenti che sbattono contro un muro nel momento, alcune delle quali dimenticherebbero
del tutto una volta passata la frizione immediata. Trattare i due come segnale equivalente di
&amp;quot;cento persone lo vogliono&amp;quot; sovrappesa il volume di ticket, perché i ticket sono economici da
generare e i voti no.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bacheca richieste&lt;/th&gt;
&lt;th&gt;Ticket di supporto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Richiede iniziativa per presentare&lt;/td&gt;
&lt;td&gt;Ne richiede quasi nessuna&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cattura domanda ponderata e durevole&lt;/td&gt;
&lt;td&gt;Cattura frustrazione nel momento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sbilanciata verso utenti coinvolte e pazienti&lt;/td&gt;
&lt;td&gt;Cattura utenti che non userebbero mai la bacheca&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Un conteggio voti è un vero segnale di impegno&lt;/td&gt;
&lt;td&gt;Un conteggio ticket riflette frizione, non sempre desiderio&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Cosa significa quando una funzionalità ha ticket di supporto ma quasi nessun voto in bacheca?&lt;/h2&gt;
&lt;p&gt;Spesso, che la richiesta esiste ma le utenti che ci si imbattono non sanno che la bacheca esiste,
non credono che votare serva a qualcosa, o incontrano il problema troppo raramente per disturbarsi
a cambiare canale per registrarlo formalmente. Questa è esattamente la popolazione che una bacheca
richieste perde strutturalmente, e un conteggio voti basso qui è prova di un divario di
misurazione, non di domanda scarsa. Trattate un gruppo di ticket di supporto attorno a una
funzionalità mancante come un proprio segnale degno di essere registrato voi stessi in bacheca,
per conto delle utenti, invece di diffidare dei ticket, così da non restare invisibile a chi dà
priorità basandosi solo sui conteggi voti.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;La bacheca legge come bassa priorità:
&amp;quot;Export to CSV&amp;quot;: 4 voti in 6 mesi

Il supporto racconta una storia diversa:
&amp;quot;Export to CSV&amp;quot;: 31 ticket nello stesso periodo, ognuno
da un account diverso, ognuno chiuso con &amp;quot;non
attualmente supportato, passeremo il feedback&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Un picco nei ticket di supporto significa sempre che il problema sottostante è una funzionalità mancante?&lt;/h2&gt;
&lt;p&gt;No, ed è qui che i due canali possono ingannare nella direzione opposta. Un picco di ticket è
altrettanto spesso causato da un&amp;#39;interfaccia confusa attorno a una funzionalità già esistente, da un
bug, o da un cambiamento uscito senza spiegazione adeguata, nessuno dei quali si risolve costruendo
qualcosa di nuovo. Leggere ogni picco di ticket come &amp;quot;le utenti vogliono una funzionalità che non
abbiamo&amp;quot; produce una roadmap piena di cose che erano in realtà divari di documentazione o problemi
di usabilità travestiti. Il ticket di supporto vi dice dove sta la frizione; non vi dice da solo se
la soluzione è una nuova funzionalità, un cambio di interfaccia, o un articolo di aiuto migliore, e
confondere le due cose spreca tempo di ingegneria sulla soluzione sbagliata.&lt;/p&gt;
&lt;h2&gt;Come dovrebbero essere combinati davvero i due segnali quando si decide cosa costruire?&lt;/h2&gt;
&lt;p&gt;Usate i ticket per trovare dove sta la frizione, e usate la bacheca richieste, più il contatto
diretto dove la bacheca è scarna, per confermare come appare davvero il risultato desiderato. Un
gruppo di ticket identifica un problema reale e sentito; raramente specifica la soluzione con
precisione sufficiente per costruirci contro, perché un&amp;#39;utente frustrata in una conversazione di
supporto descrive sintomi, non specifiche. La bacheca richieste, quando ha abbastanza voti sullo
stesso problema sottostante, tende a portare più del dettaglio di &amp;quot;cosa soddisferebbe davvero
questo&amp;quot;, perché scrivere una richiesta è già un atto di specificare cosa si vuole, non solo
segnalare cosa non va.&lt;/p&gt;
&lt;h2&gt;Le agenti di supporto dovrebbero registrare i ticket come richieste di funzionalità loro stesse?&lt;/h2&gt;
&lt;p&gt;Sì, ed è la correzione a maggior leva singola per il divario tra i due canali. Un&amp;#39;agente che
riconosce un ticket come una richiesta di funzionalità travestita, invece di limitarsi a risolverlo
e andare avanti, può registrarlo in bacheca per conto della cliente, il che chiude direttamente il
divario di misurazione invece di richiedere che la cliente scopra e usi un secondo canale. Questo
funziona solo se registrarlo richiede secondi, non minuti, per l&amp;#39;agente, così che la frizione di
farlo sia inferiore alla frizione di chiudere semplicemente il ticket e passare al successivo.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;I voti delle richieste di funzionalità dovrebbero mai essere scontati se vengono tutti da un solo account o team?&lt;/strong&gt;
Sì, pesate per account o organizzazioni distinte invece che per conteggio grezzo di voti, perché
cinque voti da cinque persone della stessa azienda rappresentano le priorità di una cliente, non
cinque conferme indipendenti di domanda.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vale la pena costruire una funzionalità che compare molto nei ticket ma ha quasi nessun voto?&lt;/strong&gt;
Spesso sì, purché il volume di ticket venga genuinamente da account distinti e il bisogno
sottostante sia confermato invece che assunto; trattate il basso conteggio voti come un artefatto
di misurazione del costo di attivazione della bacheca, non come prova che la domanda non sia reale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come si distingue a colpo d&amp;#39;occhio un ticket di confusione UI da un genuino ticket di funzionalità mancante?&lt;/strong&gt;
Guardate se la risoluzione consiste nello spiegare una capacità esistente o nello scusarsi per una
mancante. Un pattern di risoluzioni &amp;quot;oh, in realtà è proprio lì&amp;quot; indica un problema di interfaccia
o scopribilità; un pattern di &amp;quot;non lo supportiamo ancora&amp;quot; indica un divario reale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Questa distinzione conta altrettanto con un volume di supporto molto piccolo?&lt;/strong&gt;
Meno meccanicamente, dato che una manciata di ticket è facile da leggere individualmente senza
bisogno di analisi aggregata, ma il bias sottostante, i ticket sovrarappresentano utenti frustrate
e sottorappresentano quelle pazienti, è presente a qualsiasi scala e vale la pena tenerlo a mente
anche quando leggete ogni ticket voi stessi.&lt;/p&gt;
</content:encoded></item><item><title>Tag git, release e il tuo changelog</title><link>https://changeloop.dev/blog/it/git-tags-releases-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/git-tags-releases-changelog/</guid><description>Un tag git, una release e una voce di changelog sono tre registrazioni di un evento. Confonderli fa deragliare il changelog. Come farli combaciare.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un tag git, una release e una voce di changelog sono tre registrazioni diverse dello stesso
evento, e confonderli fa deragliare silenziosamente un changelog da ciò che è stato davvero
rilasciato. Un tag marca un commit. Una release impacchetta quel tag con artefatti e una
descrizione. Una voce di changelog spiega, in termini che una lettrice fuori dal repository può
usare, cosa è cambiato. Di solito accadono vicini nel tempo, ed è proprio per questo che è facile
trattarli come un unico passaggio invece di tre, ed è proprio per questo che il divario diventa
visibile solo mesi dopo, quando qualcuno chiede &amp;quot;cosa è stato rilasciato nella v2.4&amp;quot; e la risposta
onesta richiede una vera ricerca.&lt;/p&gt;
&lt;h2&gt;Qual è la differenza reale tra i tre?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Registrazione&lt;/th&gt;
&lt;th&gt;Vive in&lt;/th&gt;
&lt;th&gt;Scritta per&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Tag git&lt;/td&gt;
&lt;td&gt;Il repository, come riferimento&lt;/td&gt;
&lt;td&gt;Chi fa checkout di quel commit esatto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Release&lt;/td&gt;
&lt;td&gt;L&amp;#39;host del codice (GitHub, GitLab)&lt;/td&gt;
&lt;td&gt;Chi scarica una build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voce di changelog&lt;/td&gt;
&lt;td&gt;Il changelog del prodotto stesso&lt;/td&gt;
&lt;td&gt;Chi usa il prodotto, non solo il repo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Un tag è il più meccanico dei tre: &lt;code&gt;git tag v2.4.0&lt;/code&gt; e basta, senza alcun requisito che qualcosa
spieghi cosa contiene. Una release aggiunge una descrizione e, di solito, artefatti scaricabili, e
il suo pubblico rimane sviluppatrici che sanno cos&amp;#39;è una pagina di release. Una voce di changelog
è l&amp;#39;unica delle tre scritta per una lettrice che potrebbe non aprire mai il repository, motivo per
cui è quella che richiede più attenzione editoriale e quella più facilmente saltata sotto pressione
di scadenze.&lt;/p&gt;
&lt;h2&gt;Ogni tag git ha bisogno di una voce di changelog?&lt;/h2&gt;
&lt;p&gt;No, e trattarli come uno a uno è un errore comune. Un tag può segnare una milestone interna, una
release candidate, o un hotfix che non raggiunge mai la maggior parte delle utenti; nessuno di
questi ha necessariamente bisogno di una voce pubblica. Il test è lo stesso che decide se qualcosa
appartiene affatto a un changelog: se un&amp;#39;utente o chi chiama lo noterebbe o gliene importerebbe. La
maggior parte dei tag passa questo test. Alcuni, come un tag creato solo per innescare una pipeline
CI, mai.&lt;/p&gt;
&lt;h2&gt;Ogni voce di changelog ha bisogno del proprio tag?&lt;/h2&gt;
&lt;p&gt;Non sempre, ed è qui che i team che fanno deploy continuo divergono dai team che rilasciano pacchetti
versionati. Un prodotto SaaS che fa più deploy al giorno può raggruppare più deploy sotto una voce
di changelog datata senza un tag 1:1 per ogni deploy; una libreria pubblicata in un registro di
pacchetti ha di solito bisogno di un tag per versione pubblicata. I moduli Go e Swift Package Manager
risolvono le versioni direttamente dai tag; su npm o PyPI è il registro a conservare la versione
pubblicata, e il tag è il modo in cui chiunque riconduce quella versione al suo sorgente. Un repository con
più pacchetti versionati in modo indipendente deve deciderlo per pacchetto, non una volta sola per
tutto il repo; &lt;a href=&quot;https://changeloop.dev/blog/it/monorepo-changelogs/&quot;&gt;changelog nei monorepo&lt;/a&gt; copre come i prefissi dei
tag e l&amp;#39;ambito del changelog dovrebbero seguire i confini dei pacchetti, non delle cartelle.
&lt;a href=&quot;https://changeloop.dev/blog/it/semantic-versioning-changelog/&quot;&gt;Semantic versioning e il tuo changelog&lt;/a&gt;
copre come il numero di versione stesso dovrebbe mappare sulle categorie del changelog; i tag sono
il meccanismo che rende un numero di versione verificabile contro il codice reale.&lt;/p&gt;
&lt;h2&gt;Come dovrebbe relazionarsi una descrizione di release con la voce di changelog?&lt;/h2&gt;
&lt;p&gt;Possono essere lo stesso testo, ma solo se il pubblico di entrambi è davvero lo stesso, il che è
più raro di quanto sembri. Una pagina di release su un host di codice viene letta quasi
esclusivamente da sviluppatrici; se un prodotto ha anche utenti non tecnici che leggono il
changelog, duplicare la descrizione della release parola per parola manda termini interni e una
formulazione orientata al codice a una lettrice che aveva bisogno della versione in linguaggio
semplice. Lo schema più pulito: scrivere la voce di changelog come l&amp;#39;artefatto principale
orientato alla lettrice, e lasciare che la descrizione della release la colleghi oppure mantenga
un riassunto più breve e tecnico per il pubblico già a suo agio lì.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Release v2.4.0 (GitHub, per sviluppatrici)
Aggiorna la pipeline dei report al nuovo motore di aggregazione. Vedi
il changelog per il riassunto orientato al cliente:
https://example.com/changelog#v2.4.0

## 2026-09-07 (Changelog, orientato al cliente)
### Added
- I report ora si caricano in meno di un secondo, anche per account
  con più di un milione di righe.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Stessa release, due documenti, ognuno con la propria formulazione per la propria lettrice.&lt;/p&gt;
&lt;h2&gt;Da dove viene davvero la voce di changelog?&lt;/h2&gt;
&lt;p&gt;Da due punti di partenza, e la maggior parte delle pipeline reali è un misto di entrambi. Può
essere generata dai messaggi di commit al momento del tag, il che è veloce e non perde mai una
pull request unita; &lt;a href=&quot;https://changeloop.dev/blog/it/conventional-commits-changelog/&quot;&gt;dai conventional commit al changelog&lt;/a&gt;
copre quella pipeline per intero. Oppure può essere scritta a mano, separata dal tag, sincronizzata
con il momento in cui una funzionalità è considerata pronta invece che con il momento in cui il
codice viene unito. Le voci generate sono coerenti ma ereditano ogni messaggio di commit vago; le
voci scritte a mano sono più chiare ma richiedono qualcuno che le scriva davvero. La maggior parte
dei team che automatizza mantiene comunque un leggero passaggio di editing sul testo generato
prima che diventi la voce pubblica, la stessa disciplina che raccomanda &lt;a href=&quot;https://changeloop.dev/blog/it/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog, in pratica&lt;/a&gt;,
indipendentemente da dove sia originariamente venuto il testo grezzo.&lt;/p&gt;
&lt;h2&gt;Cosa si rompe quando i tre si desincronizzano?&lt;/h2&gt;
&lt;p&gt;La fiducia in quello che la lettrice ha controllato per prima. Un tag che esiste senza una voce di
changelog corrispondente sembra, dal lato di chi legge il changelog, che quella settimana non sia
successo nulla. Una voce di changelog senza tag o release corrispondente rende impossibile per chi
sta facendo debug di un problema in produzione fare checkout del codice esatto che era live quando
è stata pubblicata una voce. La soluzione non è l&amp;#39;automazione perfetta, è un&amp;#39;unica fonte di verità
per la corrispondenza: un posto, anche solo la checklist stessa del processo di release, che dica
che un cambiamento rilasciabile riceve tutti e tre, nello stesso commit o pull request che lo
introduce.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Le voci di changelog dovrebbero essere generate automaticamente dai tag git?&lt;/strong&gt;
Possono essere un punto di partenza, ma un tag da solo non porta nessuna descrizione orientata alla
lettrice, solo un intervallo di commit. La generazione automatizzata deve leggere i messaggi di
commit dentro quell&amp;#39;intervallo, non solo l&amp;#39;esistenza del tag, per produrre qualcosa di utilizzabile.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se non taggiamo ogni release?&lt;/strong&gt;
Allora la voce di changelog diventa la registrazione principale, e dovrebbe comunque portare una
data e, se il prodotto ne ha una, un numero di versione, così la voce resta qualcosa a cui una
lettrice può fare riferimento più tardi anche senza un tag corrispondente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I tag pre-release (come &lt;code&gt;v2.4.0-rc.1&lt;/code&gt;) dovrebbero avere voci di changelog?&lt;/strong&gt;
In generale no. Una release candidate è per test interni o beta, e una voce di changelog per essa
insegna alle lettrici ad aspettarsi voci per versioni che potrebbero non essere mai rilasciate così
come descritte. Riserva le voci ai tag che raggiungono la disponibilità generale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una singola voce di changelog può coprire più tag git?&lt;/strong&gt;
Sì, e spesso dovrebbe per i team che taggano frequentemente. Raggruppa tag correlati sotto una voce
datata che descriva il cambiamento netto, invece di pubblicare una voce sottile per tag che
frammenta una funzionalità su più letture.&lt;/p&gt;
</content:encoded></item><item><title>Changelog di API interne: cosa cambia per l&apos;altro team</title><link>https://changeloop.dev/blog/it/internal-api-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/internal-api-changelog/</guid><description>Un changelog di API pubblica ha un pubblico che non puoi contattare. Uno interno ha un pubblico a due piani di distanza, e questo cambia cosa gli si deve.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ogni altro articolo di questo hub presuppone che chi chiama un&amp;#39;API sia fuori dall&amp;#39;azienda: la
sviluppatrice di una cliente, una partner, qualcuno che ha trovato la documentazione da solo.
Molte API hanno un tipo di chiamante completamente diverso, un team nella stanza accanto o a due
piani di distanza, e questo cambia il calcolo di cosa un changelog gli deve, perché un messaggio
Slack lo raggiunge e di solito non viene mai aperto un ticket di supporto. La maggior parte dei
team ne conclude che le API interne non hanno bisogno di un changelog. Quello di cui hanno
davvero bisogno è uno diverso.&lt;/p&gt;
&lt;h2&gt;Cosa rende diverso il changelog di un&amp;#39;API interna da quello di una pubblica?&lt;/h2&gt;
&lt;p&gt;Il pubblico è raggiungibile direttamente, il che elimina il motivo principale per cui esistono la
maggior parte dei changelog di API pubbliche: trasmettere a chiamanti che non si possono
contattare individualmente. Il team proprietario di un&amp;#39;API interna di solito sa esattamente quali
altri team la chiamano, a volte fino al servizio specifico. Questo rende un messaggio mirato, non
un feed pubblico, la scelta predefinita naturale, ed è per questo che le API interne finiscono così
spesso senza alcun changelog: il team proprietario avvisa i due o tre team che ricorda, assumendo
che questo copra tutti.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Changelog di API pubblica&lt;/th&gt;
&lt;th&gt;Changelog di API interna&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Chi lo legge&lt;/td&gt;
&lt;td&gt;Qualsiasi chiamante esterno, per lo più irraggiungibile direttamente&lt;/td&gt;
&lt;td&gt;Un insieme piccolo e di solito noto di team interni&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canale predefinito&lt;/td&gt;
&lt;td&gt;Una pagina e un feed&lt;/td&gt;
&lt;td&gt;Un messaggio ai team chiamanti, idealmente anche una pagina&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rischio maggiore&lt;/td&gt;
&lt;td&gt;Un chiamante si perde completamente la voce&lt;/td&gt;
&lt;td&gt;Il team proprietario dimentica un chiamante di cui non ricorda l&amp;#39;esistenza&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cosa sostituisce &amp;quot;non sappiamo chi ci chiama&amp;quot;&lt;/td&gt;
&lt;td&gt;Niente; pubblicare ampiamente&lt;/td&gt;
&lt;td&gt;Un registro reale dei chiamanti, tenuto aggiornato&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Perché &amp;quot;avviseremo semplicemente i team che ci chiamano&amp;quot; fallisce?&lt;/h2&gt;
&lt;p&gt;Perché l&amp;#39;insieme dei chiamanti non è mai così piccolo o statico come lo ricorda il team
proprietario. Un servizio costruito per un consumatore guadagna un secondo chiamante sei mesi
dopo, tramite un&amp;#39;integrazione che nessuno ha annunciato, e la lista mentale &amp;quot;chi ci chiama&amp;quot; del
team proprietario ora è sbagliata senza che nessuno se ne accorga. Il fallimento è ordinario e
comune, il risultato predefinito dell&amp;#39;affidarsi alla memoria invece che a un registro, non il
segno che qualcuno è stato disattento.
&lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;Cos&amp;#39;è un breaking change&lt;/a&gt; copre come decidere se un cambiamento di API
conta come rompente in primo luogo; il caso interno aggiunge una seconda domanda più difficile
sopra quella, ovvero sapere chi avvisare.&lt;/p&gt;
&lt;h2&gt;Un&amp;#39;API interna ha bisogno comunque di una pagina di changelog in stile pubblico?&lt;/h2&gt;
&lt;p&gt;Di solito sì, anche se il canale primario è diretto. Una pagina dà al messaggio diretto qualcosa a
cui collegarsi, così la notifica può essere breve (&amp;quot;breaking change su &lt;code&gt;/v2/accounts&lt;/code&gt;, dettagli
qui&amp;quot;) invece di provare a portare l&amp;#39;intera spiegazione in un messaggio di chat che scorrerà via.
Diventa anche ciò che un nuovo team, o uno che si è perso il messaggio diretto, può controllare
quando la sua integrazione si rompe e cerca di capire perché. La pagina non deve essere rifinita o
pubblica; deve essere collegabile e deve sopravvivere al thread Slack che l&amp;#39;ha annunciata.&lt;/p&gt;
&lt;h2&gt;Chi mantiene davvero l&amp;#39;elenco dei chiamanti?&lt;/h2&gt;
&lt;p&gt;Il team proprietario, e va trattato come un artefatto reale, non come conoscenza tribale. La
versione più economica è un file nel repository stesso dell&amp;#39;API, un breve elenco di servizi
consumatori con una responsabile per voce, aggiornato ogni volta che viene costruita una nuova
integrazione, la stessa disciplina di qualsiasi dichiarazione di dipendenza. L&amp;#39;alternativa,
chiedere in giro prima di ogni breaking change, funziona finché una volta qualcuno non si dimentica
di chiedere alla persona giusta, e un&amp;#39;API interna che si rompe silenziosamente per un team è un
incidente più piccolo di uno pubblico, ma resta un incidente, di solito scoperto dal reperibile di
quel team stesso piuttosto che dalla proprietaria dell&amp;#39;API.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# consumers.yml
- service: billing-service
  owner: &amp;quot;#team-billing&amp;quot;
  since: 2026-03-01
- service: reporting-pipeline
  owner: &amp;quot;#team-analytics&amp;quot;
  since: 2026-06-14
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Un file così trasforma &amp;quot;chi dobbiamo avvisare&amp;quot; da una domanda in una ricerca. Strumenti costruiti
esattamente per questo problema, come il &lt;a href=&quot;https://backstage.io/docs/features/software-catalog/system-model/&quot;&gt;catalogo servizi di
Backstage&lt;/a&gt;, modellano le API
come entità di prima classe con consumatori dichiarati per lo stesso motivo: una volta che
un&amp;#39;organizzazione ha abbastanza servizi interni, la memoria di nessuno su chi chiama cosa resta
accurata da sola, e qualcosa deve tenere il registro al suo posto. La &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;documentazione&lt;/a&gt; dello
strumento che già usate internamente è di solito il posto giusto da controllare prima di
costruirne uno su misura.&lt;/p&gt;
&lt;h2&gt;Cosa appartiene a una voce di changelog interna che una pubblica non avrebbe bisogno?&lt;/h2&gt;
&lt;p&gt;Più specificità operativa, perché chi legge è un&amp;#39;altra ingegnera che agirà su questo all&amp;#39;interno
della stessa infrastruttura, non lo leggerà come un riassunto. In quali ambienti è live il
cambiamento e quando, perché i servizi interni spesso vengono promossi attraverso stadi che un
chiamante pubblico non vede mai. Se il cambiamento richiede un aggiornamento di configurazione o
di libreria client lato consumatore, formulato come un comando se ne esiste uno. E, poiché i
chiamanti interni spesso possono coordinare la correzione direttamente con il team proprietario,
un contatto nominato invece di un canale di supporto: &amp;quot;avvisa @maria se questo rompe qualcosa&amp;quot; è
una riga perfettamente ragionevole in una voce interna e una strana in un changelog di API
pubblica.&lt;/p&gt;
&lt;h2&gt;Questo vale allo stesso modo per un changelog dentro un monorepo?&lt;/h2&gt;
&lt;p&gt;Acuisce lo stesso problema invece di sostituirlo. &lt;a href=&quot;https://changeloop.dev/blog/it/monorepo-changelogs/&quot;&gt;Changelog monorepo&lt;/a&gt;
copre quando un pacchetto ha bisogno del proprio changelog; un&amp;#39;API interna che è uno dei tanti
pacchetti in un monorepo ha comunque bisogno che i suoi consumatori siano tracciati esplicitamente,
perché condividere il repository con chi la chiama non significa che questi noteranno un
cambiamento a meno che qualcosa non glielo indichi. La vicinanza nel repo non è la stessa cosa
della vicinanza nell&amp;#39;attenzione.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Un&amp;#39;API solo interna ha bisogno di un changelog se ha un unico chiamante?&lt;/strong&gt;
A malapena, e un messaggio diretto a quell&amp;#39;unico team di solito basta. Il changelog si giustifica
appena c&amp;#39;è più di un chiamante, o appena l&amp;#39;elenco dei chiamanti ha sorpreso una volta il team
proprietario, perché quello è il segnale che la memoria da sola non è più affidabile.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I cambiamenti di API interni dovrebbero passare per la stessa revisione di quelli pubblici?&lt;/strong&gt;
La formulazione può essere più leggera, perché chi legge è una collega e non una chiamante
esterna, ma la decisione se un cambiamento è rompente merita la stessa cura in entrambi i casi.
Una chiamante interna ha comunque codice in produzione che dipende dal comportamento precedente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come si scopre chi chiama un&amp;#39;API interna se non è mai stato tracciato?&lt;/strong&gt;
I log del server o i dati di traffico di una service mesh sono la risposta onesta se non è mai
stato mantenuto un registro dei consumatori; tratta quella scoperta come il momento di iniziarne
uno, non come una pulizia una tantum.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un messaggio Slack basta, o un cambiamento interno ha comunque bisogno di una voce di changelog formale?&lt;/strong&gt;
Entrambi, per qualsiasi cosa non sia puramente additiva. Il messaggio è ciò che viene letto in
tempo; la voce è ciò che un team che indaga un problema settimane dopo, e non ha mai visto il
messaggio, può comunque trovare.&lt;/p&gt;
</content:encoded></item><item><title>Release note interne: chi altro deve sapere cosa è uscito</title><link>https://changeloop.dev/blog/it/internal-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/internal-release-notes/</guid><description>Supporto e vendite di solito scoprono un lancio da una cliente confusa. Le release note interne lo risolvono, con una forma diversa da quelle pubbliche.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ogni altro articolo di questo hub presuppone che chi legge una release note sia una cliente.
Supporto, vendite e customer success leggono anche loro, o ci provano, e la maggior parte scopre
cosa è uscito perché una cliente lo chiede per prima. Quest&amp;#39;ordine è invertito, ed è anche
l&amp;#39;impostazione predefinita nella maggior parte delle aziende, perché il processo di release finisce
nel momento in cui esce la nota rivolta ai clienti, e nessuno ha costruito un secondo passaggio, più
piccolo, per chi deve rispondere a domande su di essa un&amp;#39;ora dopo.&lt;/p&gt;
&lt;h2&gt;Cos&amp;#39;è una release note interna, e come si differenzia da una rivolta ai clienti?&lt;/h2&gt;
&lt;p&gt;È un documento più breve, scritto per persone che già conoscono a fondo il prodotto, che dice loro
cosa è cambiato e cosa fare al riguardo nel loro lavoro concreto. Un agente di supporto non ha
bisogno della cornice curata che usa un annuncio rivolto ai clienti; deve sapere come appare il
cambiamento nel prodotto in questo momento, quale sarà la domanda più probabile a riguardo, e se ci
sono ticket aperti coinvolti. Una nota rivolta ai clienti vende il cambiamento. Una interna equipaggia
qualcuno a gestirlo.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pubblico&lt;/th&gt;
&lt;th&gt;Cosa deve sapere&lt;/th&gt;
&lt;th&gt;Dove ne ha bisogno&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Supporto&lt;/td&gt;
&lt;td&gt;Cosa è cambiato nell&amp;#39;interfaccia, domande probabili, ticket aperti coinvolti&lt;/td&gt;
&lt;td&gt;Dove già cerca le risposte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendite&lt;/td&gt;
&lt;td&gt;Cosa sblocca per un affare, cosa non fa ancora&lt;/td&gt;
&lt;td&gt;Dove si prepara alle chiamate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer success&lt;/td&gt;
&lt;td&gt;Cosa dire alle clienti esistenti, e chi lo ha chiesto&lt;/td&gt;
&lt;td&gt;Dove pianifica i contatti&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direzione&lt;/td&gt;
&lt;td&gt;Cosa è uscito rispetto a quanto promesso, e quando&lt;/td&gt;
&lt;td&gt;Un riepilogo breve e ricorrente, non per ogni release&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Perché i team interni scoprono i lanci in ritardo?&lt;/h2&gt;
&lt;p&gt;Perché il processo di release di solito è costruito attorno a un solo artefatto, la nota rivolta ai
clienti o la voce di changelog, e si presuppone che tutto ciò che è interno segua dalla lettura di
quel documento. Non è così. Gli agenti di supporto sono occupati con il ticket che hanno davanti,
non a sfogliare un changelog in cerca di contesto, e una nota scritta per una cliente spesso omette
proprio il dettaglio operativo di cui ha bisogno un agente, come a quale piano è vincolata la
funzionalità o come appare il messaggio di errore quando fallisce. Quando una cliente chiede,
l&amp;#39;agente sta leggendo la stessa nota pubblica che la cliente ha appena letto, senza alcun vantaggio.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe dire una release note interna che una rivolta ai clienti non dice?&lt;/h2&gt;
&lt;p&gt;I dettagli operativi che una nota rivolta ai clienti lascia fuori di proposito. Quali piani o
account ce l&amp;#39;hanno. Come appare quando qualcosa va storto, e cosa dire a una cliente che ci si
imbatte. Se chiude qualche richiesta o ticket aperto, e quali, così un agente che lavora su un
ticket collegato sa di doverlo controllare. Chi nel team se ne assume la responsabilità se una
domanda va oltre quanto copre la nota. Nulla di tutto questo appartiene alla versione rivolta ai
clienti, scritta per essere letta una volta da qualcuno fuori dall&amp;#39;azienda; tutto questo è proprio
ciò di cui ha bisogno chi risponde alla stessa domanda quaranta volte a settimana.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Nota interna: esportazione CSV in blocco (esce 08-09-2026)

- Limitata ai piani Team ed Enterprise. Free e Pro non vedono
  cambiamenti.
- Errore comune: le esportazioni oltre 50k righe vanno in timeout;
  problema noto, correzione tracciata separatamente. Dire alla
  cliente di filtrare per intervallo di date.
- Chiude 14 richieste aperte etichettate `bulk-export`. Template
  di risposta nel documento condiviso.
- Responsabile: team platform, #platform-eng per tutto ciò che
  va oltre questa nota.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quattro righe che un agente di supporto può usare subito, nessuna delle quali apparterebbe alla
voce pubblica del changelog per la stessa funzionalità.&lt;/p&gt;
&lt;h2&gt;Chi dovrebbe scriverla, e quando?&lt;/h2&gt;
&lt;p&gt;Chi scrive la nota rivolta ai clienti di solito è la persona giusta, perché ha già tutto il
contesto, ma dovrebbe essere un passaggio breve e separato invece di provare a far servire un solo
documento a entrambi i pubblici. Unirle produce una nota rivolta ai clienti appesantita da dettagli
interni, oppure una nota interna troppo curata per essere davvero utile, ed è più veloce nella
pratica scrivere due documenti brevi che negoziare un documento solo perché serva due pubblici alla
volta. Il tempismo conta più dell&amp;#39;autorship: la nota interna deve uscire prima di quella rivolta ai
clienti, anche solo di qualche ora, così il supporto non scopre mai un cambiamento nello stesso
posto di una cliente.&lt;/p&gt;
&lt;h2&gt;Dove dovrebbe stare perché il supporto la trovi davvero nel momento di un ticket?&lt;/h2&gt;
&lt;p&gt;Dove il team già cerca le cose quando arriva un ticket, non in un changelog separato che nessuno
ha motivo di aprire di propria iniziativa. Un team di supporto che usa una base di conoscenza
condivisa ha bisogno della nota lì, collegata da dove i ticket su quella parte del prodotto sono già
etichettati. Un team che vive in un canale condiviso ne ha bisogno pubblicata lì, cercabile, nel
momento in cui è rilevante, invece che sepolta in un riepilogo quotidiano che sfogliano una volta.
Lo schema rivolto ai clienti di &lt;a href=&quot;https://changeloop.dev/blog/it/product-update-email/&quot;&gt;notifica mirata contro digest&lt;/a&gt; si
applica anche qui: una nota interna su un cambiamento specifico e imminente dovrebbe raggiungere
direttamente il team, non aspettare un riepilogo settimanale che arriva dopo che il primo ticket
esiste già.&lt;/p&gt;
&lt;h2&gt;Serve lo stesso rigore di revisione di quella esterna?&lt;/h2&gt;
&lt;p&gt;Meno, ed è voluto. Una nota rivolta ai clienti rappresenta l&amp;#39;azienda pubblicamente e merita un
passaggio di editing accurato; una nota interna esiste per essere veloce e concreta, e sottoporla
allo stesso standard di rifinitura è di solito proprio ciò che porta i team a smettere di scriverla
del tutto. Una nota interna rapida e un po&amp;#39; grezza che esce un&amp;#39;ora prima del lancio batte una
rifinita che arriva il giorno dopo, quando il primo ticket di supporto è già arrivato confuso.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Le release note interne dovrebbero passare per lo stesso processo di approvazione di quelle rivolte ai clienti?&lt;/strong&gt;
No. Un passaggio più leggero e veloce è proprio l&amp;#39;obiettivo. Richiedere la stessa revisione trasforma
una nota interna dello stesso giorno in una della settimana successiva, quando il supporto ha già
risposto alla domanda senza di essa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chi è responsabile delle release note interne se non c&amp;#39;è un ruolo dedicato alla comunicazione interna?&lt;/strong&gt;
Chi scrive la nota rivolta ai clienti, come secondo passaggio breve subito dopo. Non serve una
responsabile separata, solo l&amp;#39;abitudine di non trattare la nota rivolta ai clienti come l&amp;#39;unico
artefatto che produce una release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le release note interne hanno bisogno di un proprio changelog o archivio?&lt;/strong&gt;
Un posto cercabile batte un archivio cronologico che nessuno scorre. Se il supporto ha già una base
di conoscenza, la nota appartiene lì, etichettata alla funzionalità, invece che in un changelog
interno separato che aiuta solo chi già sa la data in cui è uscita.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è il rischio di saltare le release note interne per i cambiamenti piccoli?&lt;/strong&gt;
I cambiamenti piccoli sono proprio quelli per cui il supporto riceve domande senza preavviso, perché
un cambiamento piccolo raramente riceve un annuncio a livello aziendale. La dimensione della release
note dovrebbe scalare con la dimensione del cambiamento; non dovrebbe mai scendere a zero solo
perché il cambiamento era minore.&lt;/p&gt;
</content:encoded></item><item><title>Changelog nei monorepo: uno solo, o uno per pacchetto?</title><link>https://changeloop.dev/blog/it/monorepo-changelogs/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/monorepo-changelogs/</guid><description>Un monorepo può avere un changelog per tutto il repo o uno per pacchetto, e scegliere male rende ogni release troppo confusa da leggere o troppo dispersa.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un monorepo ospita più cose rilasciabili separatamente in un solo repository, e un changelog deve
prima rispondere a una domanda: al lettore interessa il repo, o gli interessa un pacchetto
specifico al suo interno? La maggior parte dei team non lo decide mai apposta. Iniziano con un
changelog perché c&amp;#39;è un repo, aggiungono pacchetti via via, e finiscono con un log dove chi usa la
CLI deve scorrere quaranta voci del backend che non gli interessano per trovare quella che ha
rilasciato la sua correzione. Ciò che decide la forma giusta non è la struttura del repository, ma
chi legge il log e cosa già sa di cercare.&lt;/p&gt;
&lt;h2&gt;Cosa rende diverso il changelog di un monorepo da quello di un repo singolo?&lt;/h2&gt;
&lt;p&gt;Un changelog di repo singolo ha un pubblico implicito: chiunque usi l&amp;#39;unica cosa che quel repo
costruisce. Il pubblico di un monorepo si divide per pacchetto, e i pacchetti nello stesso repo
spesso vengono rilasciati con calendari diversi, a consumatori diversi, con livelli di stabilità
diversi. Una libreria pubblicata in un registro e uno strumento amministrativo interno possono
convivere nello stesso monorepo e non avere quasi nulla in comune per chi legge il changelog.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Forma del repo&lt;/th&gt;
&lt;th&gt;Lettore tipico&lt;/th&gt;
&lt;th&gt;Changelog adatto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Una singola app rilasciabile&lt;/td&gt;
&lt;td&gt;Chiunque usi il prodotto&lt;/td&gt;
&lt;td&gt;Un log, per tutto il repo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workspace di librerie (più pacchetti pubblicati)&lt;/td&gt;
&lt;td&gt;Chi dipende da un pacchetto specifico&lt;/td&gt;
&lt;td&gt;Un log per pacchetto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App più strumenti interni&lt;/td&gt;
&lt;td&gt;Due pubblici diversi senza sovrapposizione&lt;/td&gt;
&lt;td&gt;Diviso per pubblico, non per cartella&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App più il proprio SDK&lt;/td&gt;
&lt;td&gt;Utenti del prodotto, e integratori dell&amp;#39;SDK&lt;/td&gt;
&lt;td&gt;Due log: uno per il prodotto, uno per l&amp;#39;SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Ogni pacchetto ha bisogno del proprio changelog?&lt;/h2&gt;
&lt;p&gt;Solo quelli con un pubblico indipendente. Un pacchetto pubblicato in un registro ha bisogno del
proprio log, perché chi lo installa non ha motivo di leggere altro nel repo, e gli
strumenti di rilascio per monorepo come &lt;a href=&quot;https://lerna.js.org/&quot;&gt;Lerna&lt;/a&gt; e Changesets scrivono un
&lt;code&gt;CHANGELOG.md&lt;/code&gt; per pacchetto, accanto al suo &lt;code&gt;package.json&lt;/code&gt;. Un&amp;#39;utility interna con un solo consumatore, l&amp;#39;app già presente
nello stesso repo, non ha bisogno di un log separato; incorporare i suoi cambiamenti nelle voci di
quell&amp;#39;app è più utile di un secondo file che nessuno fuori dal team apre.&lt;/p&gt;
&lt;p&gt;Il test è lo stesso che decide se una voce qualsiasi appartiene a un changelog: il lettore lo
noterebbe o gli interesserebbe, e può agire sapendolo. Applicalo per pacchetto, non per cartella, e
un repo con dodici pacchetti può finire con due changelog veri e dieci pacchetti che semplicemente
non ne hanno bisogno.&lt;/p&gt;
&lt;h2&gt;Come si sa quale pacchetto ha causato quale voce di changelog?&lt;/h2&gt;
&lt;p&gt;Etichetta ogni voce con il suo pacchetto nel momento in cui viene scritta, non dopo, ispezionando
quali file ha toccato un commit. Un commit che corregge una libreria interna condivisa può produrre
una voce di changelog in ogni pacchetto che ne dipende, e i percorsi dei file da soli non possono
dire quale di queste voci a valle il lettore debba davvero vedere; solo una persona che decide
&amp;quot;questo è visibile a chi usa il pacchetto A e non a chi usa il pacchetto B&amp;quot; può farlo. I
&lt;a href=&quot;https://changeloop.dev/blog/it/conventional-commits-changelog/&quot;&gt;conventional commits&lt;/a&gt; aiutano qui meccanicamente,
nominando il pacchetto in ogni commit, ma lo scope produce comunque solo una bozza. La stessa
regola a due livelli di quell&amp;#39;articolo si applica per pacchetto: una bozza con lo scope giusto ha
comunque bisogno di un passaggio umano prima di essere scritta per il lettore reale di quel
pacchetto.&lt;/p&gt;
&lt;h2&gt;Cosa serve a un changelog condiviso che uno di repo singolo non richiede?&lt;/h2&gt;
&lt;p&gt;Un&amp;#39;etichetta di pacchetto su ogni voce, all&amp;#39;inizio, prima della descrizione, così chi scorre il log
può saltare in un solo passaggio tutto ciò che non lo riguarda. Senza quell&amp;#39;etichetta, un log
condiviso si legge come un feed casuale, e chi si interessa a un pacchetto non ha modo di filtrarlo
se non memorizzare quali righe contano, cosa che nessuno fa dopo la prima settimana.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## 2026-09-07

### [cli] Aggiunto
- `acme push --dry-run` mostra cosa verrebbe inviato senza
  inviarlo davvero.

### [core] Corretto
- Il backoff dei retry non si azzera più con una richiesta
  riuscita che restituisce un corpo vuoto.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Due voci, due pubblici, un&amp;#39;occhiata per distinguerle. Un flusso in stile
&lt;a href=&quot;https://github.com/changesets/changesets/blob/main/docs/intro-to-using-changesets.md&quot;&gt;Changesets&lt;/a&gt;
integra questa etichettatura direttamente nel processo di release: chi contribuisce scrive una nota
breve, con lo scope del pacchetto, insieme alla propria modifica, e lo strumento assembla i
changelog per pacchetto e i salti di versione da quelle note al momento della release, invece di
provare a ricostruire i confini dei pacchetti a posteriori da una cronologia di commit unificata.&lt;/p&gt;
&lt;h2&gt;Come si intreccia il versioning con un changelog di monorepo?&lt;/h2&gt;
&lt;p&gt;I pacchetti versionati in modo indipendente hanno bisogno del proprio changelog perché hanno un
proprio numero di versione, e un changelog condiviso non può esprimere &amp;quot;il pacchetto A è passato da
2.1 a 2.2 mentre il pacchetto B è rimasto a 1.4&amp;quot; senza diventare due log dentro un file.
&lt;a href=&quot;https://changeloop.dev/blog/it/semantic-versioning-changelog/&quot;&gt;Semantic versioning e il tuo changelog&lt;/a&gt; copre come un
numero di versione dovrebbe mappare sulle categorie del changelog; in un monorepo quella mappatura
va applicata per pacchetto, perché un breaking change in un pacchetto non lo è per un pacchetto
gemello che non ne dipende.&lt;/p&gt;
&lt;p&gt;Un repo che rilascia un prodotto come un&amp;#39;unica unità rilasciabile, anche se costruito da molti
pacchetti interni, non ha questo problema: i pacchetti condividono la versione perché vengono
sempre rilasciati insieme, e un changelog unico è corretto.&lt;/p&gt;
&lt;h2&gt;Come si inseriscono i tag git in un monorepo?&lt;/h2&gt;
&lt;p&gt;Vale la stessa regola di &lt;a href=&quot;https://changeloop.dev/blog/it/git-tags-releases-changelog/&quot;&gt;tag git, release e il tuo changelog&lt;/a&gt;,
applicata per pacchetto: un pacchetto con versione propria ha bisogno del proprio prefisso di tag,
tipicamente &lt;code&gt;nome-pacchetto@1.4.0&lt;/code&gt; invece di un &lt;code&gt;v1.4.0&lt;/code&gt; nudo che non può dire a quale pacchetto
appartiene. Un monorepo taggato solo con numeri di versione nudi non può poi rispondere &amp;quot;cosa c&amp;#39;era
in &lt;code&gt;core&lt;/code&gt; quando &lt;code&gt;cli&lt;/code&gt; ha rilasciato la 2.2&amp;quot;, perché nulla su disco registra a quale pacchetto
appartenesse davvero quel tag.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Serve un changelog separato per ogni pacchetto di un monorepo?&lt;/strong&gt;
Solo per i pacchetti con pubblico indipendente, di solito qualsiasi cosa pubblicata in un registro.
Un pacchetto con un solo consumatore interno già presente nello stesso repo può confluire nel log
di quel consumatore invece di mantenerne uno proprio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa etichetta una voce di changelog con il pacchetto giusto?&lt;/strong&gt;
Chi scrive la voce, nel momento in cui la scrive, non una scansione automatica dei percorsi di file
modificati. Un cambiamento in una libreria condivisa può produrre una voce diversa in ogni
pacchetto che ne dipende, e solo una persona può decidere cosa dovrebbe davvero dire ciascuna di
quelle voci a valle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un monorepo dovrebbe usare un unico numero di versione per tutto?&lt;/strong&gt;
Solo se ogni pacchetto viene sempre rilasciato insieme agli altri. Se i pacchetti vengono mai
pubblicati in modo indipendente, hanno bisogno di versioni indipendenti, e le versioni indipendenti
hanno bisogno di changelog indipendenti per avere senso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Uno strumento per il changelog di un monorepo sostituisce il passaggio di editing umano?&lt;/strong&gt;
No. Strumenti come Changesets automatizzano la raccolta e l&amp;#39;assemblaggio delle note per pacchetto al
momento della release; la nota in sé, scritta nel linguaggio del lettore invece che di chi
contribuisce, resta comunque compito di una persona, come in qualsiasi altra pipeline di changelog.&lt;/p&gt;
</content:encoded></item><item><title>Come annunciare una nuova funzionalità (senza silenzio)</title><link>https://changeloop.dev/blog/it/new-feature-announcement/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/new-feature-announcement/</guid><description>La maggior parte degli annunci muore in un canale che nessuno legge due volte. Dove annunciare, cosa dire per primo, e chi raggiungere per primo.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;La maggior parte degli annunci di funzionalità muore in un canale che nessuno legge due volte: un
tweet che scorre via, un&amp;#39;email del giorno del rilascio sepolta sotto le altre dodici ricevute da
un&amp;#39;iscritta quella settimana, un messaggio Slack in un canale che metà del team ha silenziato mesi
fa. La funzionalità è stata rilasciata. Quasi nessuno che l&amp;#39;avrebbe usata lo ha scoperto.
Risolvere questo ha meno a che fare con lo scrivere un annuncio migliore e più con lo scegliere il
canale giusto per la lettrice giusta, e raggiungere direttamente chi l&amp;#39;ha chiesta esplicitamente
invece di contare sul fatto che noti un annuncio generico.&lt;/p&gt;
&lt;h2&gt;Dove dovrebbe essere annunciata davvero una nuova funzionalità?&lt;/h2&gt;
&lt;p&gt;In più di un posto, perché &amp;quot;tutti leggono lo stesso canale&amp;quot; non è mai vero. Una voce di changelog
o feed serve la lettrice che controlla secondo i propri tempi e vuole il registro permanente e
datato. Un avviso in-app serve la lettrice che sta già usando il prodotto e userebbe la
funzionalità oggi stesso se sapesse che esiste. L&amp;#39;email serve la lettrice che non è attualmente
nel prodotto ma tornerebbe per l&amp;#39;aggiornamento giusto. I social servono la copertura oltre le
utenti esistenti, quasi senza targeting.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Canale&lt;/th&gt;
&lt;th&gt;Ideale per&lt;/th&gt;
&lt;th&gt;Debolezza&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Changelog / feed&lt;/td&gt;
&lt;td&gt;Il registro permanente; lettrici che controllano ai propri tempi&lt;/td&gt;
&lt;td&gt;Passivo; non fa nulla per chi non controlla mai&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avviso in-app&lt;/td&gt;
&lt;td&gt;Utenti già presenti che agirebbero oggi&lt;/td&gt;
&lt;td&gt;Non raggiunge chi non è connesso al momento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Utenti non attive che tornerebbero per questo&lt;/td&gt;
&lt;td&gt;Facile da seppellire sotto altra posta; serve un oggetto vero&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Social&lt;/td&gt;
&lt;td&gt;Copertura oltre le utenti attuali&lt;/td&gt;
&lt;td&gt;Quasi nessun targeting; vita breve&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Nessuno dei quattro basta da solo. &lt;a href=&quot;https://changeloop.dev/blog/it/what-is-a-changelog/&quot;&gt;Il changelog&lt;/a&gt; è l&amp;#39;unico documento che dovrebbe portare ogni
rilascio a prescindere dalla dimensione, perché è il registro a cui tutto il resto rimanda; gli
altri tre sono amplificazione aggiunta sopra, scelta in base a quanto è davvero grande la
funzionalità.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe dire per primo l&amp;#39;annuncio?&lt;/h2&gt;
&lt;p&gt;Il risultato, non il meccanismo. &amp;quot;Abbiamo aggiunto un layer di cache all&amp;#39;endpoint dei report&amp;quot;
descrive cosa ha costruito il team. &amp;quot;I report ora si caricano in meno di un secondo&amp;quot; descrive
cosa è cambiato per la lettrice, ed è la frase che porta al click, perché risponde a &amp;quot;cosa ci
guadagno&amp;quot; nella prima proposizione invece che nella terza. Il meccanismo appartiene alla voce di
changelog o alla pagina di dettaglio, non al titolo.&lt;/p&gt;
&lt;p&gt;Dati concreti prima degli aggettivi. &amp;quot;Un&amp;#39;esperienza report più veloce e potente&amp;quot; non dice alla
lettrice nulla su cui agire; &amp;quot;i report ora si caricano in meno di un secondo e si possono
filtrare per stato&amp;quot; le dice esattamente cosa è cambiato e cosa provare. La seconda versione
risulta anche più credibile, perché un&amp;#39;affermazione vaga suona esattamente come suona il testo di
marketing quando non c&amp;#39;è niente di concreto da dire.&lt;/p&gt;
&lt;h2&gt;In cosa differisce da un&amp;#39;email di aggiornamento prodotto?&lt;/h2&gt;
&lt;p&gt;Sovrapposti ma non identici. &lt;a href=&quot;https://changeloop.dev/blog/it/product-update-email/&quot;&gt;Email di aggiornamento prodotto&lt;/a&gt; copre
il canale email nello specifico, inclusi cadenza, oggetti, e quando un digest batte un invio
singolo. Un annuncio di nuova funzionalità è l&amp;#39;evento sottostante; l&amp;#39;email è uno dei quattro
canali sopra che potrebbe portarlo, scelto quando la funzionalità è abbastanza grande da
giustificare un invio dedicato invece di viaggiare nel prossimo digest. Una funzionalità piccola
si guadagna una voce di changelog e forse un avviso in-app. Una significativa si guadagna tutti e
quattro i canali, coordinati nel tempo.&lt;/p&gt;
&lt;h2&gt;Come si raggiungono le persone specifiche che l&amp;#39;hanno chiesta?&lt;/h2&gt;
&lt;p&gt;Questo è l&amp;#39;annuncio con il miglior rapporto tra sforzo e risultato, e quasi tutti i team lo
saltano. Se dieci clienti hanno chiesto una funzionalità per nome, quelle dieci persone meritano
una nota diretta e personale nel momento in cui viene rilasciata, indipendentemente da qualsiasi
annuncio più ampio in uscita. &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;Chiudere il ciclo di feedback con il cliente&lt;/a&gt;
copre la meccanica per intero; il riassunto qui è che funziona solo se la richiesta originale è
rimasta collegata a chi l&amp;#39;ha fatta, che è più un &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-tracking/&quot;&gt;problema di tracciamento&lt;/a&gt;
che un problema di annuncio. In changeloop, quando un feedback dal widget è diventato un issue GitHub
e la pull request mergiata lo chiude (&lt;code&gt;fixes #142&lt;/code&gt;), approvare la voce di changelog pubblica su
quell&amp;#39;issue il commento &amp;quot;Shipped — &lt;title&gt;&amp;quot;, una sola volta, con un link alla voce live, e chi ha
inviato il feedback vede la voce rilasciata nel widget. Nessuno deve ricordarsi di dirglielo. Gli
issue aperti a mano, e i repository GitLab o Bitbucket, non ricevono il commento.&lt;/p&gt;
&lt;h2&gt;Come si scrive la voce stessa?&lt;/h2&gt;
&lt;p&gt;La stessa disciplina di qualsiasi altra voce di note di rilascio: iniziare con cosa può fare ora
chi legge, seguire con la configurazione necessaria, saltare la giustificazione interna. &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;Come scrivere note di rilascio&lt;/a&gt;
copre il metodo completo; un annuncio di nuova funzionalità è il caso con la posta più alta,
perché è la voce con più probabilità di essere catturata in uno screenshot, inoltrata, e letta da
chi non ha mai visto il changelog del prodotto.&lt;/p&gt;
&lt;h2&gt;Quando non conviene annunciare ampiamente?&lt;/h2&gt;
&lt;p&gt;Quando la funzionalità è ancora in rollout verso un sottoinsieme di account, è davvero una beta, o
ha un prezzo o un blocco tale che nove lettrici su dieci di un annuncio ampio non potrebbero
ancora usarla. Un annuncio ampio per una funzionalità che nove lettrici su dieci non possono usare
si legge come un&amp;#39;esca, e brucia la fiducia nel prossimo annuncio più di quanto costruisca
entusiasmo in questo. La soluzione non è il silenzio, è la portata: informare direttamente gli
account idonei e trattenere i canali ampi finché la disponibilità non raggiunge l&amp;#39;annuncio.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ogni nuova funzionalità merita il proprio annuncio?&lt;/strong&gt;
Ognuna si guadagna una voce di changelog. Solo quelle abbastanza significative da cambiare come
qualcuno usa il prodotto, o quelle chieste esplicitamente per nome, si guadagnano i canali più
ampi come email o social.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è il canale migliore per una funzionalità piccola?&lt;/strong&gt;
Solo il changelog, più un avviso in-app se la funzionalità è scopribile dentro un flusso in cui
l&amp;#39;utente si trova già. Email e social valgono la pena per funzionalità che giustificano il
chiedere attenzione.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come si annuncia una funzionalità alle persone che l&amp;#39;hanno specificamente chiesta?&lt;/strong&gt;
Mantenere la richiesta collegata a chi l&amp;#39;ha fatta dal momento in cui viene registrata, poi
notificare individualmente al rilascio, separatamente da qualsiasi annuncio più ampio. Un&amp;#39;etichetta
di stato condivisa che chi ha chiesto può controllare da solo riduce anche quanti messaggi
individuali servono in primo luogo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un annuncio di funzionalità ha bisogno di uno screenshot?&lt;/strong&gt;
Per qualsiasi cosa visiva, sì; una funzionalità descritta ma non vista viene saltata molto più
spesso di una di cui le lettrici possono vedere un&amp;#39;anteprima. Per un&amp;#39;API o una capacità backend,
un breve esempio di codice svolge lo stesso lavoro di uno screenshot per un cambiamento UI.&lt;/p&gt;
</content:encoded></item><item><title>Release notes per app mobile: cosa taglia il limite</title><link>https://changeloop.dev/blog/it/mobile-app-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/mobile-app-release-notes/</guid><description>App Store e Play Store danno poche righe visibili e nessun link. Ciò che funziona in un changelog web si rompe con quel budget così ristretto.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tutto in questo hub su come scrivere release notes presuppone una pagina che controlli
completamente: qualsiasi lunghezza, link che funzionano, formattazione che si renderizza. Le
release notes di un&amp;#39;app mobile vivono dentro la scatola di qualcun altro. Apple concede circa
4.000 caratteri ma mostra solo le prime righe prima che venga toccato &amp;quot;altro&amp;quot;; Google concede uno
spazio simile con lo stesso problema effettivo di anteprima, e nessuna delle due piattaforme
renderizza un link cliccabile dentro il testo. Le regole di &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;come scrivere release notes che le
persone leggono davvero&lt;/a&gt; valgono ancora: dire cosa è
cambiato e cosa deve fare chi legge, ma lo spazio per farlo è una frazione di quello che consente
una pagina di changelog, e i tagli devono essere deliberati, non accidentali.&lt;/p&gt;
&lt;h2&gt;Cosa entra davvero nell&amp;#39;anteprima visibile?&lt;/h2&gt;
&lt;p&gt;Le prime una o due righe, circa 80-170 caratteri a seconda del dispositivo e della dimensione del
font, prima che chi legge debba toccare per espandere. Questo è l&amp;#39;intero budget per la parte della
release note che decide se qualcuno leggerà il resto, e significa che la frase più importante deve
venire per prima, non il numero di versione, non un saluto, non un&amp;#39;intestazione di categoria. Una
release note che inizia con &amp;quot;Novità di questa versione:&amp;quot; ha già speso un terzo del suo spazio
visibile in quattro parole che non dicono nulla a chi legge.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Piattaforma&lt;/th&gt;
&lt;th&gt;Limite totale approssimativo&lt;/th&gt;
&lt;th&gt;Anteprima effettiva prima di &amp;quot;altro&amp;quot;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;App Store (iOS)&lt;/td&gt;
&lt;td&gt;~4.000 caratteri&lt;/td&gt;
&lt;td&gt;2-3 righe, circa 80-170 caratteri&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Play&lt;/td&gt;
&lt;td&gt;~500 caratteri per lingua, alcuni campi più corti&lt;/td&gt;
&lt;td&gt;2-3 righe, simile a iOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entrambe&lt;/td&gt;
&lt;td&gt;Nessun link cliccabile nel campo release notes&lt;/td&gt;
&lt;td&gt;N/D&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;La regola &amp;quot;cosa puoi fare ora, cosa ti si deve&amp;quot; funziona ancora a questa lunghezza?&lt;/h2&gt;
&lt;p&gt;Sì, e diventa più rigida, non diversa. Una frase per voce, verbo per primo, senza premessa:
&amp;quot;Esporta i tuoi dati come CSV da Impostazioni.&amp;quot; batte &amp;quot;Abbiamo aggiunto la possibilità per gli
utenti di ora esportare i propri dati in formato CSV&amp;quot; usando un terzo delle parole per dire la
stessa cosa. Alla lunghezza di una pagina di changelog, una frase un po&amp;#39; prolissa costa a chi
legge mezzo secondo. Alla lunghezza di una release note mobile, la stessa prolissità può spingere
la frase interamente fuori dall&amp;#39;anteprima visibile, così chi legge non vede mai il verbo che
avrebbe detto cosa è cambiato.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Male, spreca l&amp;#39;anteprima sulla cornice:
&amp;quot;Siamo entusiasti di portarti un nuovo aggiornamento
pieno di miglioramenti! Continua a leggere per i dettagli.&amp;quot;

Bene, tutto il valore nella prima riga:
&amp;quot;Esporta i dati come CSV. La modalità scura ora rispetta
l&amp;#39;impostazione di sistema. Corretto un crash all&amp;#39;apertura
dei link condivisi.&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Cosa deve essere tagliato che una voce di changelog web normalmente terrebbe?&lt;/h2&gt;
&lt;p&gt;I link, per primi, perché nessuno dei due store li renderizza cliccabili, quindi un URL nel testo
è peso morto che chi legge dovrebbe ridigitare. Se la voce ha bisogno di una destinazione, di&amp;#39;
invece cosa toccare nell&amp;#39;app: &amp;quot;Vedi i nuovi filtri sotto Impostazioni &amp;gt; Ricerca&amp;quot; funziona; &amp;quot;Leggi
di più su example.com/blog/filtri&amp;quot; no, su questa superficie. Secondo, qualsiasi cosa condizionale
o specifica per un pubblico: un changelog web può dire &amp;quot;se usi l&amp;#39;API, questo ti riguarda&amp;quot;, ma un
elenco di store raggiunge ogni utente installato contemporaneamente, quindi una riga condizionale
si legge come rumore per il 95% a cui non si applica. Metti il dettaglio condizionale in un
messaggio in-app invece, attivato per gli account che riguarda davvero.&lt;/p&gt;
&lt;h2&gt;Ogni rilascio dovrebbe avere le proprie note, o va bene riutilizzare &amp;quot;correzioni di bug e miglioramenti delle prestazioni&amp;quot;?&lt;/h2&gt;
&lt;p&gt;Riutilizzalo per i rilasci che sono genuinamente questo, ma verifica quanto spesso è davvero vero.
&lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;Come scrivere release notes&lt;/a&gt; copre già perché quella frase
tradisce una nota scritta dall&amp;#39;interno invece che per chi legge; su mobile fa un danno doppio,
perché le release notes dello store sono uno dei pochi posti dove alcuni utenti vedono qualcosa tra
un aggiornamento e l&amp;#39;altro, e una lunga serie di &amp;quot;correzioni di bug e miglioramenti delle
prestazioni&amp;quot; si legge come se l&amp;#39;app non cambiasse, il che è un&amp;#39;impressione peggiore di nessuna
nota per quel periodo.&lt;/p&gt;
&lt;h2&gt;Le release notes influenzano se le persone aggiornano l&amp;#39;app?&lt;/h2&gt;
&lt;p&gt;Indirettamente, tramite la visibilità più che la persuasione. La maggior parte degli utenti
aggiorna automaticamente e non legge mai le note prima di aggiornare; le note contano di più per
la minoranza che controlla gli aggiornamenti manualmente, e per chi recensisce o fa stampa e
scorre lo storico di un elenco di store. Scrivere per quel pubblico più piccolo comunque ripaga,
perché un elenco con uno storico reale di voci specifiche e datate si legge come un&amp;#39;app mantenuta
attivamente, e un elenco con un anno di &amp;quot;correzioni di bug e miglioramenti delle prestazioni&amp;quot; no,
indipendentemente da quanto sia stato davvero rilasciato in quel periodo.&lt;/p&gt;
&lt;h2&gt;E un aggiornamento forzato, dove la nota deve spiegare perché l&amp;#39;utente non ha scelta?&lt;/h2&gt;
&lt;p&gt;Indica il motivo e la scadenza nella prima riga, prima di qualsiasi altra cosa, perché un
aggiornamento forzato è l&amp;#39;unico caso in cui chi legge è già infastidito prima di iniziare a
leggere. &amp;quot;Questo aggiornamento è necessario per continuare a sincronizzare i tuoi dati. Aggiorna
entro il [data] per evitare interruzioni.&amp;quot; dice cosa fare e perché in una sola frase; seppellire
quella motivazione sotto tre righe di note su funzionalità non correlate si legge come se l&amp;#39;app
stesse nascondendo la parte scomoda.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Le release notes mobile dovrebbero corrispondere al changelog web dello stesso rilascio?&lt;/strong&gt;
Coprire gli stessi cambiamenti sottostanti, ma non parola per parola. Il changelog web può
permettersi la spiegazione completa; la nota mobile ha bisogno degli stessi fatti compressi in una
frase con il verbo per primo, il che di solito significa che è una riscrittura, non una copia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vale la pena localizzare le release notes mobile per ogni lingua supportata?&lt;/strong&gt;
Sì, più che per un changelog web, perché l&amp;#39;elenco dello store è spesso l&amp;#39;unica superficie
localizzata che alcuni utenti vedono tra una sessione e l&amp;#39;altra, ed entrambe le piattaforme
supportano release notes per locale senza lavoro ingegneristico aggiuntivo oltre alla traduzione
stessa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quanto dovrebbe essere lunga una release note mobile se non c&amp;#39;è un limite che forza la brevità?&lt;/strong&gt;
Corta comunque. Il tetto di 4.000 caratteri su iOS è raramente il vincolo reale; lo è l&amp;#39;anteprima
di 2-3 righe, e scrivere oltre quello che quell&amp;#39;anteprima mostra significa solo che meno persone
leggono la parte che contava.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le release notes hanno bisogno del numero di versione nel testo visibile?&lt;/strong&gt;
No. Lo store mostra già il numero di versione accanto alle note. Ripeterlo dentro il testo spende
caratteri visibili per informazioni che chi legge ha già davanti.&lt;/p&gt;
</content:encoded></item><item><title>Dare priorità alle richieste che si accumulano</title><link>https://changeloop.dev/blog/it/prioritizing-feature-requests/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/prioritizing-feature-requests/</guid><description>Un backlog lascia la domanda difficile: quale richiesta esce per prima. I framework utili, dove ognuno si rompe e cosa nasconde il conteggio dei voti.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tracciare le richieste di funzionalità risolve dove vivono. Non risolve quale esce per prima, e
questa seconda domanda è quella su cui i team restano davvero bloccati. Un backlog con trecento
richieste raggruppate ed etichettate ha comunque bisogno di una regola decisionale, perché
&amp;quot;costruisci la cosa più richiesta&amp;quot; funziona solo finché due richieste sono vicine e una terza ha
una sostenitrice rumorosa, che è la maggior parte delle settimane. I framework qui sotto non sono
risposte in competizione alla stessa domanda. Ognuno si adatta a un tipo diverso di richiesta, e
usarne uno solo per tutte è di solito il vero errore.&lt;/p&gt;
&lt;h2&gt;Cosa rende diverso dare priorità alle richieste di funzionalità rispetto a una roadmap?&lt;/h2&gt;
&lt;p&gt;Una decisione di roadmap parte dalla strategia e chiede cosa costruire. Una decisione su una
richiesta di funzionalità parte da una domanda che esiste già e chiede se agire su di essa, e le
due tirano in direzioni diverse abbastanza spesso che una richiesta può avere molta domanda ed
essere comunque sbagliata da costruire, o avere poca domanda ed essere comunque utile perché
sblocca un account strategico. Trattare ogni richiesta come un voto di roadmap salta questo
controllo.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Cosa pesa&lt;/th&gt;
&lt;th&gt;Dove si rompe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Conteggio grezzo delle richieste&lt;/td&gt;
&lt;td&gt;Quante persone hanno chiesto&lt;/td&gt;
&lt;td&gt;Premia i nomi accattivanti sulla domanda reale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RICE&lt;/td&gt;
&lt;td&gt;Portata, impatto, fiducia, sforzo&lt;/td&gt;
&lt;td&gt;Serve stime che nessuno ha per una richiesta appena arrivata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ponderato per fatturato&lt;/td&gt;
&lt;td&gt;Chi ha chiesto, in base al valore dell&amp;#39;account&lt;/td&gt;
&lt;td&gt;Ignora richieste da account che non valgono ancora molto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voti pubblici&lt;/td&gt;
&lt;td&gt;Segnale visibile, basso sforzo&lt;/td&gt;
&lt;td&gt;Raggiunge solo utenti che già sanno dove guardare&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Cos&amp;#39;è RICE, e funziona per le richieste di funzionalità?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.intercom.com/blog/rice-simple-prioritization-for-product-managers/&quot;&gt;RICE&lt;/a&gt; valuta
un&amp;#39;idea su portata, impatto, fiducia e sforzo, poi divide i primi tre per il quarto per ottenere un
numero confrontabile. È stato costruito per idee di roadmap in cui un team crede già, dove la parte
difficile è confrontare scommesse diverse tra loro. Le richieste di funzionalità arrivano già con
un numero di portata, il conteggio di chi ha chiesto, che è più concreto della portata che di solito
ha un&amp;#39;idea di roadmap appena nata. Dove RICE va in tensione con una richiesta è su fiducia e
impatto: un team può essere sicuro che una richiesta sia reale e comunque non avere basi per sapere
quanto muoverà una metrica, perché &amp;quot;impatto&amp;quot; per una richiesta che ha già un nome e una traccia di
utenti reali è un tipo di stima diverso dall&amp;#39;impatto di un&amp;#39;idea che nessuno fuori dalla stanza ha
ancora visto.&lt;/p&gt;
&lt;p&gt;Usa RICE per le richieste che vengono prese seriamente in considerazione e non ancora decise. Non
applicarlo a ogni richiesta in arrivo; lo sforzo di valutazione si ripaga solo su quelle abbastanza
vicine da avere bisogno di uno spareggio.&lt;/p&gt;
&lt;h2&gt;Bisogna pesare per fatturato, o per chi ha chiesto?&lt;/h2&gt;
&lt;p&gt;Per chi ha chiesto, ma non solo per fatturato. Un account vicino al rinnovo, un account che ha già
fatto escalation, e un account la cui richiesta sblocca un affare in corso portano un&amp;#39;urgenza che
una cifra di fatturato piatta non cattura da sola, e una richiesta da una registrazione di prova può
comunque contare se blocca una decisione che presto diventa fatturato. La ponderazione per fatturato
è la più facile da calcolare tra queste, e proprio per questo la più facile su cui riporre troppa
fiducia: rimuove correttamente il rumore da account senza vera posta in gioco, e con la stessa
facilità può declassare una richiesta che porterebbe un account molto più grande ancora nella
pipeline.&lt;/p&gt;
&lt;h2&gt;Che ruolo giocano davvero i voti?&lt;/h2&gt;
&lt;p&gt;Un segnale economico e continuo per richieste che esistono già, e un pessimo modo per scoprire
quali richieste dovrebbero esistere in primo luogo. Un conteggio di voti raggiunge solo gli utenti
che hanno già trovato la richiesta e l&amp;#39;hanno ritenuta degna di un clic, il che significa che il
totale dei voti di una roadmap pubblica riflette tanto la visibilità quanto la domanda: una
richiesta vecchia vicino in cima alla lista continua ad accumulare voti in parte perché è facile da
trovare, e una richiesta più nuova e altrettanto reale parte da zero. L&amp;#39;articolo sulla
&lt;a href=&quot;https://changeloop.dev/blog/it/public-roadmap/&quot;&gt;roadmap pubblica&lt;/a&gt; sostiene di lasciare del tutto i voti fuori dalla roadmap. Tratta i voti
come un segnale che va raggruppato e pesato per recency, non come una classifica da costruire in
ordine.
&lt;a href=&quot;https://changeloop.dev/blog/it/feedback-signal-quality/&quot;&gt;Ticket di supporto vs. richieste&lt;/a&gt; copre l&amp;#39;altro punto cieco nei
conteggi voti: un divario reale può generare quasi nessun voto se le utenti che ci si imbattono non
trovano mai la bacheca, mentre compare rumorosamente nel supporto.&lt;/p&gt;
&lt;h2&gt;Quando vince la cliente più rumorosa, ed è un problema?&lt;/h2&gt;
&lt;p&gt;A volte, ed è un problema solo quando nessuno se ne accorge. Una cliente che fa escalation spesso,
scrive ticket dettagliati o ha una linea diretta con qualcuno del team vedrà le sue richieste
esaminate più in fretta di una cliente più silenziosa con una richiesta altrettanto valida, e un
processo di prioritizzazione che non lo verifica mai favorirà sistematicamente chi insiste di più,
non chi ha il caso più solido. Le clienti rumorose non sono il problema da correggere; le loro
richieste sono spesso genuinamente importanti. La correzione è un&amp;#39;abitudine: passare in rassegna il
backlog per origine periodicamente e verificare se lo stesso pugno di account spiega la maggior
parte di ciò che è stato rilasciato di recente, e chiedersi se corrisponde a dove sta davvero la
domanda.&lt;/p&gt;
&lt;h2&gt;Come si trasforma una decisione di prioritizzazione in una risposta?&lt;/h2&gt;
&lt;p&gt;Ogni decisione qui produce vincitrici e perdenti, ed entrambe meritano una risposta che nomini il
ragionamento reale, non solo un cambio di stato senza spiegazione. &lt;a href=&quot;https://changeloop.dev/blog/it/declining-feature-requests/&quot;&gt;Come rifiutare una richiesta di
funzionalità&lt;/a&gt; copre cosa dire a una richiesta che ha perso, in
un modo che mantiene intatta la relazione invece di leggersi come un rifiuto generico. Il lavoro di
raggruppamento ed etichettatura che rende possibile tutto questo è coperto in &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-tracking/&quot;&gt;tracciare le
richieste di funzionalità&lt;/a&gt;; la prioritizzazione funziona solo
su richieste già registrate e raggruppate abbastanza bene da poter essere confrontate.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Qual è il framework migliore per dare priorità alle richieste di funzionalità?&lt;/strong&gt;
Nessuno da solo. Usa i conteggi grezzi per trovare il segnale più rumoroso, RICE per confrontare una
breve lista di candidate serie, e un controllo su fatturato o account per individuare i casi in cui
una domanda silenziosa da un account strategico pesa più di un gruppo più rumoroso ma meno
importante.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le richieste di funzionalità dovrebbero essere prioritizzate come le idee di roadmap?&lt;/strong&gt;
No. Le idee di roadmap partono dalla strategia; le richieste di funzionalità partono da una domanda
che esiste già. Valutarle insieme fa sì che una scommessa strategica ben argomentata ma con poca
domanda esistente perda costantemente contro una richiesta che semplicemente ha più persone che
l&amp;#39;hanno chiesta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I voti su una roadmap pubblica riflettono accuratamente la domanda?&lt;/strong&gt;
Solo tra le persone che hanno già trovato la richiesta. Le richieste più vecchie e visibili
accumulano voti più in fretta indipendentemente da quanta domanda reale ci sia dietro una più nuova,
quindi tratta i totali dei voti come un segnale, raggruppato e pesato per recency, non come una
classifica da costruire in ordine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Con che frequenza andrebbero rivalutate le priorità delle richieste di funzionalità?&lt;/strong&gt;
Con un ciclo fisso, non solo quando qualcuno fa escalation. Una revisione mensile o trimestrale che
riraggruppa le richieste e ricontrolla la ponderazione individua le derive, come un pugno di account
che domina ciò che viene rilasciato, che un processo puramente reattivo non fa mai emergere da solo.&lt;/p&gt;
</content:encoded></item><item><title>Release notes enterprise: cosa cambia per un solo account</title><link>https://changeloop.dev/blog/it/private-release-notes-enterprise/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/private-release-notes-enterprise/</guid><description>Le release notes enterprise per un cliente su build privata vanno calibrate sulla sua istanza. Sbagliare svela la roadmap o confonde il suo supporto.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un prodotto SaaS pubblico invia le stesse release notes a tutti, perché tutti sono sulla stessa
versione. Una cliente enterprise su una versione fissata, un&amp;#39;istanza dedicata, o un sottoinsieme
del prodotto con feature flag rompe quel presupposto: le release notes che descrivono cosa è
cambiato per lei non sono le stesse del vostro blog pubblico, e inviarle comunque quelle pubbliche
o la confonde con cambiamenti che non ha ancora, o, peggio, le racconta di una funzionalità che
l&amp;#39;account team di un&amp;#39;altra cliente enterprise vi ha esplicitamente chiesto di trattenere dalla
propria istanza per un altro mese. &lt;a href=&quot;https://changeloop.dev/blog/it/release-notes-best-practices/&quot;&gt;Buone pratiche per le release
notes&lt;/a&gt; copre il mestiere generale; questo riguarda come
scrivere release notes enterprise per il problema di calibrazione che compare quando avete
clienti che non sono tutte sulla stessa build.&lt;/p&gt;
&lt;h2&gt;Perché una cliente enterprise non può semplicemente leggere il changelog pubblico?&lt;/h2&gt;
&lt;p&gt;Perché descrive una versione che forse non sta ancora eseguendo, funzionalità a cui forse non ha
accesso, e un calendario che non corrisponde al suo. Una cliente fissata a un ciclo di rilascio
trimestrale che legge di una funzionalità uscita per il livello pubblico la settimana scorsa non
ha modo di sapere, dal solo changelog pubblico, se quella funzionalità le arriverà la settimana
prossima o il prossimo trimestre. Il changelog pubblico risponde a &amp;quot;cosa è cambiato nel prodotto&amp;quot;;
la domanda reale di una cliente enterprise è &amp;quot;cosa è cambiato nella versione che sto eseguendo, e
quando ricevo il resto&amp;quot;, cosa che il changelog pubblico non è mai stato scritto per rispondere.&lt;/p&gt;
&lt;h2&gt;Cosa serve a una release note privata che una pubblica non ha bisogno?&lt;/h2&gt;
&lt;p&gt;Un identificatore di versione o ambiente contro cui la cliente possa davvero verificare, e una
dichiarazione esplicita di cosa non le è ancora arrivato. &amp;quot;Questa versione include i miglioramenti
all&amp;#39;export in massa dalla nostra release pubblica 4.3, ma non il nuovo modello di permessi, che
arriva nel vostro prossimo aggiornamento programmato&amp;quot; dice a un&amp;#39;amministratrice enterprise
esattamente dove si trova la sua istanza rispetto al prodotto in generale. Una release note
pubblica non ha mai bisogno di questa cornice perché c&amp;#39;è solo un&amp;#39;istanza a cui essere relativa; una
privata è priva di senso senza di essa.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Release notes pubbliche&lt;/th&gt;
&lt;th&gt;Release notes private (enterprise)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Una versione, un pubblico&lt;/td&gt;
&lt;td&gt;Più versioni, pubblici segmentati&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assume che la lettrice abbia ogni funzionalità descritta&lt;/td&gt;
&lt;td&gt;Deve dichiarare cosa ha e cosa non ha la lettrice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sincronizzate con la release pubblica&lt;/td&gt;
&lt;td&gt;Sincronizzate con la finestra di aggiornamento propria della cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Si può rendere subito completamente pubblica&lt;/td&gt;
&lt;td&gt;Potrebbe dover trattenere elementi che altre clienti non hanno ancora&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Va bene mai semplicemente ritardare l&amp;#39;invio delle release notes pubbliche a clienti enterprise invece di scriverne di separate?&lt;/h2&gt;
&lt;p&gt;Solo se la loro versione corrisponde davvero a quella pubblica in quel momento, il che è più raro
di quanto sembri appena avete più di un paio di account enterprise su ritmi diversi. Ritardare le
note pubbliche funziona come soluzione temporanea per una cliente che è indietro di una versione e
sta per raggiungerla; si rompe nel momento in cui due clienti enterprise sono su versioni diverse
tra loro, perché a quel punto non esiste più un&amp;#39;unica &amp;quot;le note&amp;quot; da ritardare, solo una matrice di
cosa ha ciascuna. A quel punto, calibrare le note per account, anche se è solo una vista filtrata
delle stesse voci sottostanti, smette di essere opzionale.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Note pubbliche, inviate a un account enterprise che
non ha ancora la funzionalità:
&amp;quot;New: Bulk export now supports custom column ordering.&amp;quot;
(Confuso: l&amp;#39;admin lo prova e non c&amp;#39;è.)

Note enterprise calibrate per lo stesso account:
&amp;quot;Available in your next update (scheduled for 2026-10-15):
bulk export with custom column ordering. Not yet available
on your current version (3.8).&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Chi dentro l&amp;#39;organizzazione della cliente le legge davvero, e questo cambia come si scrive?&lt;/h2&gt;
&lt;p&gt;Di solito un&amp;#39;amministratrice IT o un contatto customer success invece di un&amp;#39;utente finale, e questo
cambia cosa conta come utile. Un&amp;#39;utente finale vuole sapere cosa appare diverso sul suo schermo;
un&amp;#39;amministratrice enterprise vuole sapere cosa è cambiato nei permessi, nella gestione dei dati,
nella configurazione SSO, o qualsiasi cosa che influisca su come gestisce il deployment per le
proprie utenti, perché sarà lei a rispondere alle domande interne. Una release note privata che si
legge come un changelog consumer, tutti pulsanti nuovi e lucidi e nessun dettaglio operativo,
costringe l&amp;#39;amministratrice a scavare per l&amp;#39;informazione di cui aveva davvero bisogno.&lt;/p&gt;
&lt;h2&gt;Come interagisce questo con una roadmap pubblica o un changelog pubblico che elenca già la stessa funzionalità?&lt;/h2&gt;
&lt;p&gt;Con attenzione, perché una cliente che legge entrambi noterà qualsiasi incoerenza. Se il vostro
changelog pubblico ha già annunciato una funzionalità che un account enterprise specifico non ha
ancora, la sua release note privata deve riconoscere quel divario invece di fingere che la voce
pubblica non esista; un&amp;#39;amministratrice che ha visto l&amp;#39;annuncio pubblico e riceve note private che
lo ignorano assumerà o che ve ne siete dimenticate di lei, o che qualcosa è rotto. &lt;a href=&quot;https://changeloop.dev/blog/it/public-roadmap/&quot;&gt;Roadmap
pubblica&lt;/a&gt; copre come mantenere una roadmap onesta su cosa è uscito
rispetto a cosa è pianificato; la versione enterprise di quell&amp;#39;onestà nelle release notes consiste
nel nominare direttamente il divario tra ciò che è pubblico e ciò che è suo.&lt;/p&gt;
&lt;h2&gt;Un&amp;#39;azienda piccola con solo una o due clienti enterprise ha bisogno di tutta questa struttura?&lt;/h2&gt;
&lt;p&gt;Non del sistema completamente segmentato, ma la disciplina centrale, dichiarare chiaramente su
quale versione si trova la cliente e cosa ha e cosa non ha, conta a qualsiasi scala nel momento in
cui avete anche solo una cliente che non è sulla vostra build più recente. Il modo di fallimento
che questo previene, un&amp;#39;amministratrice confusa sul fatto che un annuncio pubblico si applichi a
lei, costa un ticket di supporto e un colpo alla fiducia indipendentemente dal fatto che abbiate
due account enterprise o duecento.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Le release notes private dovrebbero mai menzionare funzionalità che altre clienti hanno già ma questa no?&lt;/strong&gt;
Solo se è rilevante per il suo proprio calendario, espresso come &amp;quot;arriva nel vostro prossimo
aggiornamento&amp;quot; invece che come confronto con altre clienti. Nominare cosa ha una specifica altra
cliente attraversa un territorio che non spetta a voi rivelare; nominare cosa arriva specificamente
a questa cliente è esattamente l&amp;#39;informazione di cui ha bisogno.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le stesse voci di changelog sottostanti possono alimentare sia le note pubbliche che quelle private?&lt;/strong&gt;
Sì, ed è di solito l&amp;#39;approccio più sostenibile: etichettate le voci con quali versioni o livelli si
applicano, poi filtrate per pubblico al momento della pubblicazione invece di scrivere due
documenti completamente separati che inevitabilmente divergono.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa succede se una cliente enterprise chiede esplicitamente di essere sulle release notes pubbliche invece che su un feed privato?&lt;/strong&gt;
Rispettatelo, ma confermate che capisce che le note pubbliche presuppongono la versione pubblica, e
segnalate voi stessi per iscritto il divario se la sua versione diverge da quanto descritto. Quella
conferma scritta è ciò che vi protegge dopo se agisce in base a note pubbliche che in realtà non si
applicavano alla sua build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Con quanto anticipo dovrebbe essere avvisata una cliente enterprise di una funzionalità a cui avrà accesso nella prossima release?&lt;/strong&gt;
Non appena la data è confermata, non solo al momento del rilascio, perché le amministratrici
enterprise spesso devono pianificare la propria comunicazione interna o formazione attorno a una
funzionalità in arrivo, e una notifica lo stesso giorno non lascia loro margine per farlo.&lt;/p&gt;
</content:encoded></item><item><title>Semantic versioning e il tuo changelog</title><link>https://changeloop.dev/blog/it/semantic-versioning-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/semantic-versioning-changelog/</guid><description>Il semantic versioning dice a chi chiama quanto può fargli male una release prima di leggere il changelog. Cosa promette ogni numero e cosa deve una voce.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Il semantic versioning dice a chi chiama quanto può fargli male una release prima di leggere una
singola voce del changelog. Passare da &lt;code&gt;2.4.1&lt;/code&gt; a &lt;code&gt;2.5.0&lt;/code&gt; dice: nuova capacità, niente si rompe.
Passare da &lt;code&gt;2.5.0&lt;/code&gt; a &lt;code&gt;3.0.0&lt;/code&gt; dice: leggi questa voce prima di aggiornare. Changelog e numero di
versione dovrebbero affermare la stessa cosa in due formati, e la maggior parte degli attriti tra
i due emerge proprio quando non concordano, il che succede più spesso di quanto la specifica
suggerirebbe.&lt;/p&gt;
&lt;h2&gt;Cosa promette davvero ogni numero in una versione?&lt;/h2&gt;
&lt;p&gt;Il &lt;a href=&quot;https://semver.org/&quot;&gt;semantic versioning&lt;/a&gt; definisce tre numeri, &lt;code&gt;MAJOR.MINOR.PATCH&lt;/code&gt;, ognuno
con una regola rigida su cosa lo attiva. Un salto MAJOR significa un cambiamento incompatibile:
qualcosa che un&amp;#39;integrazione corretta ed esistente potrebbe notare e per cui dovrebbe cambiare. Un
salto MINOR significa nuova funzionalità compatibile all&amp;#39;indietro: niente di esistente si rompe,
qualcosa di nuovo è disponibile. Un salto PATCH significa un fix compatibile all&amp;#39;indietro: il
comportamento si avvicina a quanto documentato, e chi contava intenzionalmente sul vecchio
comportamento non dovrebbe notare nulla.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Salto&lt;/th&gt;
&lt;th&gt;Significato&lt;/th&gt;
&lt;th&gt;La voce dovrebbe leggersi come&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;MAJOR (&lt;code&gt;1.x.x&lt;/code&gt; -&amp;gt; &lt;code&gt;2.0.0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Un cambiamento incompatibile&lt;/td&gt;
&lt;td&gt;&amp;quot;Serve agire prima di aggiornare&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MINOR (&lt;code&gt;1.2.x&lt;/code&gt; -&amp;gt; &lt;code&gt;1.3.0&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Nuova capacità compatibile&lt;/td&gt;
&lt;td&gt;&amp;quot;Disponibile da ora, nient&amp;#39;altro cambia&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PATCH (&lt;code&gt;1.2.3&lt;/code&gt; -&amp;gt; &lt;code&gt;1.2.4&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Un fix compatibile&lt;/td&gt;
&lt;td&gt;&amp;quot;Ora si comporta come documentato&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;La tabella è anche un test da eseguire al contrario: se una voce non si legge come la sua riga, o
il numero di versione è sbagliato, o la voce sta sotto o sovra vendendo cosa è realmente successo.&lt;/p&gt;
&lt;h2&gt;Cosa conta come cambiamento incompatibile ai fini del versionamento?&lt;/h2&gt;
&lt;p&gt;Lo stesso test che decide se qualcosa appartiene a un changelog di API: se una chiamata corretta,
scritta contro il vecchio comportamento e mai toccata da allora, potrebbe comportarsi in modo
diverso a causa di questo cambiamento. &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;Cos&amp;#39;è un cambiamento incompatibile, e come rilasciarlo&lt;/a&gt;
copre la decisione per intero, inclusi i casi che sembrano incompatibili e non lo sono, e quelli
che sembrano piccoli e non lo sono. In breve ai fini del versionamento: se la risposta è sì, il
salto è MAJOR indipendentemente da quanto codice il cambiamento abbia toccato internamente. I
numeri di versione seguono la conseguenza per chi chiama, non lo sforzo del team.&lt;/p&gt;
&lt;h2&gt;Come dovrebbe corrispondere una voce di changelog a un salto di versione?&lt;/h2&gt;
&lt;p&gt;Una voce, una categoria di salto, dichiarata subito. Il pattern della tabella continua
direttamente: una voce incompatibile sta sotto la versione che l&amp;#39;ha introdotta, formulata prima
come avviso e poi come descrizione. Una voce additiva sta sotto la sua versione MINOR, formulata
come disponibilità. Un fix sta sotto la sua versione PATCH, formulato come correzione. Mescolare
categorie in una voce, come infilare un cambiamento incompatibile nello stesso paragrafo di un fix
non correlato, è il modo in cui chi legge perde proprio l&amp;#39;unica cosa che contava davvero.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## 3.0.0 (2026-09-07)

### Changed
- **BREAKING:** `GET /reports` ora restituisce gli importi come interi
  nell&amp;#39;unità monetaria più piccola (centesimi) invece che come
  decimali. Aggiorna il codice che legge `amount` direttamente.

## 2.9.0 (2026-09-01)

### Added
- I report ora si possono filtrare per `status`.

## 2.8.4 (2026-08-28)

### Fixed
- `GET /reports?status=` restituiva una pagina vuota invece di un 400
  per uno stato sconosciuto.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Letto dall&amp;#39;alto in basso, il numero di versione e l&amp;#39;etichetta di sezione dicono la stessa cosa
due volte, ed è esattamente lo scopo: chi legge solo i titoli ottiene una lettura corretta del
rischio prima di aprire una sola riga.&lt;/p&gt;
&lt;h2&gt;La regola dei cambiamenti incompatibili si applica allo stesso modo prima della 1.0.0?&lt;/h2&gt;
&lt;p&gt;No, ed è qui che nasce la maggior parte della confusione su &amp;quot;era davvero incompatibile&amp;quot;. SemVer è
esplicito nel dire che la versione maggiore zero, &lt;code&gt;0.y.z&lt;/code&gt;, serve allo sviluppo iniziale: qualsiasi
cosa può cambiare in qualsiasi momento, e l&amp;#39;API pubblica non dovrebbe essere considerata stabile.
Un salto da &lt;code&gt;0.4.0&lt;/code&gt; a &lt;code&gt;0.5.0&lt;/code&gt; può portare un cambiamento incompatibile senza violare la specifica,
perché la garanzia sulla versione maggiore parte solo una volta che un progetto pubblica &lt;code&gt;1.0.0&lt;/code&gt;.
Una voce di changelog deve comunque a chi legge la stessa onestà su cosa si è rotto; ciò che cambia
è solo che il numero di versione in sé non è il segnale su cui affidarsi prima che arrivi la 1.0.0.&lt;/p&gt;
&lt;h2&gt;E se il tuo prodotto non rilascia versioni discrete?&lt;/h2&gt;
&lt;p&gt;La maggior parte dei prodotti SaaS distribuisce in continuo e non mostra mai un numero di
versione a chi chiama, il che non elimina il bisogno di questa disciplina, solo il numero che
normalmente la porterebbe. La voce di changelog deve fare tutto il lavoro da sola: dire
chiaramente se un cambiamento è incompatibile, additivo o un fix, con le stesse tre parole che usa
il semantic versioning, anche senza un campo versione a cui agganciarle. Alcuni team mantengono
una versione puramente interna solo per ancorare le voci di changelog a qualcosa di collegabile,
senza mai mostrarla direttamente a chi chiama.&lt;/p&gt;
&lt;h2&gt;Come si applica questo specificamente a un changelog di API?&lt;/h2&gt;
&lt;p&gt;In modo più rigido che quasi ovunque altrove, perché chi chiama un&amp;#39;API è codice, non persone che
possono scrollare le spalle davanti a un cambiamento inaspettato. &lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;Changelog di API: cosa pubblicare e chi lo legge&lt;/a&gt;
copre la forma completa di quel documento; la disciplina di versionamento qui è ciò che mantiene
oneste le sue sezioni breaking e additive. Un&amp;#39;API che offre più versioni contemporaneamente, come
&lt;code&gt;v1&lt;/code&gt; e &lt;code&gt;v2&lt;/code&gt; servite in parallelo durante una finestra di migrazione, sta di fatto applicando il
semantic versioning alla scala dell&amp;#39;intera interfaccia invece di un singolo pacchetto, e lo stesso
vocabolario di tre parole si applica ancora a ogni voce.&lt;/p&gt;
&lt;h2&gt;Cosa dice Keep a Changelog sul versionamento?&lt;/h2&gt;
&lt;p&gt;Si lega direttamente per nome al semantic versioning e raccomanda lo stesso vocabolario di
categorie usato in questo articolo: Added, Changed, Deprecated, Removed, Fixed, Security. &lt;a href=&quot;https://changeloop.dev/blog/it/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog, in pratica&lt;/a&gt;
percorre come adottare quella specifica, inclusi i punti in cui i team tendono a deviare. La
sovrapposizione non è un caso: entrambe le specifiche cercano di risolvere lo stesso problema da
estremi opposti, una standardizza il numero di versione e l&amp;#39;altra la voce che lo spiega.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ogni voce di changelog ha bisogno di un numero di versione?&lt;/strong&gt;
Se il prodotto rilascia versioni, sì, perché il numero permette a chi legge di saltare
direttamente a &amp;quot;quanto mi riguarda&amp;quot; senza leggere prima la voce. Se il prodotto distribuisce in
continuo senza campo versione, la formulazione della voce deve portare da sola quel segnale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra un salto MAJOR e una voce di cambiamento incompatibile?&lt;/strong&gt;
Dovrebbero essere lo stesso evento descritto in due modi. Il numero di versione è il segnale
leggibile dalla macchina (gli strumenti di chi chiama possono reagirvi); la voce di changelog è
la spiegazione leggibile dall&amp;#39;uomo di cosa è cambiato concretamente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una release PATCH può essere incompatibile?&lt;/strong&gt;
Per definizione non dovrebbe. Se ne è uscita una comunque, non modificate né ritaggate la versione
pubblicata: la &lt;a href=&quot;https://semver.org/#what-do-i-do-if-i-accidentally-release-a-backward-incompatible-change-as-a-minor-version&quot;&gt;FAQ di SemVer&lt;/a&gt;
dice di rilasciare una nuova versione che ripristini la compatibilità, o una nuova MAJOR se
l&amp;#39;incompatibilità resta, e di documentare la versione incriminata così che gli utenti sappiano di
saltarla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I cambiamenti puramente interni hanno bisogno di un salto di versione?&lt;/strong&gt;
No. Il semantic versioning segue l&amp;#39;interfaccia pubblica. Un refactoring senza effetto osservabile
per chi chiama non ha bisogno né di un salto né di una voce di changelog, anche se è stato un
lavoro di ingegneria significativo.&lt;/p&gt;
</content:encoded></item><item><title>L&apos;header sunset delle API, e quando inviarne uno</title><link>https://changeloop.dev/blog/it/sunsetting-api-version/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/sunsetting-api-version/</guid><description>L&apos;header sunset delle API dice quando una versione smette di rispondere, a differenza di una deprecazione. Cosa copre la RFC 8594, cosa dà un brownout.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code&gt;Sunset&lt;/code&gt; è un singolo header di risposta, definito nella &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8594&quot;&gt;RFC 8594&lt;/a&gt;,
che dice a chi chiama quando una risorsa smetterà di rispondere. &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;Deprecazione API&lt;/a&gt;
copre l&amp;#39;intera timeline annuncio-promemoria-brownout-ritiro e gli avvisi che la accompagnano; questo
articolo riguarda l&amp;#39;unico segnale leggibile da una macchina in quella timeline, cosa dice davvero, e
l&amp;#39;unico caso in cui la RFC stessa dice di non inviarlo.&lt;/p&gt;
&lt;h2&gt;Cosa dice l&amp;#39;header Sunset, e cosa non dice?&lt;/h2&gt;
&lt;p&gt;Contiene una singola data HTTP, il momento in cui ci si aspetta che la risorsa smetta di rispondere:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Sunset: Sat, 31 Dec 2028 23:59:59 GMT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La RFC la definisce un suggerimento, non una garanzia: non promette che la risorsa continuerà a
funzionare fino a quel timestamp, e non dice nulla su come apparirà un eventuale guasto in seguito.
Chi chiama può ricevere un 4xx, un redirect, o nessuna risposta; l&amp;#39;header non fa distinzioni. Un
timestamp già nel passato significa &amp;quot;adesso, o in qualsiasi momento&amp;quot;, non un errore nel valore.
Niente di tutto questo è imposto dal protocollo. Un client che non legge mai l&amp;#39;header si comporta
esattamente come ha sempre fatto, e scopre che la risorsa non c&amp;#39;è più nello stesso modo in cui lo
avrebbe comunque scoperto.&lt;/p&gt;
&lt;h2&gt;Quando dovreste inviarlo davvero?&lt;/h2&gt;
&lt;p&gt;Solo quando la risorsa sta davvero per smettere di rispondere, non quando è semplicemente non più la
scelta consigliata. La RFC è esplicita nel dire che la deprecazione avviene in due fasi, e il campo
header Sunset appartiene solo alla seconda: l&amp;#39;API resta pienamente operativa durante la prima fase,
l&amp;#39;annuncio che una versione non è più preferita, e il campo header non si applica lì. Si applica
quando la versione è effettivamente pianificata per smettere di rispondere.&lt;/p&gt;
&lt;p&gt;Questo corrisponde direttamente alla timeline di deprecazione: l&amp;#39;header &lt;code&gt;Deprecation&lt;/code&gt; viene inviato
fin dal primo giorno, al passo dell&amp;#39;annuncio; &lt;code&gt;Sunset&lt;/code&gt; descrive la data in cui il vecchio
comportamento smetterà davvero, che è la stessa data che &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;la timeline in quattro passi&lt;/a&gt;
chiama ritiro. Inviare &lt;code&gt;Sunset&lt;/code&gt; il primo giorno non è sbagliato, dato che la data è già fissata a
quel punto, ma inviarlo senza aver anche annunciato una deprecazione, o impostarlo per una versione
che non avete ancora davvero deciso di ritirare, dice ai chiamanti qualcosa che voi stessi non avete
ancora deciso.&lt;/p&gt;
&lt;h2&gt;Interagisce con la cache?&lt;/h2&gt;
&lt;p&gt;No, e la RFC lo dice direttamente: &lt;code&gt;Sunset&lt;/code&gt; e la cache HTTP risolvono problemi non correlati e vanno
lette come complementari, non sovrapposte. Gli header di cache dicono quando è sicuro riutilizzare
una copia in cache; &lt;code&gt;Sunset&lt;/code&gt; non dice nulla sullo stato attuale della risorsa, solo che la risorsa
stessa smetterà di esistere. Una risposta può essere pienamente cacheabile fino al momento esatto in
cui va in sunset. Non usate l&amp;#39;uno per approssimare l&amp;#39;altro, e non date per scontato che un &lt;code&gt;max-age&lt;/code&gt;
lungo annulli una data di sunset imminente, né il contrario.&lt;/p&gt;
&lt;h2&gt;Un solo header può mettere in sunset più di un endpoint?&lt;/h2&gt;
&lt;p&gt;L&amp;#39;header si applica alla risorsa che lo ha restituito, ma la RFC permette a un servizio di
documentare un ambito più ampio: una data di sunset sulla risorsa principale di un&amp;#39;API può essere
definita per indicare che sparisce l&amp;#39;intera API, non solo quell&amp;#39;unico URL. Il problema è che questo
funziona solo per chi chiama e conosce già la vostra regola di ambito. Chi legge l&amp;#39;header alla
lettera vede un sunset sulla singola risorsa richiesta e nient&amp;#39;altro, quindi un ambito più ampio deve
essere scritto da qualche parte dove chi chiama possa trovarlo, non semplicemente sottinteso.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe accompagnare l&amp;#39;header?&lt;/h2&gt;
&lt;p&gt;Un link a dove il ritiro viene spiegato. La RFC 8594 registra una propria relazione di link &lt;code&gt;sunset&lt;/code&gt;
esattamente per questo: puntare a una risorsa che descrive la policy di ritiro, la data imminente, o
come migrare, separatamente dal semplice timestamp dell&amp;#39;header.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Sunset: Sat, 31 Dec 2028 23:59:59 GMT
Link: &amp;lt;https://example.com/docs/sunset-policy&amp;gt;; rel=&amp;quot;sunset&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Puntare quel link ai vostri &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; o a una pagina di migrazione
dedicata trasforma un header che quasi nessun codice client ispeziona in qualcosa che una persona
che va a cercare trova subito. Combinatelo con la relazione &lt;code&gt;successor-version&lt;/code&gt; degli &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/#which-headers-should-a-deprecated-endpoint-send&quot;&gt;header di
deprecazione&lt;/a&gt; e chi
chiama ottiene, dalla sola risposta, sia dove andare sia cosa sostituisce questa risorsa.&lt;/p&gt;
&lt;h2&gt;Come si presenta tutto questo, dall&amp;#39;inizio alla fine?&lt;/h2&gt;
&lt;p&gt;Supponiamo che &lt;code&gt;v1&lt;/code&gt; sparisca il 1 marzo 2027. L&amp;#39;annuncio di deprecazione il primo giorno aggiunge
&lt;code&gt;Deprecation&lt;/code&gt; e &lt;code&gt;Link: rel=&amp;quot;successor-version&amp;quot;&lt;/code&gt; a ogni risposta &lt;code&gt;v1&lt;/code&gt;, secondo &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;gli header di
deprecazione&lt;/a&gt;, ma rimanda &lt;code&gt;Sunset&lt;/code&gt; finché la data di ritiro non è davvero
fissata invece di essere un segnaposto. Una volta fissata, ogni risposta &lt;code&gt;v1&lt;/code&gt; porta:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Deprecation: @1756425600
Sunset: Mon, 01 Mar 2027 00:00:00 GMT
Link: &amp;lt;https://api.example.com/v2/reports&amp;gt;; rel=&amp;quot;successor-version&amp;quot;
Link: &amp;lt;https://example.com/docs/sunset-policy&amp;gt;; rel=&amp;quot;sunset&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il gateway o il monitoraggio di chi chiama può segnalare in modo indipendente su entrambi gli
header: &lt;code&gt;Deprecation&lt;/code&gt; dice che esiste una versione più recente, &lt;code&gt;Sunset&lt;/code&gt; dice che questa ha un
orologio che scorre. Nessuno dei due header deve necessariamente cambiare prima del 1 marzo; ciò che
cambia è la risposta stessa, nel giorno stesso, e durante eventuali finestre di brownout pianificate
prima di allora.&lt;/p&gt;
&lt;h2&gt;Un brownout cambia cosa dice l&amp;#39;header?&lt;/h2&gt;
&lt;p&gt;Il valore dell&amp;#39;header non deve necessariamente spostarsi per un brownout pianificato: la data di
sunset resta la data di sunset, che la risorsa fallisca in modo intermittente prima o no. Ciò che
cambia è la risposta, non l&amp;#39;header. Pianificare brevi finestre di &lt;code&gt;410 Gone&lt;/code&gt; nelle settimane prima
della data annunciata, come descrive &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;Deprecazione API&lt;/a&gt;, è ciò che
trasforma il primo contatto di chi chiama con il guasto in una prova generale invece che nell&amp;#39;evento
reale il giorno in cui arriva la data dell&amp;#39;header.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Client o strumenti HTTP reali leggono davvero l&amp;#39;header Sunset?&lt;/strong&gt;
Raramente, lato client. Il suo valore è soprattutto per chi gestisce l&amp;#39;infrastruttura tra voi e chi
chiama: un API gateway o uno strumento di monitoraggio che configurate per osservare l&amp;#39;header può
avvisare il vostro team, o quello di un partner, molto prima che il codice di chi chiama se ne
accorga mai. Trattatelo come un segnale attorno a cui costruire strumenti, non uno che potete dare
per scontato che l&amp;#39;altra parte abbia già.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Sunset&lt;/code&gt; è la stessa cosa di &lt;code&gt;Cache-Control: max-age&lt;/code&gt;?&lt;/strong&gt;
No. &lt;code&gt;max-age&lt;/code&gt; riguarda per quanto tempo resta valida una copia in cache; &lt;code&gt;Sunset&lt;/code&gt; riguarda quando la
risorsa smette del tutto di esistere. Una risposta può avere un &lt;code&gt;max-age&lt;/code&gt; breve e una data &lt;code&gt;Sunset&lt;/code&gt;
lontana anni, o il contrario, e nessuno dei due header vincola l&amp;#39;altro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Posso inviare Sunset per un singolo campo che sparisce, non per l&amp;#39;intero endpoint?&lt;/strong&gt;
No, l&amp;#39;header ha come ambito la risorsa, cioè l&amp;#39;URL, non un campo dentro il corpo della risposta. Per
un campo, un parametro o un valore enum che sparisce mentre l&amp;#39;endpoint stesso resta attivo, usate
invece l&amp;#39;header &lt;code&gt;Deprecation&lt;/code&gt; e una voce di changelog; &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;Deprecazione API&lt;/a&gt;
copre esattamente come annunciare quel tipo di cambiamento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se la data di sunset deve essere spostata?&lt;/strong&gt;
Aggiornate il valore dell&amp;#39;header e ditelo nella voce di changelog che l&amp;#39;aveva annunciata la prima
volta; cambiare silenziosamente una data pubblicata è il modo in cui chi chiama decide che nessuna
delle vostre date è reale. La RFC descrive il valore come un suggerimento proprio perché le date a
volte si spostano, ma una data spostata senza spiegazione vi costa anche la prossima.&lt;/p&gt;
</content:encoded></item><item><title>Changelog dei webhook: il breaking change non richiesto</title><link>https://changeloop.dev/blog/it/webhook-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/webhook-changelog/</guid><description>Un cambiamento nel payload di un webhook si rompe in silenzio, perché nessuno lo rifiuta. Cosa rende breaking un cambio di payload, e come versionarlo.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un changelog di API REST esiste perché un chiamante può scegliere di rifiutare una risposta che
non capisce, o almeno registrare un errore abbastanza rumoroso perché qualcuno se ne accorga. Un
destinatario di webhook raramente fa nessuna delle due cose. Riceve un POST, legge i campi che si
aspetta, e se un campo si è spostato, ha cambiato tipo o è sparito, l&amp;#39;endpoint o crasha in
silenzio dentro un job in background che nessuno controlla o, peggio, continua a funzionare con un
valore sbagliato che non ha mai validato. &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;Cos&amp;#39;è un breaking change&lt;/a&gt;
copre la definizione generale; un payload di webhook ha bisogno della propria risposta, perché la
modalità di fallimento è diversa da quella di un endpoint che qualcuno chiama di proposito.&lt;/p&gt;
&lt;h2&gt;Perché un cambiamento nel payload di un webhook si rompe diversamente da un cambiamento nella risposta di un&amp;#39;API?&lt;/h2&gt;
&lt;p&gt;Perché la direzione della richiesta è invertita. Chi chiama via REST avvia la chiamata e può
aggiungere un header di versione, ritentare su un 4xx o leggere un avviso di deprecazione nella
risposta. Un destinatario di webhook non ha avviato niente di tutto questo: il vostro server ha
deciso di inviare, ha deciso quando, e ha deciso quale forma avrebbe avuto il corpo. L&amp;#39;unica leva
del destinatario è la validazione che ha scritto quando l&amp;#39;integrazione è stata costruita, e la
maggior parte delle integrazioni si costruiscono una volta, funzionano, e nessuno le rivede più
finché non si rompono. Questa asimmetria è l&amp;#39;intero motivo per cui un cambiamento nel payload di
un webhook merita più cautela dello stesso cambiamento in un corpo di risposta che un chiamante ha
richiesto attivamente.&lt;/p&gt;
&lt;h2&gt;Cosa conta davvero come breaking change in un payload di webhook?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cambiamento&lt;/th&gt;
&lt;th&gt;Breaking per la maggior parte dei destinatari&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Aggiungere un nuovo campo&lt;/td&gt;
&lt;td&gt;No, se i destinatari ignorano i campi sconosciuti (verificate questa assunzione, non datela per scontata)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rimuovere un campo&lt;/td&gt;
&lt;td&gt;Sì, se qualcosa lo legge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rinominare un campo&lt;/td&gt;
&lt;td&gt;Sì, funzionalmente identico a rimuovere quello vecchio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cambiare il tipo di un campo (stringa a oggetto)&lt;/td&gt;
&lt;td&gt;Sì, quasi sempre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Riordinare i campi nel corpo JSON&lt;/td&gt;
&lt;td&gt;No, per qualsiasi destinatario che analizza per chiave, che dovrebbero essere tutti&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cambiare il nome o tipo dell&amp;#39;evento&lt;/td&gt;
&lt;td&gt;Sì, se i destinatari filtrano o instradano su di esso&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;La riga &amp;quot;aggiungere un campo è sicuro&amp;quot; è quella su cui i team fanno più affidamento e quella che
vale di più verificare, non assumere. Un parser JSON permissivo ignora i campi sconosciuti per
default, ma un destinatario che deserializza in uno schema rigido, diversi linguaggi tipizzati lo
fanno senza configurazione extra, può rifiutare l&amp;#39;intero payload appena appare un campo
inaspettato. Aggiungere un campo è sicuro per il vostro webhook solo se sapete come analizzano i
destinatari, non perché JSON in sé sia permissivo.&lt;/p&gt;
&lt;h2&gt;Come si versiona un payload di webhook?&lt;/h2&gt;
&lt;p&gt;Più o meno come per una risposta API, con una differenza: il destinatario non invia mai una
richiesta, quindi non può chiedere una versione, ed è il mittente a doverla dichiarare. Può stare nel
corpo o in un header della richiesta di consegna stessa; le
&lt;a href=&quot;https://docs.github.com/en/webhooks/webhook-events-and-payloads&quot;&gt;consegne di GitHub&lt;/a&gt;
portano &lt;code&gt;X-GitHub-Event&lt;/code&gt; e &lt;code&gt;X-GitHub-Hook-ID&lt;/code&gt;, e la
&lt;a href=&quot;https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md&quot;&gt;specifica Standard Webhooks&lt;/a&gt;
mette i suoi metadati negli header &lt;code&gt;webhook-*&lt;/code&gt;. Un campo di versione nel payload (&lt;code&gt;&amp;quot;payload_version&amp;quot;: 2&lt;/code&gt;) è l&amp;#39;opzione più economica e funziona
quando i destinatari sono disposti a diramarsi su di esso. Un tipo di evento versionato
(&lt;code&gt;invoice.updated&lt;/code&gt; diventa &lt;code&gt;invoice.updated.v2&lt;/code&gt; come evento distinto a cui un destinatario si
iscrive volontariamente) richiede più lavoro da costruire ma significa che la forma vecchia
continua ad arrivare a chi non ha mai migrato, il che conta di più qui che per un endpoint REST
perché non potete chiamare ogni destinatario per dirgli di aggiornare. Un&amp;#39;impostazione per
sottoscrizione, scelta alla registrazione dell&amp;#39;endpoint del webhook, anticipa la decisione invece
di diramarsi a ogni consegna, ed è la scelta giusta quando avete già un record di sottoscrizione a
cui attaccarla.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;POST /endpoint-destinatario
{
  &amp;quot;event&amp;quot;: &amp;quot;invoice.updated&amp;quot;,
  &amp;quot;payload_version&amp;quot;: 2,
  &amp;quot;data&amp;quot;: { &amp;quot;invoice_id&amp;quot;: &amp;quot;inv_123&amp;quot;, &amp;quot;status&amp;quot;: &amp;quot;paid&amp;quot; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Come fai anche solo a sapere chi sta ascoltando?&lt;/h2&gt;
&lt;p&gt;Peggio della versione equivalente di questo problema in un changelog di API, perché un webhook
non ha un log delle richieste in entrata dalla vostra parte che nomini il chiamante; avete solo il
vostro log di consegna in uscita, che vi dice che un endpoint ha ricevuto un 200, non cosa ne ha
fatto del corpo. Tracciate almeno due cose: ogni endpoint registrato con una responsabile, la
stessa disciplina che &lt;a href=&quot;https://changeloop.dev/blog/it/internal-api-changelog/&quot;&gt;i changelog di API interne&lt;/a&gt;
raccomandano per i consumatori interni, e il vostro tasso di fallimento della consegna per
endpoint dopo un cambiamento di payload. Un picco di risposte 4xx o 5xx da un endpoint subito dopo
un cambiamento è la cosa più vicina a uno stack trace che otterrete, e spesso è l&amp;#39;unico segnale
che un destinatario si è rotto, perché il team che lo gestisce potrebbe non accorgersene per
giorni.&lt;/p&gt;
&lt;h2&gt;Un changelog dei webhook dovrebbe essere separato dal changelog delle API?&lt;/h2&gt;
&lt;p&gt;Una sezione separata sulla stessa pagina, non una pubblicazione separata.
&lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;Un changelog di API&lt;/a&gt; stabilisce già chi lo legge e come ci si iscrive; un
cambiamento nel payload di un webhook appartiene allo stesso feed, etichettato con chiarezza
sufficiente perché una sviluppatrice lato destinatario che cerca &amp;quot;questo influisce sulla mia
integrazione&amp;quot; possa filtrarlo, perché una consumatrice di webhook spesso non ha altro motivo per
controllare un changelog generale di API e lo troverà solo se qualcuno la indirizza lì
direttamente.&lt;/p&gt;
&lt;h2&gt;Come dovrebbe essere una finestra di deprecazione ragionevole per un payload di webhook?&lt;/h2&gt;
&lt;p&gt;Più lunga della deprecazione REST equivalente, perché la migrazione lato destinatario di solito
significa che un secondo team, con cui magari non avete un contatto diretto, deve accorgersene,
pianificarla e rilasciarla senza una propria urgenza. Un mese è un minimo ragionevole per un
campo che il destinatario sta plausibilmente ancora analizzando con una libreria permissiva; tre
mesi o più sono più sicuri per una rimozione di campo che uno schema rigido rifiuterebbe del tutto.
Inviate la forma vecchia e quella nuova insieme durante la finestra quando fattibile (il vecchio
campo &lt;code&gt;status&lt;/code&gt; e il suo sostituto della versione 2 nello stesso payload), perché un
destinatario che legge il campo vecchio continua a funzionare senza toccare il codice, e uno che
ha già migrato ignora semplicemente il campo di cui non ha più bisogno.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;I consumatori di webhook devono confermare un cambiamento di payload prima che venga rilasciato?&lt;/strong&gt;
Non esiste un meccanismo di conferma di default, ed è proprio per questo che la finestra di
deprecazione conta di più qui che per un&amp;#39;API REST: nessuno conferma di essere pronto, quindi la
finestra deve essere abbastanza lunga da far migrare la maggior parte dei destinatari secondo i
propri tempi prima che la forma vecchia scompaia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;È mai sicuro aggiungere campi sconosciuti senza preavviso?&lt;/strong&gt;
Solo dopo aver verificato, non assunto, che i vostri destinatari analizzano in modo permissivo.
Una voce di changelog costa poco e toglie l&amp;#39;incertezza; aggiungere campi in silenzio assumendo che
&amp;quot;i parser JSON ignorano gli extra&amp;quot; rompe qualsiasi destinatario con deserializzazione rigida.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è il modo più veloce per rilevare un destinatario di webhook rotto dopo un cambiamento di payload?&lt;/strong&gt;
Un tasso di fallimento della consegna per endpoint, osservato nelle ore subito dopo il
cambiamento. Non vi dirà cosa si è rotto, solo che qualcosa si è rotto, ma è il segnale più
precoce e spesso l&amp;#39;unico che otterrete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La logica di retry aiuta i destinatari a sopravvivere a un cambiamento di payload?&lt;/strong&gt;
No. Un retry rinvia lo stesso nuovo payload; non torna a una forma che il destinatario può
analizzare. Un cambiamento di payload rompe un destinatario alla prima consegna e a ogni retry
successivo in modo identico.&lt;/p&gt;
</content:encoded></item><item><title>Changelog: cos&apos;è, con un esempio di voce</title><link>https://changeloop.dev/blog/it/what-is-a-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/what-is-a-changelog/</guid><description>Un changelog è il registro datato delle modifiche a un prodotto. Un esempio di voce, la differenza dalle release notes e dal commit log, dove pubblicarlo.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un changelog è il registro datato di ciò che è cambiato in un prodotto, scritto per le persone
coinvolte dal cambiamento, non per il team che lo ha rilasciato. Ogni voce nomina un cambiamento,
dice quando è entrato in vigore e dice cosa deve fare chi legge, che nella maggior parte dei casi
è niente. Proprio questo separa un changelog da un log dei commit: un log dei commit è un
registro per chi ha scritto il codice, un changelog è un registro per chi lo usa.&lt;/p&gt;
&lt;h2&gt;Cos&amp;#39;è un changelog, esattamente?&lt;/h2&gt;
&lt;p&gt;Un elenco di voci datate, dalla più recente, ognuna descrive un singolo cambiamento in termini
che chi legge può verificare. Non cosa ha costruito il team, ma cosa è diverso ora. &amp;quot;Refactoring
del servizio di fatturazione&amp;quot; è un messaggio di commit. &amp;quot;Le fatture ora mostrano l&amp;#39;imposta come
riga separata&amp;quot; è una voce di changelog, perché dice a chi legge qualcosa che può controllare sul
proprio account.&lt;/p&gt;
&lt;p&gt;Il formato è antico e volutamente semplice: un titolo per release o per giorno, un elenco breve
sotto, a volte un&amp;#39;etichetta di categoria. &lt;a href=&quot;https://keepachangelog.com/en/1.1.0/&quot;&gt;Keep a Changelog&lt;/a&gt;
è la specifica più citata per questa forma, ed esiste perché la maggior parte dei progetti che
salta una specifica finisce per riversare la cronologia dei commit al suo posto, che risponde a
una domanda diversa da quella con cui è arrivato chi legge.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Documento&lt;/th&gt;
&lt;th&gt;Scritto per&lt;/th&gt;
&lt;th&gt;Risponde a&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Changelog&lt;/td&gt;
&lt;td&gt;Chiunque usi il prodotto&lt;/td&gt;
&lt;td&gt;Cosa è cambiato, e quando?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Log dei commit&lt;/td&gt;
&lt;td&gt;Il team che ha scritto il codice&lt;/td&gt;
&lt;td&gt;Cosa è stato fatto, in che ordine?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Note di rilascio&lt;/td&gt;
&lt;td&gt;Utenti che decidono se aggiornare&lt;/td&gt;
&lt;td&gt;Cosa posso fare ora che non potevo?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Note di patch&lt;/td&gt;
&lt;td&gt;Giocatori o utenti di un fix specifico&lt;/td&gt;
&lt;td&gt;Cosa ha risolto proprio questa release?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roadmap&lt;/td&gt;
&lt;td&gt;Chiunque si chieda cosa arriva dopo&lt;/td&gt;
&lt;td&gt;Cosa è pianificato, e a che punto è?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I cinque si sovrappongono nella pratica, ma non sono lo stesso documento, e la differenza sta in
chi lo tiene in mano quando lo legge. Un changelog è quello costruito per essere cercato e
collegato in seguito, per cui le sue voci hanno più bisogno di date e URL stabili degli altri.&lt;/p&gt;
&lt;h2&gt;Cosa contiene davvero una voce di changelog?&lt;/h2&gt;
&lt;p&gt;Quattro cose, in quest&amp;#39;ordine: cosa è cambiato, espresso nei termini in cui l&amp;#39;utente o il chiamante
lo noterebbe; quando è entrato in vigore; a quale categoria appartiene (added, fixed, changed,
removed sono le quattro comuni); e, quando conta, cosa deve fare chi legge al riguardo. Un link
per approfondire è benvenuto. Un paragrafo di giustificazione interna no, perché chi legge non ha
chiesto perché, ha chiesto cosa.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## 2026-09-07

### Added
- Le fatture ora mostrano l&amp;#39;imposta come riga separata, nella valuta
  dell&amp;#39;account del cliente.

### Fixed
- Esportare un report come CSV non elimina più l&amp;#39;ultima riga quando il
  report supera le 10.000 righe.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa forma scala da un aggiornamento di due righe a cento voci in una release senza cambiare
struttura, ed è il vero test se un formato funziona: si legge allo stesso modo in una settimana
intensa e in una tranquilla.&lt;/p&gt;
&lt;h2&gt;Chi scrive un changelog, e quando?&lt;/h2&gt;
&lt;p&gt;Chi ha fatto il cambiamento, nel momento in cui viene rilasciato, non una redattrice tecnica che
lo ricostruisce dai ticket una settimana dopo. Chi ha toccato il codice sa cosa è cambiato
davvero per l&amp;#39;utente; un riassunto scritto in seguito tende a descrivere il ticket invece di ciò
che è stato effettivamente rilasciato, ed è di solito più ampio o più stretto dell&amp;#39;effettivo. Alcuni
team aggiungono un passaggio di revisione prima che una voce diventi pubblica, soprattutto per
intercettare linguaggio interno che si è infilato, e quella revisione dovrebbe essere abbastanza
rapida da far uscire la voce lo stesso giorno.&lt;/p&gt;
&lt;h2&gt;Dove dovrebbe vivere un changelog?&lt;/h2&gt;
&lt;p&gt;Sulla propria pagina, con un URL stabile, distribuito come feed. Sepolto in un menu delle
impostazioni o in un tag di release su un host di codice, raggiunge solo chi già sapeva dove
guardare. Una pagina pubblica si può collegare da un ticket di supporto, citare in una recensione
o sottoscrivere. Il feed conta quanto la pagina: chi controlla il changelog di un prodotto una
volta al mese è raro, chi lo sottoscrive no, e solo il feed serve il secondo tipo.&lt;/p&gt;
&lt;h2&gt;In cosa differisce dalle note di rilascio?&lt;/h2&gt;
&lt;p&gt;Vengono confusi costantemente, e sono abbastanza diversi che unirli produce un documento che non
serve bene nessuna delle due lettrici. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;Changelog vs note di rilascio&lt;/a&gt;
percorre la distinzione per intero; in breve, un changelog è il registro completo e cronologico,
e le note di rilascio sono un sottoinsieme curato, scritto perché un aggiornamento suoni degno di
essere avuto. Un prodotto di solito ha bisogno di entrambi, rivolti a momenti diversi della
giornata di chi legge.&lt;/p&gt;
&lt;h2&gt;Cosa rende un changelog degno di essere letto?&lt;/h2&gt;
&lt;p&gt;Specificità e onestà sulla propria portata. &amp;quot;Vari bugfix&amp;quot; è la frase che insegna a chi legge a
smettere di aprire la pagina, perché non promette nulla che possa verificare. Una voce che nomina
il comportamento esatto cambiato, anche per un fix piccolo, è quella che tiene viva
un&amp;#39;iscrizione. Questa disciplina vale anche per le omissioni: un changelog che annuncia solo
successi e mai un fix per qualcosa che era rotto si legge come marketing travestito da changelog,
e chi legge se ne accorge.&lt;/p&gt;
&lt;p&gt;Conta anche la disciplina di versionamento. &lt;a href=&quot;https://changeloop.dev/blog/it/semantic-versioning-changelog/&quot;&gt;Semantic versioning e il tuo changelog&lt;/a&gt;
spiega come numero di versione e voce dovrebbero corrispondere, così chi scorre la cronologia
delle versioni riceve lo stesso segnale due volte invece di due segnali diversi.&lt;/p&gt;
&lt;h2&gt;Come vengono generati i changelog?&lt;/h2&gt;
&lt;p&gt;In due modi, e la maggior parte delle configurazioni reali è un mix. La generazione automatizzata
legge i messaggi di commit, di solito in formato &lt;a href=&quot;https://www.conventionalcommits.org/en/v1.0.0/&quot;&gt;Conventional Commits&lt;/a&gt;,
e li trasforma in voci senza che nessuno tocchi l&amp;#39;output; &lt;a href=&quot;https://changeloop.dev/blog/it/conventional-commits-changelog/&quot;&gt;dai conventional commits al changelog&lt;/a&gt;
copre quella pipeline. La generazione curata significa che qualcuno scrive o modifica ogni voce a
mano. L&amp;#39;output automatizzato è più veloce e non perde mai una pull request unita, ma eredita ogni
messaggio di commit vago parola per parola, per cui la maggior parte dei team che automatizza
mantiene comunque un passaggio di revisione leggero prima di pubblicare invece di mostrare
l&amp;#39;output grezzo.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ogni prodotto ha bisogno di un changelog?&lt;/strong&gt;
Qualsiasi prodotto con utenti coinvolti dal cambiamento ne ha bisogno, che sia un&amp;#39;app SaaS, uno
strumento interno o un&amp;#39;API pubblica. La forma si adatta (un changelog di API si legge diverso da
quello di un&amp;#39;app consumer), il bisogno no.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cos&amp;#39;è un changelog in termini di software?&lt;/strong&gt;
La stessa definizione di sopra: un elenco datato e cronologico di ciò che è cambiato nel
software, scritto per chi lo usa, non per chi lo ha costruito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un changelog può essere generato automaticamente dai commit?&lt;/strong&gt;
Sì, e molti team fanno esattamente questo, di solito da messaggi in formato Conventional Commits.
Il compromesso è che una voce generata è chiara solo quanto il messaggio di commit da cui
proviene, per cui un passaggio di revisione prima della pubblicazione intercetta quelle da
riformulare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un changelog è lo stesso di una cronologia delle versioni?&lt;/strong&gt;
Abbastanza simile da usare i termini in modo intercambiabile. Una cronologia delle versioni a
volte è solo un elenco di numeri e date senza descrizione; un changelog include sempre cosa è
cambiato.&lt;/p&gt;
</content:encoded></item><item><title>Changelog di API: cosa pubblicare e chi lo legge</title><link>https://changeloop.dev/blog/it/api-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/api-changelog/</guid><description>Un changelog di API lo legge chi decide se il proprio codice funzionerà ancora il mese prossimo. Cosa deve ogni voce, dove vive, come ci si iscrive.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un changelog di API è il registro datato di ogni cambiamento che un chiamante potrebbe notare,
scritto per chi integra con l&amp;#39;API, non per il team che la rilascia. Questo pubblico lo rende un
documento diverso da un changelog di prodotto: chi legge sta decidendo se il proprio codice
funzionerà ancora il mese prossimo. La maggior parte fallisce nello stesso modo, essendo una copia
filtrata di un feed interno di release, così un campo rimosso finisce accanto a una correzione di
testo con lo stesso peso, e nessuno dei due viene letto.&lt;/p&gt;
&lt;h2&gt;Cos&amp;#39;è un changelog di API?&lt;/h2&gt;
&lt;p&gt;È il registro pubblico e datato dei cambiamenti a un&amp;#39;interfaccia contro cui altre persone hanno
scritto codice. Il test utile per stabilire se qualcosa vi appartiene non ha nulla a che fare con
quanto fosse grande il cambiamento internamente. Chiede se un chiamante corretto, scritto l&amp;#39;anno
scorso e mai toccato da allora, potrebbe comportarsi diversamente a causa sua. Questo test ammette
alcuni cambiamenti molto piccoli ed esclude alcuni molto grandi.&lt;/p&gt;
&lt;p&gt;Tutto quello che segue presuppone che chi chiama sia fuori dall&amp;#39;azienda e sostanzialmente
irraggiungibile se non tramite questo documento. Quando chi chiama è un altro team della stessa
azienda, il calcolo cambia abbastanza da richiedere un trattamento proprio;
&lt;a href=&quot;https://changeloop.dev/blog/it/internal-api-changelog/&quot;&gt;changelog di API interna&lt;/a&gt; copre cosa serve invece a quel
pubblico.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Documento&lt;/th&gt;
&lt;th&gt;Pubblico&lt;/th&gt;
&lt;th&gt;Risponde a&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Changelog di API&lt;/td&gt;
&lt;td&gt;Sviluppatori che chiamano l&amp;#39;API&lt;/td&gt;
&lt;td&gt;La mia integrazione funziona ancora?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Note di rilascio&lt;/td&gt;
&lt;td&gt;Utenti del prodotto&lt;/td&gt;
&lt;td&gt;Cosa posso fare ora che prima non potevo?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avviso di deprecazione&lt;/td&gt;
&lt;td&gt;Chiamanti di una cosa specifica&lt;/td&gt;
&lt;td&gt;Quando smette di funzionare?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pagina di stato&lt;/td&gt;
&lt;td&gt;Chiunque sia colpito ora&lt;/td&gt;
&lt;td&gt;È giù in questo momento?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guida alla migrazione&lt;/td&gt;
&lt;td&gt;Chiamanti in fase di aggiornamento&lt;/td&gt;
&lt;td&gt;Come passo da A a B?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;a href=&quot;https://changeloop.dev/blog/it/api-migration-guide/&quot;&gt;Come scrivere una guida di migrazione per API&lt;/a&gt; copre per intero
quest&amp;#39;ultimo documento; in breve è ciò a cui una voce di cambiamento incompatibile dovrebbe
rimandare invece di provare a sostituirlo.&lt;/p&gt;
&lt;p&gt;I cinque sono documenti separati con cicli di vita separati. Un avviso di deprecazione è una
promessa con una data, e appartiene anche al changelog, ma una voce di changelog si scrive una
volta sola mentre una deprecazione si segue fino al suo sunset. Confonderli è il motivo per cui i
sunset vengono persi.&lt;/p&gt;
&lt;h2&gt;Cosa appartiene a una singola voce?&lt;/h2&gt;
&lt;p&gt;Sei cose, e le prime tre sono quelle che di solito mancano. Il cambiamento, espresso in termini di
richiesta o risposta piuttosto che del componente interno. Se rompe un chiamante corretto. Cosa deve
fare il chiamante, incluso &amp;quot;niente&amp;quot;. La data in cui è entrato in vigore. La versione o le versioni
coinvolte. Un link alla guida di migrazione, quando esiste.&lt;/p&gt;
&lt;p&gt;Una voce che dice &amp;quot;migliorato l&amp;#39;endpoint account&amp;quot; fallisce su tutte e sei. Una voce che dice &amp;quot;il
campo &lt;code&gt;accounts.type&lt;/code&gt; ora restituisce &lt;code&gt;individual&lt;/code&gt; dove prima restituiva &lt;code&gt;personal&lt;/code&gt;; i valori
esistenti restano invariati per gli account creati prima del 2 settembre; nessuna azione richiesta
a meno che tu non confronti la stringa&amp;quot; risponde a tutte e sei in una frase.&lt;/p&gt;
&lt;p&gt;Categorizzate le voci per conseguenza, non per reparto. Tre etichette portano quasi tutto il valore:
breaking, additive e fixed. &lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning&lt;/a&gt; definisce già le prime due
con precisione, e prendere in prestito le sue definizioni invece di inventarne di locali significa
che chi conosce semver conosce le vostre etichette. &lt;a href=&quot;https://keepachangelog.com/en/1.1.0/&quot;&gt;Keep a Changelog&lt;/a&gt;
ne offre un set più lungo se lo volete, e la sua regola centrale vale qui più che altrove: il log è
per gli esseri umani, e un dump di titoli di commit non lo è.&lt;/p&gt;
&lt;h2&gt;In cosa un changelog di API differisce dalle note di rilascio?&lt;/h2&gt;
&lt;p&gt;Le note di rilascio descrivono cosa può fare ora il prodotto. Un changelog di API descrive qual è
ora il contratto. Lo stesso lavoro rilasciato produce spesso una voce in entrambi, formulata in
modo diverso, perché i pubblici hanno bisogno di cose diverse: un nuovo formato di esportazione è
una funzione per un utente e un nuovo valore enum per un chiamante che dipende da quel campo.&lt;/p&gt;
&lt;p&gt;La conseguenza pratica è che i due non possono essere lo stesso feed con stile diverso. Un chiamante
che si iscrive a tutto quello che rilasciate finirà per disiscriversi, e allora perderà il breaking
change. Se pubblicate un feed, filtratelo; se ne pubblicate due, rendete quello API più stretto e
non lasciateci mai entrare una voce di marketing. Confrontiamo entrambe le forme fianco a fianco in
&lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;changelog vs note di rilascio&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Dove dovrebbe vivere un changelog di API?&lt;/h2&gt;
&lt;p&gt;Accanto alla documentazione di riferimento, su una URL stabile, con ogni voce indirizzabile
singolarmente tramite un frammento o un proprio percorso. I chiamanti collegano le voci nelle
revisioni degli incidenti e nei ticket interni, e una voce che non si può collegare finisce
incollata come screenshot al suo posto.&lt;/p&gt;
&lt;p&gt;Pubblicatelo anche come output leggibile dalla macchina, oltre che come pagina. Un feed JSON che
segue la &lt;a href=&quot;https://www.jsonfeed.org/version/1.1/&quot;&gt;specifica JSON Feed&lt;/a&gt; o un
&lt;a href=&quot;https://www.rssboard.org/rss-specification&quot;&gt;feed RSS&lt;/a&gt; non costa nulla una volta che le voci sono
dati strutturati, ed è ciò che permette a un cliente di inserire i vostri cambiamenti nel proprio
processo di release. Questo decide anche se qualcuno ci costruisce sopra. GitHub documenta le sue
&lt;a href=&quot;https://docs.github.com/en/rest/about-the-rest-api/api-versions&quot;&gt;versioni della REST API&lt;/a&gt; accanto
al riferimento per lo stesso motivo: la politica delle versioni fa parte dell&amp;#39;interfaccia.&lt;/p&gt;
&lt;h2&gt;Come si presenta una buona voce nella pratica?&lt;/h2&gt;
&lt;p&gt;Tre voci della stessa settimana, nella forma descritta sopra:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2026-09-02  Breaking  v2
  `POST /invoices` ora rifiuta una `currency` che non corrisponde alla
  valuta dell&amp;#39;account del cliente, restituendo 422 invece di convertire
  silenziosamente. I chiamanti che facevano affidamento sulla conversione
  devono inviare la valuta dell&amp;#39;account. Riguarda solo v2; v1 resta
  invariata fino al sunset del 2027-01-15.

2026-09-02  Additive  v1, v2
  `Invoice` guadagna un timestamp `settled_at`, null finché la fattura
  non viene saldata. Nessuna azione richiesta. I client che rifiutano
  campi sconosciuti dovrebbero essere aggiornati.

2026-08-31  Fixed  v2
  `GET /invoices?status=` restituiva una pagina vuota invece di un 400
  per uno stato sconosciuto. Ora restituisce 400 con i valori accettati.
  I chiamanti con un errore di battitura prima non vedevano risultati,
  ora vedono un errore.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La terza è il tipo più spesso omesso, perché internamente è una correzione di bug. Per un chiamante
che ha costruito un retry intorno a quella pagina vuota, è un cambiamento di comportamento, e la
voce è ciò che evita il ticket di supporto. L&amp;#39;etichetta dice fixed e il corpo dice cosa un chiamante
potrebbe notare, che è la distinzione che mantiene onesto il log senza gonfiare ogni correzione a
breaking change.&lt;/p&gt;
&lt;h2&gt;Come si iscrivono i chiamanti?&lt;/h2&gt;
&lt;p&gt;Dategli più di un canale, perché hanno lavori diversi. Un feed per lo sviluppatore che vuole tutto.
Email per chi vuole solo i breaking change. Header di risposta per il codice stesso, l&amp;#39;unico
iscritto che non dimentica mai di controllare: l&amp;#39;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8594&quot;&gt;header &lt;code&gt;Sunset&lt;/code&gt; definito in RFC 8594&lt;/a&gt;
mette la data di ritiro nella risposta, dove una libreria client può registrarla.&lt;/p&gt;
&lt;p&gt;Il canale che la maggior parte dei team salta è quello diretto. Se un chiamante ha usato la scorsa
settimana il campo che state cambiando, sapete chi è, e una email a quegli account vale più di
qualsiasi quantità di broadcast. È la stessa disciplina del
&lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;chiudere il ciclo di feedback del cliente&lt;/a&gt;, applicata a un
cambiamento che nessuno ha richiesto: le persone coinvolte vengono avvisate individualmente, e a
tutti gli altri arriva il feed. Un webhook è
un quarto canale con una propria modalità di fallimento da conoscere prima di farci affidamento:
&lt;a href=&quot;https://changeloop.dev/blog/it/webhook-changelog/&quot;&gt;i changelog dei webhook&lt;/a&gt; copre perché un cambiamento di payload lì
si rompe in silenzio, senza chiamante che possa rifiutare la nuova forma.&lt;/p&gt;
&lt;h2&gt;Come si scrive una voce per un breaking change?&lt;/h2&gt;
&lt;p&gt;Iniziate con la rottura, non con il motivo. Un chiamante che scorre dieci voci deve sapere nella
prima frase se questa gli costerà lavoro. Poi la data, le versioni coinvolte, la migrazione, e la
scadenza se il vecchio comportamento sta per sparire invece di cambiare.&lt;/p&gt;
&lt;p&gt;Mettete lo stesso contenuto nell&amp;#39;avviso di deprecazione, nell&amp;#39;header di risposta e nell&amp;#39;email
diretta, formulato in modo coerente, e date a tutti e quattro la stessa data. La divergenza tra loro
è l&amp;#39;errore che trasforma un cambiamento pianificato in un incidente, perché il chiamante che ne ha
letto solo uno agisce sulla data sbagliata.
&lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;Cos&amp;#39;è un breaking change&lt;/a&gt; copre la decisione in sé, e
&lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;come deprecare un&amp;#39;API&lt;/a&gt; copre il calendario che segue.&lt;/p&gt;
&lt;p&gt;In changeloop, un cambiamento di API diventa una voce quando la pull request viene fusa, una
persona modifica e approva la bozza, e la voce viene pubblicata su &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;feed e widget&lt;/a&gt; nello
stesso momento in cui un chiamante il cui feedback dal widget è diventato l&amp;#39;issue GitHub chiusa dalla
pull request viene avvisato su quell&amp;#39;issue. Il passo di revisione è
quello che conta qui: un changelog di API è un documento contrattuale, e nessuna bozza dovrebbe
raggiungere un chiamante senza che una persona l&amp;#39;abbia letta.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ogni cambiamento di API ha bisogno di una voce nel changelog?&lt;/strong&gt;
Ogni cambiamento che un chiamante corretto potrebbe notare sì, inclusi quelli che considerate
interni. I cambiamenti senza effetto osservabile sulla richiesta o sulla risposta no, e aggiungerli
allena i lettori a scorrere senza leggere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il changelog di API dovrebbe vivere nei docs o sul sito di marketing?&lt;/strong&gt;
Nei docs, accanto al riferimento. Chi legge di solito è già lì, e un changelog sul sito di marketing
tende ad acquisire un pubblico per cui non è stato scritto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fino a quando dovrebbe risalire?&lt;/strong&gt;
Indefinitamente. Le voci vengono citate anni dopo nelle revisioni degli incidenti, e un log troncato
rompe quei link. Paginare invece di potare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Serve un changelog separato per ogni versione di API?&lt;/strong&gt;
No, un unico log con un campo versione per voce è più facile da leggere e da cercare. Filtrare per
versione è una funzione della pagina, non un motivo per dividere il documento.&lt;/p&gt;
</content:encoded></item><item><title>Come costruire una pagina di changelog che si segue</title><link>https://changeloop.dev/blog/it/changelog-page/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/changelog-page/</guid><description>Una pagina di changelog vale la pena quando qualcuno ci torna. Dove dovrebbe vivere, cosa serve a ogni voce, feed e markup, e come si inserisce il widget.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Una pagina di changelog vale la pena costruirla quando qualcuno ci tornerebbe. È un&amp;#39;asticella più
alta che averne semplicemente una, ed è l&amp;#39;asticella su cui la maggior parte fallisce: una pagina
che esiste, è collegata nel footer, si aggiorna a raffiche e non la visita nessuno tranne durante
un incidente. Le decisioni che separano le due si prendono prima di scrivere qualsiasi cosa, e
riguardano soprattutto dove vive la pagina e cos&amp;#39;altro viene generato dallo stesso contenuto.&lt;/p&gt;
&lt;h2&gt;Cos&amp;#39;è una pagina di changelog?&lt;/h2&gt;
&lt;p&gt;È l&amp;#39;elenco pubblico e datato di cosa è cambiato in un prodotto, su una URL che vi appartiene. È una
di cinque superfici su cui possono apparire le stesse voci, e la domanda utile non è quale
scegliere ma quale sia canonica e quali vengano generate a partire da essa.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Superficie&lt;/th&gt;
&lt;th&gt;Meglio per&lt;/th&gt;
&lt;th&gt;Costo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Pagina ospitata&lt;/td&gt;
&lt;td&gt;Ricerca, collegamenti, il registro lungo&lt;/td&gt;
&lt;td&gt;Una URL e un template&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Widget in-app&lt;/td&gt;
&lt;td&gt;Raggiungere utenti che non visitano mai la pagina&lt;/td&gt;
&lt;td&gt;Un embed, e moderazione&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sezione docs&lt;/td&gt;
&lt;td&gt;Pubblico API e sviluppatori&lt;/td&gt;
&lt;td&gt;Tenerlo accanto al riferimento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feed JSON&lt;/td&gt;
&lt;td&gt;Clienti che costruiscono sui vostri cambiamenti&lt;/td&gt;
&lt;td&gt;Struttura che avete già&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feed RSS&lt;/td&gt;
&lt;td&gt;Sviluppatori che si iscrivono una volta&lt;/td&gt;
&lt;td&gt;Quasi niente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Scegliete una fonte canonica, pubblicate una volta, e generate il resto. I team che mantengono
pagina e widget separatamente a mano finiscono con due testi che non concordano, e la discrepanza
la scopre un cliente.&lt;/p&gt;
&lt;h2&gt;Dove dovrebbe vivere una pagina di changelog?&lt;/h2&gt;
&lt;p&gt;Sul vostro dominio, su un percorso stabile, con ogni voce indirizzabile singolarmente. Le tre
collocazioni comuni sono un percorso sul sito principale, un sottodominio, e una sezione della
documentazione. Un percorso sul sito principale è la scelta predefinita contro cui argomentare, non
a favore: eredita l&amp;#39;autorità del sito, non serve un certificato o DNS extra, e mantiene la pagina
nella stessa navigazione di tutto il resto.&lt;/p&gt;
&lt;p&gt;Un sottodominio è la risposta giusta quando la pagina è servita da un sistema diverso dal sito di
marketing e altrimenti fareste proxy. Il costo è che accumula autorità separatamente. Mettere il
changelog nei docs è giusto quando il pubblico è formato da sviluppatori, per la ragione trattata in
&lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;changelog di API&lt;/a&gt;: chi legge di solito è già lì.&lt;/p&gt;
&lt;p&gt;Più della scelta conta che le voci siano collegabili singolarmente. Le persone collegano le voci
nelle revisioni degli incidenti e nei ticket interni, e una voce che si può collegare solo come &amp;quot;il
changelog, scorri giù&amp;quot; finisce incollata come screenshot al suo posto.&lt;/p&gt;
&lt;h2&gt;Cosa serve a una pagina di changelog?&lt;/h2&gt;
&lt;p&gt;Cinque cose, e sulle prime due falliscono la maggior parte delle pagine. Una voce datata per
cambiamento, la più recente per prima. Una categoria o etichetta per voce, per poter scorrere in
cerca del tipo che interessa. Un permalink per voce. Una via di iscrizione. Una ricerca o filtro
oltre le circa cinquanta voci.&lt;/p&gt;
&lt;p&gt;Tutto il resto è opzionale. Gli screenshot aiutano e costano manutenzione. I nomi degli autori
costruiscono fiducia in alcuni prodotti e rumore in altri. I numeri di versione contano per i
chiamanti di un&amp;#39;API e per quasi nessun altro. &lt;a href=&quot;https://keepachangelog.com/en/1.1.0/&quot;&gt;Keep a Changelog&lt;/a&gt;
è una scelta predefinita ragionevole per le etichette se non avete motivo di inventarne di vostre,
e la sua regola centrale è quella da tenere anche se scartate il resto: il log è per gli esseri
umani.&lt;/p&gt;
&lt;p&gt;Raggruppate per data invece che per release quando il vostro prodotto rilascia continuamente. Un
lettore che scandaglia &amp;quot;questo era prima o dopo il nostro incidente del nove&amp;quot; cerca una data, e una
pagina organizzata per numero di versione lo costringe a fare i conti.&lt;/p&gt;
&lt;h2&gt;Pagina o widget in-app?&lt;/h2&gt;
&lt;p&gt;Entrambi, da un&amp;#39;unica fonte. La pagina è dove vivono ricerca, link e il registro lungo. Il widget è
come raggiungete la maggioranza degli utenti che non visiterà mai la pagina, e funziona perché
appare nel prodotto che stanno già usando.&lt;/p&gt;
&lt;p&gt;Il fallimento del widget è l&amp;#39;interruzione. Un badge che chiede attenzione per ogni voce viene
scartato in modo permanente entro una settimana, il che vi costa il canale per la voce che
contava davvero. Contate i non letti dall&amp;#39;ultima volta che il lettore ha guardato, seminate il
contatore in silenzio alla prima visita così nessuno viene accolto da un badge di un anno di
storia, e lasciate che sia il lettore ad aprirlo invece di aprirlo per lui.&lt;/p&gt;
&lt;h2&gt;Come si rende leggibile dalla macchina una pagina di changelog?&lt;/h2&gt;
&lt;p&gt;Pubblicate le stesse voci come feed. Un &lt;a href=&quot;https://www.jsonfeed.org/version/1.1/&quot;&gt;feed JSON&lt;/a&gt; è
l&amp;#39;opzione a minore attrito per chiunque lo consumi via codice, e un
&lt;a href=&quot;https://www.rssboard.org/rss-specification&quot;&gt;feed RSS&lt;/a&gt; è ciò che si aspetta uno sviluppatore che si
iscrive in un reader. Entrambi costano poco una volta che le voci sono dati strutturati invece di
HTML scritto a mano, il che è l&amp;#39;argomento reale per mantenere strutturata la copia canonica.&lt;/p&gt;
&lt;p&gt;Marcate anche la pagina. Le voci sono opere con data e titolo, e &lt;a href=&quot;https://schema.org/CreativeWork&quot;&gt;schema.org&lt;/a&gt;
fornisce il vocabolario. Vale la pena per lo stesso motivo dei permalink: rende la pagina utilizzabile
da cose che non sono un browser, incluso il processo di release di un cliente. Niente di
tutto questo funziona se le voci sottostanti non sono mai state dati strutturati fin dall&amp;#39;inizio;
&lt;a href=&quot;https://changeloop.dev/blog/it/changelog-file-formats/&quot;&gt;formati file del changelog&lt;/a&gt; copre cosa costa ciascuno tra
Markdown, JSON e YAML come fonte di verità da cui questo feed e questo markup vengono davvero
generati.&lt;/p&gt;
&lt;h2&gt;Una pagina di changelog aiuta la SEO?&lt;/h2&gt;
&lt;p&gt;Indirettamente e lentamente. Le voci singole raramente posizionano, perché non puntano a nessuna
query che qualcuno digita. La pagina si guadagna il suo posto tramite i link: le voci vengono citate
in risposte di supporto, forum e analisi degli incidenti, e quei link si accumulano su una URL che
vi appartiene. Una pagina aggiornata ogni settimana per due anni è anche un segnale di freschezza
credibile per il prodotto a cui appartiene.&lt;/p&gt;
&lt;p&gt;Ciò che non funziona è trattare le voci come content marketing. Una voce gonfiata a tre paragrafi
per allungarla è peggiore nel suo lavoro reale, cioè dire a un lettore in una frase se qualcosa che
usa è cambiato. Se volete che il changelog sostenga la ricerca, mettete lo sforzo nei permalink, nel
feed e nei link interni verso di esso, e lasciate le voci brevi. La nostra pagina di
&lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; raccoglie pagine che colgono questo equilibrio.&lt;/p&gt;
&lt;h2&gt;Come si iscrive la gente?&lt;/h2&gt;
&lt;p&gt;Dategli le vie che già usano: un feed RSS o JSON per gli sviluppatori, email per chi vuole sentire
solo le cose importanti, e il widget in-app per tutti quelli che non faranno mai né l&amp;#39;uno né
l&amp;#39;altro. Chiedete cosa vogliono sentire invece di darlo per scontato, perché un lettore che vuole
breaking change e riceve correzioni di testo si disiscrive da entrambi.&lt;/p&gt;
&lt;p&gt;La via da aggiungere per ultima è quella che chiude il ciclo. Quando una voce risolve qualcosa che
una persona specifica ha chiesto, ditelo direttamente invece di sperare che legga la pagina. In
changeloop la voce viene pubblicata in una sola volta su &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;pagina, feed e widget&lt;/a&gt;, e una
persona il cui feedback dal widget è diventato l&amp;#39;issue GitHub chiusa dalla pull request viene avvisata
su quell&amp;#39;issue con un link alla voce, e vede la voce nel widget. Il meccanismo è lo
stesso di qualsiasi iscrizione; la differenza è che chi riceve ha già chiesto. È l&amp;#39;argomento
sviluppato in &lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;chiudere il ciclo di feedback dal changelog&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La pagina di changelog dovrebbe stare su un sottodominio o un percorso?&lt;/strong&gt;
Un percorso sul sito principale per default, perché eredita l&amp;#39;autorità del sito e non serve
infrastruttura extra. Un sottodominio si giustifica quando un sistema diverso serve la pagina.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quante voci dovrebbe mostrare la pagina alla volta?&lt;/strong&gt;
Abbastanza da riempire uno schermo e non di più, con paginazione dopo. Caricare due anni di storia
in un documento è lento e rende più difficile trovare la voce più recente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le voci vecchie andrebbero mai cancellate?&lt;/strong&gt;
No. Vengono citate da fuori del vostro sito e i link si rompono. Correggete una voce sul posto con
una nota, e mantenete viva la URL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ogni cambiamento deve apparire sulla pagina?&lt;/strong&gt;
Solo quelli che un utente potrebbe notare. Una pagina che registra refactoring interni allena i
lettori a scorrere senza leggere, e una pagina scorsa senza leggere fallisce il giorno in cui
porta qualcosa di urgente.&lt;/p&gt;
</content:encoded></item><item><title>Il template email di aggiornamento prodotto che si legge</title><link>https://changeloop.dev/blog/it/product-update-email/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/product-update-email/</guid><description>L&apos;email di aggiornamento che si legge è andata a chi l&apos;ha chiesta. Un template, i quattro tipi di email, oggetti efficaci, segmentazione e consenso.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;L&amp;#39;email di aggiornamento prodotto che si legge è quella inviata a qualcuno che ha chiesto esattamente
ciò che annuncia. Tutto il resto compete con il resto della casella di posta per interesse, una gara
che un annuncio di release perde la maggior parte delle settimane. Questo unico fatto dovrebbe
decidere la forma dell&amp;#39;email prima di qualsiasi formulazione: chi la riceve, e cosa ha fatto quella
persona per finire nella lista.&lt;/p&gt;
&lt;h2&gt;Cos&amp;#39;è un&amp;#39;email di aggiornamento prodotto?&lt;/h2&gt;
&lt;p&gt;È un messaggio che dice agli utenti esistenti cosa è cambiato in un prodotto che già usano. Ci sono
quattro tipi distinti, e trattarli come un&amp;#39;unica lista è il motivo per cui i tassi di apertura
decadono. Ognuno ha un trigger diverso, un pubblico diverso e una frequenza accettabile diversa.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tipo&lt;/th&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Pubblico&lt;/th&gt;
&lt;th&gt;Frequenza&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Notifica mirata&lt;/td&gt;
&lt;td&gt;La richiesta specifica di qualcuno è stata rilasciata&lt;/td&gt;
&lt;td&gt;Una persona&lt;/td&gt;
&lt;td&gt;Ogni volta che succede&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avviso breaking change&lt;/td&gt;
&lt;td&gt;Un cambiamento che costa lavoro al lettore&lt;/td&gt;
&lt;td&gt;Solo account coinvolti&lt;/td&gt;
&lt;td&gt;Ogni volta che succede&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Digest&lt;/td&gt;
&lt;td&gt;Il passare del tempo&lt;/td&gt;
&lt;td&gt;Utenti opt-in&lt;/td&gt;
&lt;td&gt;Al massimo mensile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Annuncio di lancio&lt;/td&gt;
&lt;td&gt;Un lancio che vale un&amp;#39;interruzione&lt;/td&gt;
&lt;td&gt;Segmento o tutti&lt;/td&gt;
&lt;td&gt;Raro, e dovrebbe sembrare raro&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;La maggior parte dei team costruisce solo il terzo, lo manda a tutti, e conclude che le email di
aggiornamento prodotto non funzionano. I primi due portano quasi tutto il valore, perché il lettore
ha un motivo precedente per interessarsi, e il messaggio arriva mentre quel motivo è vivo.&lt;/p&gt;
&lt;p&gt;Tutte e quattro le righe qui sono scritte per le clienti. Vendite, supporto e customer success
devono sapere anche loro cosa è uscito, di solito in una forma diversa da queste quattro;
&lt;a href=&quot;https://changeloop.dev/blog/it/internal-release-notes/&quot;&gt;release note interne&lt;/a&gt; copre cosa dovrebbe dire quel documento e
perché deve uscire prima di quella rivolta ai clienti.&lt;/p&gt;
&lt;p&gt;L&amp;#39;email è uno dei diversi canali che un annuncio di lancio può usare, non l&amp;#39;unico. &lt;a href=&quot;https://changeloop.dev/blog/it/new-feature-announcement/&quot;&gt;Come annunciare una nuova funzionalità&lt;/a&gt; copre gli altri, e come scegliere tra loro in base a quanto è grande la funzionalità.&lt;/p&gt;
&lt;h2&gt;Cosa va nel template?&lt;/h2&gt;
&lt;p&gt;Sei blocchi, in quest&amp;#39;ordine. Il primo è quello che di solito manca ed è quello che fa il lavoro.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Oggetto:  &amp;lt;cosa è cambiato, con le parole del lettore&amp;gt;

1. Perché ricevi questa email
   &amp;quot;Hai chiesto l&amp;#39;export CSV a marzo.&amp;quot; oppure
   &amp;quot;La tua integrazione chiama /v1/invoices, che cambia il 15 gennaio.&amp;quot;

2. Cosa è cambiato
   Una frase. Cosa è ora possibile, o cosa ora si rompe.

3. Cosa devi fare
   Spesso &amp;quot;niente&amp;quot;. Ditelo esplicitamente, non lasciatelo implicito.

4. Dove vederlo
   Un link alla voce del changelog, non alla homepage.

5. Quando
   La data in cui è stato rilasciato, o da quando vale.

6. Come annullare l&amp;#39;iscrizione
   Un clic, e rispettato immediatamente.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il blocco 1 è la differenza tra un messaggio e una diffusione generica. Un lettore a cui viene detto,
nella prima riga, che questa è la risoluzione di qualcosa che ha richiesto personalmente, legge il
resto. Senza di esso, i blocchi da 2 a 5 sono una newsletter per quanto ben scritta.&lt;/p&gt;
&lt;p&gt;Tenete l&amp;#39;insieme sotto le circa 150 parole. L&amp;#39;email è un puntatore alla voce del changelog, e la
voce è dove appartiene il dettaglio. Un&amp;#39;email che riproduce l&amp;#39;intera voce non dà al lettore un
motivo per cliccare, e a voi nessun segnale se è importato a qualcuno.&lt;/p&gt;
&lt;h2&gt;Quali oggetti funzionano?&lt;/h2&gt;
&lt;p&gt;Nominate il cambiamento, non la release. &amp;quot;L&amp;#39;export CSV è live&amp;quot; batte &amp;quot;aggiornamenti di settembre&amp;quot;
perché il primo è un fatto che il lettore può valutare e il secondo è un contenitore. I numeri di
versione nell&amp;#39;oggetto sono utili per chi chiama un&amp;#39;API e rumore per tutti gli altri, un&amp;#39;altra
ragione per separare i pubblici.&lt;/p&gt;
&lt;p&gt;Evitate di affermare un beneficio a cui il lettore non ha acconsentito. &amp;quot;I tuoi report ora sono più
veloci&amp;quot; afferma qualcosa sulla sua esperienza; &amp;quot;I report oltre 10.000 righe ora caricano in meno di
un secondo&amp;quot; riporta un cambiamento e lascia a lui decidere se conta.&lt;/p&gt;
&lt;h2&gt;Quando inviarla, e a chi?&lt;/h2&gt;
&lt;p&gt;Inviate una notifica mirata nel momento in cui la cosa viene rilasciata, alle persone che l&amp;#39;hanno
chiesta, individualmente. Inviate un avviso di breaking change non appena la data è certa e di nuovo
poco prima, agli account effettivamente coinvolti invece che a tutta la lista. Inviate un digest solo
se avete abbastanza cambiamenti da far perdere qualcosa a un lettore altrimenti, e lasciate che le
persone si iscrivano separatamente.&lt;/p&gt;
&lt;p&gt;La lista che quasi non dovreste mai usare è &amp;quot;tutti gli utenti&amp;quot;. Trasforma un messaggio specifico in
uno generico, e allena l&amp;#39;annullamento dell&amp;#39;iscrizione. Segmentate per comportamento che già
memorizzate: chi l&amp;#39;ha chiesto, chi usa questo endpoint, chi è su questo piano.&lt;/p&gt;
&lt;h2&gt;Serve il consenso per inviarla?&lt;/h2&gt;
&lt;p&gt;Per i clienti esistenti, un aggiornamento su un servizio che usano è di solito una questione legale
diversa dal marketing verso un potenziale cliente, e la risposta dipende da dove si trovano e cosa
avete detto loro alla registrazione. Nella UE la domanda rilevante è quale base giuridica
dell&amp;#39;&lt;a href=&quot;https://gdpr-info.eu/art-6-gdpr/&quot;&gt;articolo 6 del GDPR&lt;/a&gt; si applica, e negli Stati Uniti i
messaggi commerciali portano requisiti specifici indicati nella
&lt;a href=&quot;https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business&quot;&gt;guida alla conformità CAN-SPAM della FTC&lt;/a&gt;.
Entrambe fanno la stessa richiesta pratica: dite chi siete, chiarite lo scopo, e lasciate che le
persone possano fermarsi.&lt;/p&gt;
&lt;p&gt;Qualunque sia la base, tenete separati i flussi transazionali e di marketing a livello di invio. Un
avviso di breaking change che un cliente ha disiscritto perché condivideva una lista con un digest
promozionale è un incidente di supporto che aspetta la sua data.&lt;/p&gt;
&lt;h2&gt;Come si presenta compilata?&lt;/h2&gt;
&lt;p&gt;La notifica mirata, l&amp;#39;email di aggiornamento prodotto di maggior valore e quella che la maggior
parte dei team non costruisce mai:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Oggetto: L&amp;#39;export CSV è live

Ciao Dana,

hai chiesto l&amp;#39;export CSV a marzo.

È diventato live stamattina. I report ora hanno un pulsante
Export che genera un CSV della vista corrente, filtri inclusi.

Niente da fare da parte tua. È già attivo sul tuo account.

  Dettagli: example.com/changelog#csv-export
  Rilasciato: 2 settembre 2026

Ricevi questa email perché l&amp;#39;hai chiesta. Annulla iscrizione
agli aggiornamenti sulle richieste: &amp;lt;link&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Novanta parole, e il lettore sa nella prima riga perché è arrivata. Confrontatela con lo stesso
cambiamento in un digest mensile, dove appare come uno tra nove punti e Dana non ha motivo di notare
che la sua richiesta è uscita.&lt;/p&gt;
&lt;h2&gt;Cosa dovreste misurare?&lt;/h2&gt;
&lt;p&gt;Non il tasso di apertura da solo. Per una notifica mirata la domanda è se la persona che ha chiesto
è tornata e ha usato la cosa, quindi il numero da osservare è il clic verso la voce e se quell&amp;#39;account
usa la funzione entro una settimana. Per un avviso di breaking change è la copertura: quale quota di
account coinvolti ha aperto prima della data, e con chi avete fatto follow-up individuale.&lt;/p&gt;
&lt;p&gt;Un digest è l&amp;#39;unico dei quattro dove un tasso di apertura conta qualcosa, e anche lì è più utile come
tendenza contro la propria storia che contro un benchmark di settore. Tipi diversi di email di
aggiornamento prodotto hanno lavori diversi, quindi una cifra mediata su tutti non descrive nulla su
cui agire.&lt;/p&gt;
&lt;h2&gt;In cosa differisce dalle note di rilascio?&lt;/h2&gt;
&lt;p&gt;Le note di rilascio sono un documento che resta disponibile. L&amp;#39;email è un meccanismo di consegna
che accade una volta. Lo stesso cambiamento produce entrambi, e l&amp;#39;email dovrebbe essere più breve
della voce a cui rimanda. &lt;a href=&quot;https://changeloop.dev/blog/it/release-notes-best-practices/&quot;&gt;Note di rilascio: le migliori pratiche&lt;/a&gt;
copre il documento, e &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;changelog vs note di rilascio&lt;/a&gt; copre
quale state scrivendo.&lt;/p&gt;
&lt;p&gt;Il rapporto da far funzionare: la voce del changelog è il testo canonico e l&amp;#39;email lo cita. Quando
i due divergono, il lettore che clicca trova una descrizione diversa del cambiamento e smette di
fidarsi di entrambi. Pubblicare prima la voce e generare l&amp;#39;email da essa elimina la deriva per
costruzione. Changeloop funziona allo stesso modo dal suo lato: una voce viene revisionata e pubblicata una volta su
&lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;pagina, feed e widget&lt;/a&gt;, e la persona che l&amp;#39;ha chiesta tramite il widget viene avvisata
sull&amp;#39;issue GitHub nato dal suo feedback, e nel widget stesso. Changeloop non invia l&amp;#39;email; il
vostro strumento di email cita la voce pubblicata.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Con quale frequenza dovrebbe uscire un&amp;#39;email di aggiornamento prodotto?&lt;/strong&gt;
Tanto spesso quanto c&amp;#39;è qualcosa di specifico che il destinatario vuole sapere, che per una notifica
mirata è ogni volta che la sua richiesta viene rilasciata e per un digest al massimo mensile.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L&amp;#39;email dovrebbe contenere l&amp;#39;intera voce del changelog?&lt;/strong&gt;
No. Una frase e un link. La voce è la versione canonica, e una copia completa nell&amp;#39;email significa
due testi da mantenere allineati.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Che tasso di apertura dovrei aspettarmi?&lt;/strong&gt;
Confrontate ogni tipo contro se stesso invece che contro un benchmark. Una notifica mirata e un
digest mensile sono prodotti diversi, e mediarli nasconde l&amp;#39;unica cifra su cui vale la pena agire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Serve una lista separata per i breaking change?&lt;/strong&gt;
Sì, e dovrebbe essere quella da cui le persone non possono disiscriversi con noncuranza senza
capirne la conseguenza, perché è quella che costa loro un&amp;#39;interruzione.&lt;/p&gt;
</content:encoded></item><item><title>Come deprecare un&apos;API senza perdere gli sviluppatori</title><link>https://changeloop.dev/blog/it/api-deprecation/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/api-deprecation/</guid><description>La deprecazione è una promessa con una data. Il calendario, il modello di avviso, gli header di risposta, e il passo che evita un incidente al sunset.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Deprecare un&amp;#39;API significa annunciare che qualcosa funziona ancora oggi e smetterà di funzionare
in una data dichiarata, e poi mantenere entrambe le metà di quella promessa. La maggior parte delle
deprecazioni fallisce sulla seconda metà: la data slitta silenziosamente, oppure arriva e i
chiamanti che non hanno mai visto l&amp;#39;avviso lo scoprono da un errore. Una deprecazione è finita
quando ogni chiamante interessato è migrato o gli è stato detto, individualmente, che non lo è.&lt;/p&gt;
&lt;h2&gt;Cos&amp;#39;è la deprecazione di un&amp;#39;API?&lt;/h2&gt;
&lt;p&gt;La deprecazione è il periodo tra l&amp;#39;annuncio che un endpoint, campo o versione sta per sparire e la
sua effettiva rimozione. Durante quel periodo il vecchio comportamento continua a funzionare, la
documentazione dice che sta per andarsene, e ogni risposta porta un avviso leggibile da macchina.
La rimozione è l&amp;#39;evento separato, successivo, spesso chiamato sunset. I due si confondono, e la
confusione è dove avviene il danno: &amp;quot;deprecated&amp;quot; inizia a significare &amp;quot;forse è già sparito&amp;quot;, e i
chiamanti smettono di fidarsi di entrambe le parole.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Termine&lt;/th&gt;
&lt;th&gt;Significato&lt;/th&gt;
&lt;th&gt;Su cosa possono contare i chiamanti&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Deprecated&lt;/td&gt;
&lt;td&gt;Annunciato come in via di sparizione, funziona ancora&lt;/td&gt;
&lt;td&gt;Comportamento completo fino alla data di sunset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sunset&lt;/td&gt;
&lt;td&gt;La data in cui smette di funzionare&lt;/td&gt;
&lt;td&gt;Nulla dopo questa data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retired / rimosso&lt;/td&gt;
&lt;td&gt;Sparito; le richieste falliscono&lt;/td&gt;
&lt;td&gt;Un errore, idealmente uno che nomina il sostituto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legacy&lt;/td&gt;
&lt;td&gt;Indefinito. Evitare la parola&lt;/td&gt;
&lt;td&gt;Nulla, che è il problema&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Quanto dovrebbe durare un periodo di deprecazione?&lt;/h2&gt;
&lt;p&gt;Abbastanza perché un chiamante lo scopra e faccia il lavoro, misurato da quando l&amp;#39;avviso lo ha
raggiunto piuttosto che da quando l&amp;#39;avete scritto. Novanta giorni è il minimo comune per un&amp;#39;API web
pubblica. Dodici mesi è normale per qualsiasi cosa incorporata in software che gli utenti finali
installano, perché la correzione deve passare anche attraverso il loro processo di rilascio. Le linee
guida di Google sul versioning, &lt;a href=&quot;https://google.aip.dev/185&quot;&gt;AIP-185&lt;/a&gt;, chiedono un periodo di
transizione ragionevole e raccomandano 180 giorni persino prima di rimuovere funzionalità beta, e Kubernetes documenta la sua
&lt;a href=&quot;https://kubernetes.io/docs/reference/using-api/deprecation-policy/&quot;&gt;politica di deprecazione&lt;/a&gt; in
conteggio di rilasci piuttosto che mesi, che è l&amp;#39;unità corretta quando i vostri chiamanti
aggiornano per versione.&lt;/p&gt;
&lt;p&gt;Scegliete un periodo, scrivetelo come politica, e smettete di deciderlo per ogni cambiamento. Una
politica pubblicata trasforma ogni deprecazione da una negoziazione in un&amp;#39;applicazione di una
regola.&lt;/p&gt;
&lt;p&gt;Scrivere la politica di deprecazione copre l&amp;#39;inizio della finestra; &lt;a href=&quot;https://changeloop.dev/blog/it/sunsetting-api-version/&quot;&gt;ritirare una versione di
API&lt;/a&gt; copre l&amp;#39;avviso separato necessario alla fine, quando il
periodo scade davvero e la versione smette di funzionare.&lt;/p&gt;
&lt;h2&gt;Il calendario di deprecazione&lt;/h2&gt;
&lt;p&gt;Quattro date, annunciate insieme il primo giorno. Ciascuna è una voce di changelog separata quando
arriva, così la storia viene raccontata quattro volte a chiunque legga solo il changelog.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Annunciare.&lt;/strong&gt; La voce dice cosa viene deprecato, perché, cosa lo sostituisce, e la data di
sunset. La documentazione della vecchia cosa guadagna un banner che collega alla migrazione. Le
risposte guadagnano gli header descritti sotto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ricordare, a metà strada.&lt;/strong&gt; Una seconda voce, e un messaggio diretto a ogni chiamante che
ancora usa il vecchio comportamento. Questo è il passo che ha bisogno di dati di utilizzo: se
non potete elencare chi sta ancora chiamando l&amp;#39;endpoint deprecato, non potete farlo, e vale la
pena risolverlo prima della prossima deprecazione.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brownout, poco prima della data.&lt;/strong&gt; Restituite errori per il vecchio comportamento per una
finestra breve, un&amp;#39;ora o un giorno, poi ripristinatelo. I chiamanti che hanno perso ogni avviso
lo scoprono ora, mentre c&amp;#39;è ancora tempo. GitHub ha usato brownout programmati prima di
&lt;a href=&quot;https://github.blog/2020-07-30-token-authentication-requirements-for-api-and-git-operations/&quot;&gt;ritirare l&amp;#39;autenticazione con password per l&amp;#39;API&lt;/a&gt;,
ed è il passo singolo più efficace di questa lista.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sunset.&lt;/strong&gt; Rimuovetelo. L&amp;#39;errore che lo sostituisce nomina il sostituto e collega la guida di
migrazione. Mantenete l&amp;#39;errore in posizione a lungo; un 404 non dice nulla a un chiamante.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Cosa dovrebbe dire un avviso di deprecazione?&lt;/h2&gt;
&lt;p&gt;Un avviso di deprecazione dice cosa sta sparendo, quando smette, cosa usare al suo posto, e chi è
interessato. Ecco la forma, compilata:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;GET /v1/reports/daily&lt;/code&gt; è deprecato e smette di funzionare il 1° marzo 2027.&lt;/strong&gt;
È sostituito da &lt;code&gt;GET /v2/reports?granularity=day&lt;/code&gt;, che restituisce gli stessi dati con uno schema
stabile e paginazione. Interessa le 214 integrazioni che hanno chiamato l&amp;#39;endpoint v1 negli
ultimi 30 giorni; se la vostra è una di queste, riceverete anche questo avviso via email. Guida
di migrazione: [link]. Nulla cambia fino al 1° marzo 2027. Da quella data l&amp;#39;endpoint v1
restituisce &lt;code&gt;410 Gone&lt;/code&gt; con un link a questa voce.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ogni frase porta qualcosa di cui la lettrice ha bisogno. Il conteggio delle integrazioni
interessate dice a ciascuna lettrice se continuare a leggere. &amp;quot;Nulla cambia fino a&amp;quot; è la frase che
permette a chi non è interessato di chiudere la scheda. La pagina
&lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; raccoglie voci di team che scrivono questa forma con
coerenza, e vale la pena leggerne tre prima di scriverne la prima propria.&lt;/p&gt;
&lt;h2&gt;Quali header dovrebbe inviare un endpoint deprecato?&lt;/h2&gt;
&lt;p&gt;Inviate &lt;code&gt;Deprecation&lt;/code&gt;, &lt;code&gt;Sunset&lt;/code&gt; e un &lt;code&gt;Link&lt;/code&gt; al successore, su ogni risposta dall&amp;#39;endpoint
deprecato, dal giorno dell&amp;#39;annuncio. L&amp;#39;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc9745&quot;&gt;header &lt;code&gt;Deprecation&lt;/code&gt;&lt;/a&gt;
porta la data in cui la deprecazione è entrata in vigore; l&amp;#39;
&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8594&quot;&gt;header &lt;code&gt;Sunset&lt;/code&gt;&lt;/a&gt; porta la data in cui l&amp;#39;endpoint
smette di rispondere; &lt;code&gt;Link: &amp;lt;url&amp;gt;; rel=&amp;quot;successor-version&amp;quot;&lt;/code&gt; indica cosa usare al suo posto.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;HTTP/1.1 200 OK
Deprecation: @1756425600
Sunset: Mon, 01 Mar 2027 00:00:00 GMT
Link: &amp;lt;https://api.example.com/v2/reports&amp;gt;; rel=&amp;quot;successor-version&amp;quot;
Link: &amp;lt;https://example.com/changelog/daily-reports&amp;gt;; rel=&amp;quot;deprecation&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La maggior parte dei chiamanti non leggerà mai gli header di persona. Il loro valore sta nel fatto
che il client HTTP, il gateway o il monitoraggio di un chiamante possono farlo, il che trasforma la
vostra deprecazione in un allarme dalla loro parte piuttosto che una pagina dalla vostra. Gli SDK che
spedite dovrebbero registrare un avviso quando ne vedono uno.&lt;/p&gt;
&lt;h2&gt;Chi è stato informato, e come lo sapete?&lt;/h2&gt;
&lt;p&gt;Questo è il passo che decide se il sunset è tranquillo o un incidente di supporto, ed è il più
difficile da fare solo con un changelog. Una voce di changelog informa chiunque legga il changelog.
Una deprecazione deve raggiungere le persone specifiche il cui codice sta per fallire, e il modo
abituale di trovarle sono gli stessi dati di utilizzo di cui ha bisogno il promemoria a metà
strada: le chiavi API, le app o gli account che hanno chiamato il comportamento deprecato
recentemente.&lt;/p&gt;
&lt;p&gt;Il ciclo che eseguiamo: la voce viene redatta dalla pull request che aggiunge la deprecazione, una
persona rivede la formulazione e la data, e una volta pubblicata la voce stessa è la
notifica. Chiunque abbia inviato dal widget un feedback sul problema, o una richiesta per il
sostituto, diventato un issue GitHub che la pull request chiude, riceve un commento su quell&amp;#39;issue che dice che è stato rilasciato, con un link alla
voce. &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;Feed e widget&lt;/a&gt; servono la stessa voce a tutti gli altri, insieme a ogni altra voce nel
&lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;changelog di API&lt;/a&gt;. Ciò che non facciamo è
lasciare che la deprecazione diventi &amp;quot;rilasciata&amp;quot; prima che una persona l&amp;#39;abbia pubblicata; un
avviso con la data sbagliata è peggio di nessun avviso.&lt;/p&gt;
&lt;p&gt;Qualunque sia il vostro strumento, la domanda a cui dovete poter rispondere il giorno del sunset è:
quali chiamanti stavano ancora usando questo la settimana scorsa, e a quali di loro l&amp;#39;abbiamo detto
direttamente? Se la risposta è &amp;quot;abbiamo pubblicato qualcosa a riguardo&amp;quot;, il sunset non è pronto.&lt;/p&gt;
&lt;h2&gt;Qual è la differenza tra deprecare e versionare?&lt;/h2&gt;
&lt;p&gt;Versionare è come mantenete disponibile il vecchio comportamento mentre esiste il nuovo; deprecare
è come ritirate quello vecchio. Una nuova versione API senza una politica di deprecazione per
quella precedente è un impegno a mantenere entrambe per sempre. Una deprecazione senza
versionamento è un &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;cambiamento che rompe qualcosa&lt;/a&gt; con un ritardo. Vi
servono entrambi, e la versione è la metà più facile. GraphQL è
l&amp;#39;eccezione che vale la pena nominare: di solito non c&amp;#39;è alcun numero di versione da incrementare,
e &lt;a href=&quot;https://changeloop.dev/blog/it/graphql-schema-deprecation/&quot;&gt;deprecazione di schema GraphQL&lt;/a&gt; copre come uno schema
unico condiviso ritira un campo con una direttiva invece.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Un endpoint deprecato dovrebbe continuare a funzionare esattamente come prima?&lt;/strong&gt;
Sì, fino alla data di sunset. Gli unici cambiamenti permessi sono gli header aggiunti e, verso la
fine, un brownout programmato che avete annunciato in anticipo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quale codice di stato dovrebbe restituire un endpoint ritirato?&lt;/strong&gt;
&lt;code&gt;410 Gone&lt;/code&gt;, con un corpo e un header &lt;code&gt;Link&lt;/code&gt; che punta al sostituto e alla voce di changelog. &lt;code&gt;404&lt;/code&gt;
dice che l&amp;#39;URL non è mai esistito, il che è falso e inutile.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un periodo di deprecazione può essere accorciato?&lt;/strong&gt;
Solo per sicurezza. Se il vecchio comportamento è sfruttabile, ditelo, accorciate il periodo, e
dite a ogni chiamante interessato direttamente piuttosto che affidarvi al changelog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Devo deprecare un campo, o solo interi endpoint?&lt;/strong&gt;
Campi, parametri, valori enum, default e header hanno tutti bisogno dello stesso trattamento,
perché ciascuno può rompere un chiamante corretto. Un campo rimosso è la deprecazione più comune e
quella più spesso saltata.&lt;/p&gt;
</content:encoded></item><item><title>Buone pratiche di versionamento API, per i chiamanti</title><link>https://changeloop.dev/blog/it/api-versioning-best-practices/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/api-versioning-best-practices/</guid><description>Versionate solo ciò che rompe qualcosa, mettete la versione ben visibile, e mantenete la vecchia attiva fino a una data. Quattro schemi a confronto.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Il versionamento API è la pratica di mantenere funzionante un vecchio contratto dopo averlo
cambiato, così i chiamanti possono muoversi secondo il proprio calendario invece del vostro. Quella
frase contiene le due decisioni che contano: cosa conta come cambiare il contratto, e per quanto
tempo continua a funzionare quello vecchio. Dove vive il numero di versione, argomento della
maggior parte dei dibattiti sul versionamento, è la meno importante delle tre e la più facile da
azzeccare.&lt;/p&gt;
&lt;h2&gt;Quando si dovrebbe versionare un&amp;#39;API?&lt;/h2&gt;
&lt;p&gt;Versionate un&amp;#39;API solo quando un cambiamento romperebbe un chiamante corretto. I cambiamenti
additivi, nuovi campi, nuovi endpoint, nuovi parametri opzionali, non hanno bisogno di una
versione; i chiamanti scritti contro il vecchio contratto continuano a funzionare e la nuova
capacità è semplicemente lì. Un &lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;cambiamento che rompe qualcosa&lt;/a&gt; ne ha
bisogno, perché l&amp;#39;alternativa è che un chiamante lo scopra da un errore. Versionare ogni rilascio,
inclusi quelli additivi, insegna ai chiamanti che le versioni sono rumore, e smettono di leggere gli
avvisi che contano.&lt;/p&gt;
&lt;p&gt;Il test pratico è lo stesso dell&amp;#39;articolo sui cambiamenti che rompono qualcosa: se un chiamante che
dipendeva solo dal comportamento documentato deve cambiare qualcosa per continuare a funzionare, il
cambiamento ha bisogno di una versione. Se no, rilasciatelo sotto la versione attuale e scrivete
una voce di changelog.&lt;/p&gt;
&lt;h2&gt;Quale schema di versionamento API si dovrebbe usare?&lt;/h2&gt;
&lt;p&gt;Usate lo schema che i vostri chiamanti possono vedere e impostare più facilmente, che per la
maggior parte delle API pubbliche è una versione nel percorso URL o un header di versione datato. I
quattro schemi comuni differiscono meno in capacità che in cosa chiedono al chiamante, e quella è
la base giusta per scegliere.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Schema&lt;/th&gt;
&lt;th&gt;Esempio&lt;/th&gt;
&lt;th&gt;Cosa deve fare il chiamante&lt;/th&gt;
&lt;th&gt;Chi lo usa&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Percorso URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v2/invoices&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cambiare l&amp;#39;URL quando migra&lt;/td&gt;
&lt;td&gt;La maggior parte delle API REST pubbliche&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Header di versione&lt;/td&gt;
&lt;td&gt;&lt;code&gt;X-GitHub-Api-Version: 2022-11-28&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Inviare un header, o accettare il default&lt;/td&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versione account datata&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Stripe-Version: 2026-08-26&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fissare una data per richiesta o per account&lt;/td&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parametro query&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/invoices?version=2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Aggiungere un parametro&lt;/td&gt;
&lt;td&gt;API più vecchie; oggi raramente scelto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Media type&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Accept: application/vnd.example.v2+json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Negoziare tipi di contenuto&lt;/td&gt;
&lt;td&gt;Puristi; pochi chiamanti lo padroneggiano&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Percorso URL&lt;/strong&gt; è il più visibile e il meno flessibile. Ogni chiamante può vedere in quale
versione si trova leggendo una riga di log, e un salto di versione è un cerca-e-sostituisci. Il
costo: l&amp;#39;intera superficie si sposta in una volta, non potete cambiare il contratto di un singolo
endpoint senza coniare una nuova versione per tutti, così le versioni di percorso tendono a essere
rare e grandi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Header di versione&lt;/strong&gt; mantiene stabili gli URL e lascia che il server scelga un default per i
chiamanti che non inviano nulla, così come funziona il
&lt;a href=&quot;https://docs.github.com/en/rest/about-the-rest-api/api-versions&quot;&gt;versionamento dell&amp;#39;API REST di GitHub&lt;/a&gt;:
una versione nominata per data in &lt;code&gt;X-GitHub-Api-Version&lt;/code&gt;, con la versione supportata più vecchia
come default così i chiamanti non versionati non si rompono. Il costo: la versione è invisibile in
un URL e facile da dimenticare in un nuovo client.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Versione account datata&lt;/strong&gt; è lo schema header più un&amp;#39;aggiunta: la versione è memorizzata contro
l&amp;#39;account, così ogni richiesta la ottiene senza inviare nulla. Il
&lt;a href=&quot;https://docs.stripe.com/api/versioning&quot;&gt;versionamento API di Stripe&lt;/a&gt; fissa ogni account alla
versione con cui è stato creato e lascia che una richiesta lo sovrascriva con &lt;code&gt;Stripe-Version&lt;/code&gt;.
Questo è lo schema più amichevole per il chiamante e quello che richiede più lavoro da gestire,
perché il server deve tradurre tra ogni versione supportata e quella attuale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parametro query&lt;/strong&gt; e &lt;strong&gt;media type&lt;/strong&gt; funzionano entrambi e falliscono entrambi il test di
visibilità in modo diverso: un parametro query si perde facilmente costruendo un URL, e una
versione media type è invisibile per quasi qualsiasi strumento con cui un chiamante debugga.
Lo schema di Stripe a date è l&amp;#39;esempio più noto dell&amp;#39;approccio per data, e
&lt;a href=&quot;https://changeloop.dev/blog/it/stripe-api-versioning/&quot;&gt;come Stripe versiona la sua API&lt;/a&gt; lo ripercorre.&lt;/p&gt;
&lt;h2&gt;Come si fa il versionamento API in pratica?&lt;/h2&gt;
&lt;p&gt;In pratica una versione è un insieme nominato di comportamenti, e il server mappa ogni richiesta su
uno di essi. I passi sono gli stessi qualunque sia lo schema che porta il nome.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Nominate le versioni per data o per intero, non per versione semantica.&lt;/strong&gt; Un&amp;#39;API web non è un
pacchetto. I chiamanti non possono fissare una versione minor di un URL, così &lt;code&gt;v2&lt;/code&gt; o
&lt;code&gt;2026-08-26&lt;/code&gt; dice tutto ciò di cui un chiamante ha bisogno, e il
&lt;a href=&quot;https://semver.org/&quot;&gt;versionamento semantico&lt;/a&gt; implica una promessa di compatibilità che lo
schema non può mantenere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tenete la versione fuori dai percorsi di codice che non se ne preoccupano.&lt;/strong&gt; Una versione
dovrebbe selezionare uno strato di traduzione al margine, non biforcare la logica di business.
Due copie complete della codebase sono come una versione finisce non mantenuta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date a ogni versione un default e un documento.&lt;/strong&gt; I chiamanti che non inviano versione
ricevono la più vecchia supportata, mai la più nuova, così un client non fissato non si rompe il
giorno del rilascio. Ogni versione ha una pagina che dice cosa è cambiato rispetto alla
precedente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fissate una finestra di supporto e pubblicatela.&lt;/strong&gt; Le linee
guida di Google sul versionamento, &lt;a href=&quot;https://google.aip.dev/185&quot;&gt;AIP-185&lt;/a&gt;, chiedono un periodo di
transizione ragionevole e ben comunicato e raccomandano 180 giorni persino per le funzionalità beta. Scegliete
una finestra, scrivetela, e applicatela senza rinegoziare per versione.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ritirate le versioni come ritirate gli endpoint.&lt;/strong&gt; Una versione oltre la sua finestra riceve lo
stesso trattamento di qualsiasi &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;API deprecata&lt;/a&gt;: un annuncio, un
header &lt;code&gt;Sunset&lt;/code&gt; (&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc8594&quot;&gt;RFC 8594&lt;/a&gt;) su ogni risposta, un
promemoria a metà strada ai chiamanti rimasti, e una data di rimozione che tiene.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Cosa sono v1 e v2 in un&amp;#39;API REST?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;v1&lt;/code&gt; e &lt;code&gt;v2&lt;/code&gt; sono nomi per due contratti che lo stesso server supporta contemporaneamente. Un &lt;code&gt;v2&lt;/code&gt;
esiste perché qualcosa in &lt;code&gt;v1&lt;/code&gt; non poteva essere cambiato senza rompere i suoi chiamanti, così il
cambiamento è andato in un nuovo contratto e quello vecchio ha continuato a funzionare. I numeri
non implicano che &lt;code&gt;v2&lt;/code&gt; sia completo o che &lt;code&gt;v1&lt;/code&gt; sia morto; entrambe le cose sono vere solo se la
documentazione lo dice. Un &lt;code&gt;v3&lt;/code&gt; che appare ogni trimestre è un segno che si stanno versionando
cambiamenti additivi, o che il contratto non è mai stato progettato per assorbire il cambiamento. gRPC
risolve lo stesso problema diversamente: &lt;a href=&quot;https://changeloop.dev/blog/it/grpc-protobuf-api-changes/&quot;&gt;cambiamenti API gRPC e Protobuf&lt;/a&gt;
copre il versionamento tramite il nome del package in un file &lt;code&gt;.proto&lt;/code&gt; invece di un percorso URL,
e un formato di wire dove rinominare un campo è gratis ma rinumerarlo è un breaking change che
nessun chiamante REST riconoscerebbe come rischioso.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe annunciare un cambio di versione?&lt;/h2&gt;
&lt;p&gt;Un cambio di versione dovrebbe annunciare cosa rompe, chi interessa, come migrare, e per quanto
tempo continua a funzionare la versione precedente. La voce ha la stessa forma di qualsiasi altra
voce di cambiamento che rompe qualcosa, più una riga con la finestra di supporto. Eccone una per
un&amp;#39;API versionata per header:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;La versione API 2026-11-01 è disponibile. La versione 2025-06-15 è supportata fino al 1°
novembre 2027.&lt;/strong&gt;
Nuovo in 2026-11-01: &lt;code&gt;GET /invoices&lt;/code&gt; restituisce &lt;code&gt;amount&lt;/code&gt; in unità minime come intero invece che
come stringa decimale, e il campo deprecato &lt;code&gt;customer_name&lt;/code&gt; viene rimosso a favore dell&amp;#39;oggetto
&lt;code&gt;customer&lt;/code&gt;. Interessa i chiamanti su 2025-06-15 che parsano &lt;code&gt;amount&lt;/code&gt; come stringa, che è il
default per client non fissati creati prima di giugno 2025. Migrazione: parsate &lt;code&gt;amount&lt;/code&gt; come
intero e leggete il nome da &lt;code&gt;customer.name&lt;/code&gt;. Fissate &lt;code&gt;X-Api-Version: 2026-11-01&lt;/code&gt; quando siete
pronti. Nulla cambia per i chiamanti che non fissano versione.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;L&amp;#39;ultima frase è quella che permette alla maggior parte delle lettrici di smettere di leggere, e
appartiene a ogni annuncio di versione. La pagina &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; include
voci di API che versionano così, e la differenza tra le buone e il resto sta soprattutto in
quell&amp;#39;ultima frase.&lt;/p&gt;
&lt;h2&gt;Chi viene informato quando cambia una versione?&lt;/h2&gt;
&lt;p&gt;Tutti sulla versione vecchia, individualmente, e il changelog per tutti gli altri. Un cambio di
versione è l&amp;#39;unico caso in cui &amp;quot;abbiamo pubblicato qualcosa a riguardo&amp;quot; garantisce di perdere
esattamente i chiamanti che contano: quelli che hanno fissato una versione due anni fa e non hanno
letto una nota di rilascio da allora. I dati di utilizzo rispondono chi sono; l&amp;#39;avviso deve
raggiungerli dove sta il loro codice, negli header di risposta e in un messaggio alla proprietaria
dell&amp;#39;account.&lt;/p&gt;
&lt;p&gt;Nel ciclo che eseguiamo, la voce che annuncia una versione viene redatta dalla pull request che la
rilascia, revisionata da una persona, e pubblicata su &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;feed e widget&lt;/a&gt;, dove un client
versionato può leggerla come JSON. Chi ha chiesto il cambiamento, o ha
segnalato il bug che risolve, con un feedback dal widget diventato un issue GitHub che la pull request
chiude, viene informato su quell&amp;#39;issue non appena la voce viene
pubblicata. Il meccanismo è lo stesso di qualsiasi voce; un salto di versione è solo la voce con la
posta più alta.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ogni cambiamento API dovrebbe ottenere una nuova versione?&lt;/strong&gt;
No. Solo i cambiamenti che rompono qualcosa. I cambiamenti additivi si rilasciano sotto la
versione attuale con una voce di changelog. Versionare i cambiamenti additivi insegna ai chiamanti
a ignorare le versioni.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;È meglio il versionamento URL o quello per header?&lt;/strong&gt;
Il versionamento URL è più facile da vedere per i chiamanti e più difficile da far evolvere pezzo
per pezzo per voi; quello per header è il contrario. Per un&amp;#39;API pubblica con molti piccoli client,
il versionamento URL fallisce meno. Per un&amp;#39;API grande con strato di traduzione, la versione datata
per header scala meglio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quante versioni dovrebbero essere supportate contemporaneamente?&lt;/strong&gt;
Il meno possibile secondo la vostra finestra di supporto, e mai un numero illimitato. Due o tre
versioni concorrenti è normale; più di quello di solito significa che le versioni non vengono
ritirate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa dovrebbero ricevere le richieste non versionate?&lt;/strong&gt;
La versione supportata più vecchia, così i client esistenti non fissati continuano a funzionare,
con un header di risposta che dice loro quale versione hanno ricevuto.&lt;/p&gt;
</content:encoded></item><item><title>Cambiamenti che rompono: cosa conta e come rilasciarli</title><link>https://changeloop.dev/blog/it/breaking-changes/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/breaking-changes/</guid><description>Un cambiamento che rompe qualcosa è uno che un chiamante corretto non sopravvive. Cosa conta, cosa no, come intercettarlo in CI e come rilasciarlo.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un cambiamento che rompe qualcosa è un cambiamento che un chiamante scritto correttamente non
avrebbe potuto sopravvivere. La definizione conta perché la maggior parte delle discussioni su se
qualcosa &amp;quot;conta&amp;quot; sono in realtà discussioni su chi lo teneva in modo sbagliato. Se un chiamante ha
seguito la vostra documentazione e il vostro cambiamento ha fatto smettere di funzionare il suo
codice, il cambiamento rompeva qualcosa. Cosa intendevate voi non c&amp;#39;entra nulla.&lt;/p&gt;
&lt;p&gt;Questo è tutto il test. Il resto di questo articolo è ciò che ne deriva: cosa lo fallisce, cosa lo
supera, come intercettare un fallimento prima del merge, e cosa fare una volta che sapete di stare
rilasciando un cambiamento che rompe qualcosa.&lt;/p&gt;
&lt;h2&gt;Cosa conta come cambiamento che rompe qualcosa?&lt;/h2&gt;
&lt;p&gt;Applicate il test al chiamante, non al diff. Un cambiamento rompe qualcosa quando un chiamante che
dipendeva solo dal comportamento documentato deve cambiare il suo codice, la sua configurazione o i
suoi dati per continuare a funzionare. Rimuovere un campo, rinominare un endpoint, irrigidire la
validazione, cambiare un default e cambiare il tipo di un valore si qualificano tutti. Aggiungere
un campo opzionale no. Correggere un bug di solito no, con un&amp;#39;eccezione importante più sotto.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cambiamento&lt;/th&gt;
&lt;th&gt;Rompe qualcosa?&lt;/th&gt;
&lt;th&gt;Perché&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Rimuovere o rinominare un campo, endpoint, flag o opzione&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;I chiamanti corretti lo referenziano&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aggiungere un campo opzionale o un nuovo endpoint&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Le chiamate esistenti non cambiano&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rendere obbligatorio un input opzionale&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;Le chiamate che lo omettevano ora falliscono&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Irrigidire una validazione prima accettata&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;Input che funzionavano ora vengono rifiutati&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cambiare un valore di default&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;I chiamanti che non l&amp;#39;hanno impostato ricevono comportamento nuovo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cambiare un tipo (stringa a numero, valore singolo ad array)&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;I parser scritti per il tipo documentato falliscono&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Riordinare le chiavi di un oggetto&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;A meno che abbiate documentato l&amp;#39;ordine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correggere un bug su cui i chiamanti facevano affidamento&lt;/td&gt;
&lt;td&gt;In pratica sì&lt;/td&gt;
&lt;td&gt;Vedi la sezione sui contratti accidentali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alzare un rate limit o un tetto di dimensione&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Nulla che funzionava smette di funzionare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Abbassare un rate limit o un tetto di dimensione&lt;/td&gt;
&lt;td&gt;Sì&lt;/td&gt;
&lt;td&gt;Traffico che andava bene ora viene limitato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cambiare la formulazione di un messaggio d&amp;#39;errore&lt;/td&gt;
&lt;td&gt;Dipende&lt;/td&gt;
&lt;td&gt;Rompe qualcosa se l&amp;#39;avete documentato o i chiamanti fanno match su di esso&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Cosa non è un cambiamento che rompe qualcosa?&lt;/h2&gt;
&lt;p&gt;Un cambiamento non rompe nulla quando ogni chiamata che funzionava prima funziona ancora, invariata,
e significa ancora la stessa cosa. Aggiungere un nuovo endpoint, aggiungere un parametro opzionale
alla richiesta, aggiungere un campo a una risposta, rendere opzionale un input obbligatorio,
alzare un limite e migliorare un messaggio d&amp;#39;errore su cui nessuno fa match superano tutti il test.
Questi cambiamenti additivi possono andare in un rilascio minor con una voce di changelog ordinaria.&lt;/p&gt;
&lt;p&gt;I cambiamenti additivi rompono comunque i chiamanti in tre situazioni. Un client il cui
deserializzatore rifiuta i campi sconosciuti fallisce al primo nuovo campo della risposta, quindi
documentate fin dall&amp;#39;inizio che i chiamanti devono ignorare i campi che non riconoscono. Un nuovo
valore di enum rompe qualsiasi chiamante con uno switch esaustivo (ne parliamo più sotto). E una
risposta che cresce può spingere un chiamante oltre un limite di dimensione, un timeout o una
larghezza di colonna a cui non aveva mai dovuto pensare.&lt;/p&gt;
&lt;p&gt;Quattro righe della tabella meritano uno sguardo più attento, perché è lì che avvengono i
disaccordi.&lt;/p&gt;
&lt;h2&gt;I quattro cambiamenti che rompono qualcosa che i team trascurano&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Contratti accidentali.&lt;/strong&gt; Se la vostra API ha restituito lo stesso campo non documentato per tre
anni, un chiamante ci ha costruito sopra. La &lt;a href=&quot;https://www.hyrumslaw.com/&quot;&gt;legge di Hyrum&lt;/a&gt; è la
versione breve: con abbastanza utenti, ogni comportamento osservabile del vostro sistema sarà
dipeso da qualcuno. Ecco perché &amp;quot;era una correzione di bug&amp;quot; non è una difesa. La correzione può
essere corretta e rompere comunque qualcosa. Rilasciatela come tale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cambiamenti comportamentali senza cambiamento di schema.&lt;/strong&gt; Il campo è ancora lì, il tipo è lo
stesso, e il valore ora significa qualcosa di diverso. Uno &lt;code&gt;status&lt;/code&gt; che prima era &lt;code&gt;active&lt;/code&gt; o
&lt;code&gt;inactive&lt;/code&gt; e ora restituisce anche &lt;code&gt;suspended&lt;/code&gt; rompe ogni chiamante con uno switch esaustivo. Un
timestamp che passa da ora locale a UTC rompe chiunque non abbia letto due volte la documentazione.
Nulla in un diff del file OpenAPI mostra queste cose.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validazione irrigidita.&lt;/strong&gt; Iniziate a rifiutare email senza TLD, o spazi finali, o nomi più lunghi
di 80 caratteri. Ogni chiamante che inviava esattamente quello ora riceve un 400 per una richiesta
che funzionava la settimana scorsa. I cambiamenti di validazione sono i più comuni rilasciati come
correzione di &amp;quot;irrigidimento&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default cambiati.&lt;/strong&gt; Nessuno che ha impostato il valore esplicitamente nota nulla. Tutti quelli
che non l&amp;#39;hanno fatto, che sono la maggior parte dei chiamanti, ricevono comportamento nuovo senza
cambiare una riga. Un default cambiato rompe la maggioranza dei vostri utenti proprio perché non
hanno mai visto l&amp;#39;impostazione.&lt;/p&gt;
&lt;h2&gt;Come si individua un cambiamento che rompe qualcosa prima del rilascio?&lt;/h2&gt;
&lt;p&gt;Confrontate il contratto della pull request con quello del branch principale, in CI, e fate fallire
la build in caso di differenza che rompe qualcosa. Esistono strumenti di diff degli schemi per la
maggior parte dei formati di interfaccia, e ciascuno conosce le regole di rottura del proprio
formato:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Interfaccia&lt;/th&gt;
&lt;th&gt;Strumento&lt;/th&gt;
&lt;th&gt;Cosa confronta&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;REST (OpenAPI)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/oasdiff/oasdiff&quot;&gt;oasdiff&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Due specifiche OpenAPI, con un report dei cambiamenti che rompono qualcosa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gRPC (Protobuf)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://buf.build/docs/breaking/&quot;&gt;buf breaking&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;File &lt;code&gt;.proto&lt;/code&gt;, a livello wire o di sorgente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GraphQL&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/kamilkisiela/graphql-inspector&quot;&gt;GraphQL Inspector&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Due schemi, segnalando i cambiamenti che rompono e quelli pericolosi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crate Rust&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/obi1kenobi/cargo-semver-checks&quot;&gt;cargo-semver-checks&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;L&amp;#39;API pubblica contro l&amp;#39;ultima versione pubblicata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pacchetti TypeScript&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://api-extractor.com/&quot;&gt;API Extractor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Un report committato dell&amp;#39;API pubblica del pacchetto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Questi strumenti intercettano in modo affidabile campi rimossi, operazioni rinominate e tipi
cambiati. Non possono vedere i primi due dei quattro tipi sopra, un contratto accidentale o un
cambiamento comportamentale, perché nessuno dei due compare in uno schema. Usate lo strumento per
fermare quelli ovvi e la domanda di revisione &amp;quot;un chiamante corretto potrebbe accorgersene?&amp;quot; per
gli altri. Lo stesso job di CI è il posto naturale per richiedere una voce di changelog, come
descritto in &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-ci-enforcement/&quot;&gt;far rispettare le voci di changelog in CI&lt;/a&gt;, e
&lt;a href=&quot;https://changeloop.dev/blog/it/grpc-protobuf-api-changes/&quot;&gt;le modifiche alle API gRPC e Protobuf&lt;/a&gt; tratta i casi a
livello wire.&lt;/p&gt;
&lt;h2&gt;Come si segna un cambiamento che rompe qualcosa in un commit?&lt;/h2&gt;
&lt;p&gt;Con i &lt;a href=&quot;https://www.conventionalcommits.org/en/v1.0.0/&quot;&gt;Conventional Commits&lt;/a&gt;, un cambiamento che
rompe qualcosa si segna con un &lt;code&gt;!&lt;/code&gt; prima dei due punti (&lt;code&gt;feat(api)!: remove the legacy export endpoint&lt;/code&gt;)
oppure con un footer che inizia con &lt;code&gt;BREAKING CHANGE:&lt;/code&gt; seguito da una descrizione. Entrambi
corrispondono a una versione major. Scrivete il footer come prima bozza della voce di changelog,
indicando chi è interessato e cosa deve fare.
&lt;a href=&quot;https://changeloop.dev/blog/it/conventional-commits-changelog/&quot;&gt;Conventional commits e il changelog&lt;/a&gt; spiega fin dove vi
porta la convenzione.&lt;/p&gt;
&lt;p&gt;La stessa regola vale per le librerie. Una funzione pubblica rimossa, un tipo di parametro
ristretto o un valore di ritorno cambiato è una versione major nel versionamento semantico. Le
librerie non sempre la rispettano: uno
&lt;a href=&quot;https://arxiv.org/abs/2110.07889&quot;&gt;studio su 119.879 aggiornamenti di Maven Central&lt;/a&gt; ha rilevato
che il 16,6% violava il versionamento semantico, ma solo il 7,9% dei progetti client ne è stato
toccato, perché la maggior parte di quei cambiamenti riguardava codice che nessun client chiamava.
La rottura si misura sul chiamante.&lt;/p&gt;
&lt;h2&gt;Come si rilascia un cambiamento che rompe qualcosa?&lt;/h2&gt;
&lt;p&gt;Lo si rilascia apertamente, con una data, con un percorso. I passi sotto sono in ordine, e
l&amp;#39;ultimo è quello che la maggior parte dei team salta: dire alle persone interessate che ciò che
stavano aspettando è ora accaduto.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Decidete se lo è.&lt;/strong&gt; Usate il test sopra, non il diff. Se due ingegneri non sono d&amp;#39;accordo,
rompe qualcosa; il disaccordo è prova che un chiamante avrebbe potuto ragionevolmente fare
affidamento sul vecchio comportamento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versionatelo.&lt;/strong&gt; Sotto &lt;a href=&quot;https://semver.org/&quot;&gt;versionamento semantico&lt;/a&gt; un cambiamento che rompe
qualcosa è una versione major. Se gestite un&amp;#39;API datata o versionata, va in una nuova versione e
quella vecchia continua a funzionare fino a una data dichiarata. Se non potete versionare, non
state rilasciando un cambiamento che rompe qualcosa, state rilasciando un&amp;#39;interruzione con una
voce di changelog. Quale schema porta la versione è l&amp;#39;argomento di
&lt;a href=&quot;https://changeloop.dev/blog/it/api-versioning-best-practices/&quot;&gt;buone pratiche di versionamento API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scrivete la voce prima che il codice venga mergiato.&lt;/strong&gt; La voce ha una forma fissa: cosa
cambia, chi interessa, cosa devono fare, ed entro quando. Se non potete riempire tutte e
quattro, il cambiamento non è pronto. La &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;release notes template&lt;/a&gt;
mette queste voci per prime, con una data invece di un numero di versione, esattamente per
questo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date una scadenza, non un numero di rilascio.&lt;/strong&gt; &amp;quot;Rimosso in v5&amp;quot; non significa nulla per chi
non segue i vostri rilasci. &amp;quot;Smette di funzionare il 1° novembre 2026&amp;quot; significa la stessa cosa
per tutti.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fornite la migrazione.&lt;/strong&gt; Un esempio di codice della vecchia chiamata accanto alla nuova. Se il
cambiamento è una rinomina, dite entrambi i nomi nella stessa frase. Se è un campo rimosso, dite
dove sono andati i dati.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Annunciatelo ovunque il vecchio comportamento fosse documentato.&lt;/strong&gt; Il changelog, la pagina
docs che descrive l&amp;#39;endpoint, le release notes dell&amp;#39;SDK, e l&amp;#39;header di deprecazione nella
risposta se ne avete uno.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chiudete il ciclo.&lt;/strong&gt; Se una cliente ha chiesto il cambiamento, o ha segnalato il bug che vi ha
portato, ditele quando viene rilasciato.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Come appare una buona voce per un cambiamento che rompe qualcosa?&lt;/h2&gt;
&lt;p&gt;Una buona voce nomina il chiamante interessato nella prima riga, dichiara la data, e include la
correzione. Eccone una per il caso di validazione irrigidita, nella forma che usiamo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Gli indirizzi email senza dominio vengono rifiutati dal 1° novembre 2026.&lt;/strong&gt;
&lt;code&gt;POST /users&lt;/code&gt; e &lt;code&gt;PATCH /users/:id&lt;/code&gt; attualmente accettano valori &lt;code&gt;email&lt;/code&gt; come &lt;code&gt;alice@localhost&lt;/code&gt;.
Dal 1° novembre questi restituiscono &lt;code&gt;400 invalid_email&lt;/code&gt;. Interessa qualsiasi integrazione che
crea utenti da directory interne. Migrazione: inviate un indirizzo completamente qualificato, o
omettete il campo e impostatelo dopo. Nessun cambiamento necessario se i vostri indirizzi hanno
già un dominio, il che è vero per il 99,4% degli account creati quest&amp;#39;anno.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dove va questo avviso, e cos&amp;#39;altro dovrebbe accompagnarlo, è il tema di
&lt;a href=&quot;https://changeloop.dev/blog/it/api-changelog/&quot;&gt;changelog di API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La percentuale in fondo non è decorazione. Dice alla lettrice se deve preoccuparsi, che è la
domanda con cui ha aperto la voce.&lt;/p&gt;
&lt;h2&gt;Perché non evitarli semplicemente?&lt;/h2&gt;
&lt;p&gt;Perché l&amp;#39;alternativa è peggiore. Un&amp;#39;API che non rompe mai nulla accumula ogni errore che ha mai
fatto: il campo con nome sbagliato, il default sbagliato, il timestamp in ora locale. Ciascuno è
una tassa su ogni nuovo chiamante per sempre, per proteggere chiamanti che avrebbero potuto
migrare in un pomeriggio. I team con la migliore reputazione di stabilità rompono le cose
raramente, secondo un calendario, con un percorso di migrazione e un avviso che ha raggiunto le
persone per cui era destinato.&lt;/p&gt;
&lt;p&gt;La meccanica di quell&amp;#39;avviso è l&amp;#39;argomento dell&amp;#39;articolo compagno su
&lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;deprecare un&amp;#39;API&lt;/a&gt;. La voce che lo annuncia viene redatta nello stesso
modo di qualsiasi altra voce nel &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;feed del changelog&lt;/a&gt;: dalla pull request mergiata, trattenuta
per un umano, poi pubblicata nel posto dove i chiamanti interessati già leggono.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra un cambiamento che rompe qualcosa e uno che non lo fa?&lt;/strong&gt;
Un cambiamento che rompe qualcosa costringe un chiamante corretto a modificare codice,
configurazione o dati per continuare a funzionare. Uno che non rompe nulla lascia funzionare ogni
chiamata esistente con lo stesso significato, ed è per questo che le aggiunte di solito sono sicure
mentre rimozioni, rinomine e regole irrigidite di solito no.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conta aggiungere un campo obbligatorio?&lt;/strong&gt;
Sì. Ogni chiamata esistente lo omette, quindi ogni chiamata esistente ora fallisce. Aggiungetelo
come opzionale con un default sensato, o versionate l&amp;#39;endpoint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conta una correzione di bug?&lt;/strong&gt;
Può essere. Se i chiamanti dipendevano dal comportamento con il bug, correggerlo li rompe,
qualunque cosa dicesse la documentazione. Trattate qualsiasi correzione che cambia l&amp;#39;output
osservabile come un cambiamento che rompe qualcosa, a meno che non possiate dimostrare che nessuno
ne dipendeva.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il versionamento semantico si applica a un&amp;#39;API web?&lt;/strong&gt;
La regola sì: i cambiamenti che rompono qualcosa ottengono una nuova versione major e quella
vecchia continua a funzionare per un periodo dichiarato. Il numero spesso vive nell&amp;#39;URL o in un
header di data piuttosto che in una versione di pacchetto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quanto preavviso è sufficiente?&lt;/strong&gt;
Abbastanza perché un chiamante trovi l&amp;#39;avviso e faccia il lavoro. Novanta giorni è un minimo comune
per API pubbliche; più lungo per qualsiasi cosa usata in codice spedito a utenti finali e che non
può essere aggiornato da remoto.&lt;/p&gt;
</content:encoded></item><item><title>Chiudere il ciclo di feedback dal changelog</title><link>https://changeloop.dev/blog/it/customer-feedback-loop/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/customer-feedback-loop/</guid><description>Un ciclo di feedback si chiude quando chi ha chiesto sa: rilasciato. Quattro passi, dove si rompe, e perché il changelog è il posto giusto per chiuderlo.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un ciclo di feedback del cliente si chiude quando alla persona che ha dato il feedback viene detto
cosa ne è stato fatto. Non quando viene archiviato. Non quando viene prioritizzato. Nemmeno quando
viene rilasciato. Quando le viene detto. La maggior parte dei team fa bene i primi tre passi e per
niente l&amp;#39;ultimo, e poi si chiede perché le persone che mandano feedback smettono di mandarlo.&lt;/p&gt;
&lt;p&gt;Questo articolo riguarda quell&amp;#39;ultimo passo, e un&amp;#39;affermazione concreta: il changelog è il posto
giusto da cui chiudere il ciclo, perché è l&amp;#39;unico artefatto che già esiste esattamente nel momento
in cui il ciclo può essere chiuso.&lt;/p&gt;
&lt;h2&gt;Cos&amp;#39;è un ciclo di feedback del cliente?&lt;/h2&gt;
&lt;p&gt;Un ciclo di feedback del cliente è il percorso da un&amp;#39;utente che vi dice qualcosa a quell&amp;#39;utente
che scopre cosa avete fatto al riguardo. Ha quattro passi: raccogliere il feedback, decidere cosa
farne, rilasciare il risultato, e avvisare chi ha chiesto. Il ciclo è aperto finché non avviene il
quarto passo. Un team che raccoglie feedback e rilascia correzioni ma non avvisa mai nessuno ha una
casella di posta, non un ciclo.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Passo&lt;/th&gt;
&lt;th&gt;Cosa succede&lt;/th&gt;
&lt;th&gt;Dove di solito si rompe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Raccogliere&lt;/td&gt;
&lt;td&gt;Arriva il feedback: widget, supporto, vendite, interviste&lt;/td&gt;
&lt;td&gt;Niente; ogni team lo fa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decidere&lt;/td&gt;
&lt;td&gt;Viene smistato, unito ai duplicati, accettato o rifiutato&lt;/td&gt;
&lt;td&gt;I rifiuti non vengono mai comunicati&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rilasciare&lt;/td&gt;
&lt;td&gt;Qualcuno lo costruisce ed esce in produzione&lt;/td&gt;
&lt;td&gt;Il link alla richiesta si perde al merge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avvisare&lt;/td&gt;
&lt;td&gt;Chi ha chiesto scopre che è stato rilasciato&lt;/td&gt;
&lt;td&gt;Saltato, o fatto solo per chi si è lamentato di più&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;L&amp;#39;ultima riga è quella di cui parla questo articolo. Si rompe per una ragione strutturale, non
culturale: quando una funzionalità viene rilasciata, la richiesta che l&amp;#39;ha causata vive in un
sistema diverso dalla cosa rilasciata, e non è compito di nessuno collegarle. Il ciclo comincia
prima, da come si chiede la richiesta fin dall&amp;#39;inizio; &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-ask-for-customer-feedback/&quot;&gt;come chiedere feedback ai clienti&lt;/a&gt;
tratta formulazione e tempistica.&lt;/p&gt;
&lt;h2&gt;Perché i cicli di feedback restano aperti?&lt;/h2&gt;
&lt;p&gt;I cicli di feedback restano aperti perché la richiesta e il cambiamento rilasciato vivono in posti
diversi e il collegamento tra i due viene fatto a mano, quando va bene. La richiesta è in uno
strumento di feedback, una casella di supporto o un foglio di calcolo. Il cambiamento è in una pull
request. L&amp;#39;annuncio è in un changelog o un&amp;#39;email. Tre sistemi, tre proprietari, e il collegamento
dal terzo indietro al primo è una persona che si ricorda, mesi dopo, chi ha chiesto.&lt;/p&gt;
&lt;p&gt;C&amp;#39;è una seconda ragione. Il passo dell&amp;#39;avviso viene solitamente inquadrato come un compito di
marketing (&amp;quot;annunciare la funzionalità&amp;quot;) piuttosto che un compito di supporto (&amp;quot;rispondere alla
persona&amp;quot;). Gli annunci vanno a tutti e non raggiungono nessuno in particolare. La persona che ha
chiesto la funzionalità a marzo legge l&amp;#39;annuncio a giugno, se lo legge, come notizia, non come
risposta. Il ciclo si chiude solo se il messaggio è indirizzato a lei.&lt;/p&gt;
&lt;h2&gt;Perché chiudere il ciclo dal changelog?&lt;/h2&gt;
&lt;p&gt;Perché la voce di changelog è l&amp;#39;unico artefatto che esiste esattamente al momento giusto, contiene
esattamente le parole giuste, ed è scritta esattamente dalla persona giusta. Esiste quando il
cambiamento è live e non prima. Dice cosa è cambiato nei termini della lettrice, che è il messaggio
di cui ha bisogno chi ha chiesto. Ed è scritta da qualcuno che ha appena letto la pull request, che
è l&amp;#39;unico momento in cui il link alla richiesta originale è ancora visibile.&lt;/p&gt;
&lt;p&gt;Confrontate le alternative. Chiudere il ciclo dallo strumento di feedback significa che lo
strumento di feedback deve sapere quando la funzionalità è stata rilasciata, il che significa che
qualcuno aggiorna uno stato a mano. Chiuderlo dalla pull request significa avvisare la cliente al
merge, prima che il cambiamento sia live, una promessa rotta con timestamp appena il rilascio
slitta. Chiuderlo dall&amp;#39;annuncio marketing significa aspettarne uno, e la maggior parte dei
cambiamenti rilasciati non ne ha mai uno.&lt;/p&gt;
&lt;p&gt;Il changelog sta nel mezzo: dopo il merge, al momento del rilascio, con la formulazione pronta.&lt;/p&gt;
&lt;h2&gt;Come si chiude il ciclo, passo per passo&lt;/h2&gt;
&lt;p&gt;Questo è il meccanismo che eseguiamo. È descritto qui come specifica piuttosto che tour di
prodotto, perché ogni passo può essere fatto a mano o con altri strumenti; quello che conta è
l&amp;#39;ordine.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Il feedback diventa un issue nel repository che lo risolverà.&lt;/strong&gt; Un invio da widget
viene archiviato come issue etichettato su GitHub (&lt;code&gt;feature-request&lt;/code&gt; o &lt;code&gt;bug&lt;/code&gt;, una priorità, e
&lt;code&gt;from-widget&lt;/code&gt;), con l&amp;#39;indirizzo email di chi lo ha inviato tenuto fuori dal corpo dell&amp;#39;issue.
L&amp;#39;issue vive accanto al codice, così il passo tre può trovarlo. Un issue aperto a mano, per
esempio da una &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-template/&quot;&gt;template di richiesta funzionalità&lt;/a&gt;, è fuori
da questo percorso: il passo cinque non lo commenta, quindi quel ciclo chiudetelo voi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La correzione referenzia l&amp;#39;issue.&lt;/strong&gt; La pull request dice &lt;code&gt;Fixes #142&lt;/code&gt;, la parola chiave di
chiusura di GitHub stessa. Niente di nuovo da imparare, ed è la stessa frase che le sviluppatrici
scrivono già.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La voce di changelog viene redatta dalla pull request mergiata e porta il link.&lt;/strong&gt; Al merge, la
bozza viene creata e &lt;code&gt;#142&lt;/code&gt; viene letto dal corpo della PR e allegato alla bozza. Il link viene
creato mentre è ancora economico, da una macchina, da dati che sono già lì.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una persona revisiona la voce.&lt;/strong&gt; Formulazione, pubblico, se dovrebbe essere pubblicata affatto.
Una bozza scartata non chiude nulla, il che è corretto: un refactor interno che per caso ha
referenziato un issue non è notizia.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;All&amp;#39;approvazione, chi ha chiesto viene informato.&lt;/strong&gt; Un commento viene pubblicato sull&amp;#39;issue nato
dal suo feedback, &amp;quot;Shipped —&amp;quot; seguito dal titolo della voce e un link alla voce
pubblicata, e il widget mostra a chi l&amp;#39;ha inviato la stessa voce rilasciata. Una volta,
mai due, e solo dopo che una persona ha pubblicato la voce. La stessa voce esce tramite
&lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;feed e widget&lt;/a&gt; a tutti quelli che non hanno chiesto.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L&amp;#39;ordine nel passo cinque è tutto il design. Avvisare chi ha chiesto al merge sarebbe più presto e
più facile, e sarebbe sbagliato circa tanto spesso quanto slittano i rilasci. Un feature flag rompe
persino quest&amp;#39;ordine, perché approvato e pubblicato può succedere mentre la funzionalità resta
invisibile per l&amp;#39;account di chi ha fatto la richiesta;
&lt;a href=&quot;https://changeloop.dev/blog/it/feature-flags-feature-requests/&quot;&gt;feature flag e richieste di funzionalità&lt;/a&gt; copre il
controllo extra di cui questo passaggio ha bisogno appena c&amp;#39;è di mezzo un flag.&lt;/p&gt;
&lt;h2&gt;Come appare un ciclo chiuso per la cliente?&lt;/h2&gt;
&lt;p&gt;Sembra una risposta. La cliente ha inviato una richiesta tramite un widget, e un
giorno il widget la mostra come rilasciata, con link a una voce che la descrive nei suoi termini; su
GitHub, l&amp;#39;issue riceve la stessa notizia come commento. Non si è iscritta a una newsletter, non ha controllato una
roadmap, non ha cercato nel changelog. Le è stato detto.&lt;/p&gt;
&lt;p&gt;Questa è l&amp;#39;esperienza che fa succedere il prossimo pezzo di feedback. Le persone mandano feedback a
prodotti che rispondono. La pagina &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; include voci di team
i cui utenti tornano visibilmente con richieste, e il filo comune non è lo strumento; è che le voci
si leggono come risposte.&lt;/p&gt;
&lt;h2&gt;Come si misura un ciclo di feedback?&lt;/h2&gt;
&lt;p&gt;Misurate la frazione di cambiamenti rilasciati che hanno informato almeno chi ha chiesto, e il
tempo dal rilascio all&amp;#39;avviso. Due numeri, entrambi facili una volta che il link esiste e
impossibili prima.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tasso di chiusura&lt;/strong&gt;: delle voci di changelog pubblicate questo mese, quante collegavano almeno
una richiesta, e di quelle, quante hanno avvisato chi ha chiesto. Se il secondo numero è molto
più basso del primo, le notifiche stanno fallendo; se il primo è basso, le richieste non vengono
referenziate dalle pull request, e la correzione è una frase nel template della PR.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tempo dal rilascio all&amp;#39;avviso&lt;/strong&gt;: quanto passa tra la voce che va live e l&amp;#39;avviso a chi ha
chiesto. Col meccanismo sopra sono secondi. A mano sono tipicamente settimane, o mai, e &amp;quot;mai&amp;quot; è
il numero che conta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Non misurate il ciclo per volume di feedback raccolto. Raccogliere è il passo facile, e un team che
lo misura lo ottimizzerà, il che produce più cicli aperti.&lt;/p&gt;
&lt;h2&gt;Dove si inserisce la roadmap?&lt;/h2&gt;
&lt;p&gt;Una roadmap pubblica è un modo di chiudere il ciclo in anticipo: dice a chi ha chiesto che la sua
richiesta è stata ascoltata, prima che venga rilasciata. È utile, e non sostituisce l&amp;#39;ultimo passo.
&amp;quot;Pianificato&amp;quot; è una promessa sul futuro; &amp;quot;Rilasciato&amp;quot; è un fatto sul presente. Eseguite la
&lt;a href=&quot;https://changeloop.dev/blog/it/public-roadmap/&quot;&gt;roadmap pubblica&lt;/a&gt; dagli stessi issue, con un&amp;#39;etichetta per colonna, così
che la stessa richiesta si sposti da pianificata a rilasciata senza essere reinserita da nessuna
parte. Lo spostamento a rilasciata è un cambio di etichetta (&lt;code&gt;roadmap:shipped&lt;/code&gt;) che nessuno fa per
voi quando la voce viene approvata, quindi fatelo nella stessa revisione.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Quali sono i quattro passi di un ciclo di feedback del cliente?&lt;/strong&gt;
Raccogliere, decidere, rilasciare, avvisare. Il ciclo è aperto finché non avviene il quarto passo.
La maggior parte dei framework aggiunge passi di analisi e prioritizzazione nel mezzo; sono
raffinamenti di &amp;quot;decidere&amp;quot;, e nessuno di essi chiude nulla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Si dovrebbe avvisare i clienti quando si rifiuta una richiesta?&lt;/strong&gt;
Sì, ed è il messaggio più trascurato del ciclo. Un chiaro &amp;quot;non lo faremo, ed ecco perché&amp;quot; finisce
l&amp;#39;attesa. Il silenzio lascia il ciclo aperto per sempre e la cliente a controllare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In cosa si differenzia chiudere il ciclo dall&amp;#39;annunciare una funzionalità?&lt;/strong&gt;
Un annuncio va a tutti. Chiudere il ciclo è una risposta alle persone che hanno chiesto, sul canale
attraverso cui hanno chiesto. Fate entrambe le cose; sono messaggi diversi per lettrici diverse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E se chi ha chiesto non è su GitHub?&lt;/strong&gt;
La maggior parte non lo è, e va bene così. Il widget continua a mostrargli lo stato di ciò che ha
inviato, compresa la voce rilasciata e il suo link, quindi non gli serve nulla oltre alla pagina da
cui ha scritto. Il commento sull&amp;#39;issue è per le persone che possono vedere il repository.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Questo ciclo funziona su GitLab o Bitbucket invece che su GitHub?&lt;/strong&gt;
Il widget e il changelog sì; il commento automatico del passo cinque no, per ora. Un team su GitLab
o Bitbucket riceve comunque ogni invio, lo archivia comunque come issue, e mostra comunque a chi ha
chiesto uno stato nel widget, ma chiudere quello specifico ciclo tornando sull&amp;#39;issue stesso è un
passo che si fa a mano finché quell&amp;#39;integrazione non esiste.&lt;/p&gt;
</content:encoded></item><item><title>Template di richiesta funzionalità che diventa changelog</title><link>https://changeloop.dev/blog/it/feature-request-template/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/feature-request-template/</guid><description>Una richiesta di funzionalità serve solo se si trova al rilascio. Il modello, le etichette che la instradano, e i campi che poi legge il changelog.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un template di richiesta funzionalità è un modulo con quattro domande: cosa sta cercando di fare
la persona, cosa glielo impedisce, cosa ha provato invece, e come vuole essere avvisata quando è
fatto. Tutto il resto che di solito appare su uno, selettori di priorità, stime di sforzo,
punteggi di valore business, è per il team che riceve la richiesta, e viene compilato male da chi
la invia.&lt;/p&gt;
&lt;p&gt;Le richieste ordinate sono il test sbagliato per un template. Quello giusto: sei mesi dopo, quando
la funzionalità viene rilasciata, qualcuno può trovare la richiesta, capirla, e avvisare chi l&amp;#39;ha
scritta? La maggior parte dei template sono progettati per l&amp;#39;ammissione. Questo è progettato per il
giorno in cui si chiude il ciclo.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbe includere un template di richiesta funzionalità?&lt;/h2&gt;
&lt;p&gt;Dovrebbe includere l&amp;#39;obiettivo, il blocco, la soluzione alternativa, e un modo per tornare a chi ha
chiesto. Quattro campi, in quest&amp;#39;ordine, ciascuno risponde a una domanda che il team farà dopo.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Campo&lt;/th&gt;
&lt;th&gt;La domanda a cui risponde dopo&lt;/th&gt;
&lt;th&gt;Perché è nel modulo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Cosa stai cercando di fare?&lt;/td&gt;
&lt;td&gt;La funzionalità costruita è quella di cui c&amp;#39;era bisogno?&lt;/td&gt;
&lt;td&gt;L&amp;#39;obiettivo sopravvive a qualsiasi proposta concreta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cosa te lo impedisce oggi?&lt;/td&gt;
&lt;td&gt;Come appare &amp;quot;fatto&amp;quot;?&lt;/td&gt;
&lt;td&gt;Nomina il vuoto senza prescrivere la correzione&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cosa fai invece?&lt;/td&gt;
&lt;td&gt;Quanto è urgente davvero?&lt;/td&gt;
&lt;td&gt;Una soluzione alternativa dolorosa è un segnale più forte di un selettore di priorità&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Come dovremmo avvisarti?&lt;/td&gt;
&lt;td&gt;Chi riceve il messaggio &amp;quot;rilasciato&amp;quot;?&lt;/td&gt;
&lt;td&gt;Il campo che la maggior parte dei template omette&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Ciò che manca deliberatamente: una soluzione proposta come campo obbligatorio (benvenuta come
commento, sbagliata come inquadratura), un selettore di priorità (chiunque invii sceglie alta), e
qualsiasi stima di sforzo o valore (compito del team, dopo lo smistamento). Un template che chiede
una soluzione riceve richieste di pulsanti; un template che chiede un obiettivo riceve richieste di
risultati, e su risultati si scrive una voce di changelog.&lt;/p&gt;
&lt;h2&gt;Il template&lt;/h2&gt;
&lt;p&gt;Questo è il template di issue GitHub che usiamo, come modulo. Incollatelo in
&lt;code&gt;.github/ISSUE_TEMPLATE/feature_request.yml&lt;/code&gt; e viene reso come modulo strutturato nella pagina
nuovo issue. Le richieste archiviate attraverso di esso diventano issue con gli stessi campi di
quelle archiviate da un widget di feedback, il che conta per la sezione successiva.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;name: Feature request
description: What you are trying to do, and what stops you.
labels: [&amp;quot;feature-request&amp;quot;]
body:
  - type: textarea
    id: goal
    attributes:
      label: What are you trying to do?
      description: &amp;gt;-
        The outcome, not the button. &amp;quot;Export a month of invoices as one
        PDF&amp;quot; beats &amp;quot;add a PDF export&amp;quot;.
    validations:
      required: true
  - type: textarea
    id: blocker
    attributes:
      label: What stops you today?
      description: &amp;gt;-
        Where the product runs out. An error, a missing option, a limit.
    validations:
      required: true
  - type: textarea
    id: workaround
    attributes:
      label: What do you do instead?
      description: &amp;gt;-
        The spreadsheet, the script, the manual step. &amp;quot;Nothing, I gave
        up&amp;quot; is a valid answer.
  - type: input
    id: contact
    attributes:
      label: How should we tell you when it ships?
      description: &amp;gt;-
        An email address, or leave blank to be notified only on this
        issue.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Due dettagli fanno il lavoro. &lt;code&gt;labels: [&amp;quot;feature-request&amp;quot;]&lt;/code&gt; significa che la richiesta viene
classificata alla creazione, invece di aspettare che qualcuno la smisti. E l&amp;#39;ultimo campo esiste
perché &amp;quot;ti faremo sapere&amp;quot; è una promessa, e una promessa ha bisogno di un indirizzo.&lt;/p&gt;
&lt;h2&gt;Quali etichette dovrebbe portare una richiesta di funzionalità?&lt;/h2&gt;
&lt;p&gt;Una richiesta di funzionalità dovrebbe portare un&amp;#39;etichetta per cosa è, una per quanto è urgente, e
una per da dove è arrivata. Tre etichette, tre assi, e ciascuno viene letto da una lettrice
diversa.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Etichetta&lt;/th&gt;
&lt;th&gt;Valori&lt;/th&gt;
&lt;th&gt;Chi la legge&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Tipo&lt;/td&gt;
&lt;td&gt;&lt;code&gt;feature-request&lt;/code&gt;, &lt;code&gt;bug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chi decide in quale coda entra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Priorità&lt;/td&gt;
&lt;td&gt;&lt;code&gt;priority:low&lt;/code&gt;, &lt;code&gt;priority:medium&lt;/code&gt;, &lt;code&gt;priority:high&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chi pianifica il prossimo ciclo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Origine&lt;/td&gt;
&lt;td&gt;&lt;code&gt;from-widget&lt;/code&gt;, &lt;code&gt;from-form&lt;/code&gt;, &lt;code&gt;from-support&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chi misura da dove arrivano le richieste&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Il widget applica i primi due assi e &lt;code&gt;from-widget&lt;/code&gt; quando archivia un invio come issue;
&lt;code&gt;from-form&lt;/code&gt; e &lt;code&gt;from-support&lt;/code&gt; sono suggerimenti per le richieste che arrivano per altre vie. Le
etichette del widget sono un tipo (&lt;code&gt;bug&lt;/code&gt; o &lt;code&gt;feature-request&lt;/code&gt;, deciso da un classificatore solo dal
messaggio), una priorità (una segnalazione di crash calma e concreta è alta; un duplicato di
qualcosa già chiesto è bassa; qualsiasi cosa che anche solo accenni a un problema di sicurezza è
&lt;code&gt;bug&lt;/code&gt; e alta, qualunque sia la formulazione), e &lt;code&gt;from-widget&lt;/code&gt;. Gli stessi tre assi funzionano per
richieste che arrivano a mano attraverso il template sopra, ed è questo il punto: una richiesta è
una richiesta, indipendentemente da dove sia entrata.&lt;/p&gt;
&lt;p&gt;Un&amp;#39;altra convenzione: il widget rimuove l&amp;#39;indirizzo email di chi invia dal corpo dell&amp;#39;issue prima
di archiviarlo, perché l&amp;#39;issue vive in un repository che può essere pubblico, e lo sostituisce con
un riferimento di invio. L&amp;#39;indirizzo resta fuori dall&amp;#39;issue; chi ha inviato segue
l&amp;#39;esito nel widget stesso. Fate lo stesso col
campo di contatto se il vostro tracker è visibile a persone fuori dal team.&lt;/p&gt;
&lt;h2&gt;Come diventa una richiesta di funzionalità una voce di changelog?&lt;/h2&gt;
&lt;p&gt;Una richiesta di funzionalità diventa una voce di changelog quando una pull request chiude l&amp;#39;issue
e la voce redatta da quella pull request collega indietro. Il meccanismo sono le parole chiave di
chiusura di GitHub stessa: una PR la cui descrizione dice &lt;code&gt;Fixes #142&lt;/code&gt; chiude l&amp;#39;issue 142 al merge.
Se le vostre voci di changelog sono redatte da pull request mergiate, la bozza può portare con sé
il numero dell&amp;#39;issue, e la voce sa chi ha chiesto.&lt;/p&gt;
&lt;p&gt;Questa è la ragione per cui il template chiede l&amp;#39;obiettivo piuttosto che la soluzione. Quando si
scrive la voce, l&amp;#39;obiettivo è la frase di cui ha bisogno chi scrive: &amp;quot;Ora puoi esportare un mese di
fatture come un unico PDF&amp;quot; è una voce di changelog. &amp;quot;Aggiunto export PDF&amp;quot; è un messaggio di commit.
Gli &lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;strumenti per il changelog&lt;/a&gt; che redigono da pull request possono fare la
raccolta e il collegamento; la formulazione ha ancora bisogno di una persona, e la persona ha
bisogno dell&amp;#39;obiettivo.&lt;/p&gt;
&lt;h2&gt;Cosa succede quando viene rilasciato?&lt;/h2&gt;
&lt;p&gt;A chi ha chiesto viene detto, con link alla voce. Nel nostro setup questo è automatico per le
richieste arrivate tramite il widget: un commento che dice &amp;quot;Shipped — &lt;titolo della voce&gt;&amp;quot; con link
alla voce pubblicata, pubblicato sull&amp;#39;issue non appena una persona approva la voce, mentre il widget
mostra a chi ha inviato la stessa voce. Un issue aperto a mano da questo template non riceve alcun
commento automatico; quel ciclo chiudetelo voi, con la stessa regola. Il commento viene pubblicato
deliberatamente all&amp;#39;approvazione, non al merge: un commento che dice che qualcosa è live prima che
lo sia è una promessa rotta con timestamp. Ogni richiesta viene notificata al massimo una volta;
una seconda approvazione della stessa voce non produce un secondo commento.&lt;/p&gt;
&lt;p&gt;Se lo fate a mano, vale la stessa regola. Non chiudete il ciclo dalla pull request. Chiudetelo
dalla voce pubblicata, e chiudetelo una volta. &lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;Feed e widget&lt;/a&gt; portano la stessa voce a
tutti quelli che non hanno chiesto, che sono la maggior parte; il commento è per chi ha chiesto.&lt;/p&gt;
&lt;h2&gt;Perché falliscono la maggior parte dei template di richiesta funzionalità&lt;/h2&gt;
&lt;p&gt;Sono progettati per rendere più facile lo smistamento e ci riescono, a costo dell&amp;#39;unico momento che
conta per chi ha chiesto. Un template con dodici campi riceve meno richieste, e quelle che riceve
vengono da persone con la pazienza di compilare dodici campi, che non è la stessa popolazione di
chi ha bisogno della funzionalità. Un template con quattro campi, uno dei quali è &amp;quot;come ti
contattiamo&amp;quot;, riceve più richieste e può onorarle tutte.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Un template di richiesta funzionalità dovrebbe chiedere la priorità?&lt;/strong&gt;
No. Chiedete invece la soluzione alternativa. &amp;quot;Esporto in un foglio di calcolo e lo ridigito ogni
venerdì&amp;quot; dice più sulla priorità di un menu a tendina che chi invia ha messo su alta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chi chiede dovrebbe proporre una soluzione?&lt;/strong&gt;
Può, nel testo libero. Non fatene l&amp;#39;inquadratura. Le richieste scritte come soluzioni sono più
difficili da fondere tra loro e più difficili da trasformare in una voce di changelog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le richieste di funzionalità dovrebbero apparire su una roadmap pubblica?&lt;/strong&gt;
Una volta pianificate, sì: un&amp;#39;etichetta sullo stesso issue la mette nella colonna pianificata, e
chi ha chiesto può vedere come si muove. L&amp;#39;articolo &lt;a href=&quot;https://changeloop.dev/blog/it/public-roadmap/&quot;&gt;roadmap pubblica&lt;/a&gt; è
il meccanismo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come gestisco i duplicati?&lt;/strong&gt;
Collegate la nuova richiesta all&amp;#39;issue esistente ed etichettatela priorità bassa; non chiudetela.
Ogni duplicato è una persona in più da avvisare quando viene rilasciato. Con il commento automatico
di Changeloop, quella persona viene avvisata solo se la pull request nomina anche il suo issue
(&lt;code&gt;Fixes #142, fixes #187&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dove dovrebbe vivere il template?&lt;/strong&gt;
Nel repository che riceverà la pull request, così che funzioni la parola chiave di chiusura. Una
richiesta in un tracker separato deve essere collegata a mano al merge, ed è quel passo a essere
saltato.&lt;/p&gt;
</content:encoded></item><item><title>Roadmap pubblica dal vostro issue tracker, tre colonne</title><link>https://changeloop.dev/blog/it/public-roadmap/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/public-roadmap/</guid><description>Una roadmap pubblica è una promessa sul futuro. Tenetela piccola, alimentatela dai vostri issue, e spostate ogni elemento con un&apos;etichetta sul suo issue.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Una roadmap pubblica è una lista di ciò che intendete costruire, pubblicata dove i clienti possono
vederla. La parola che fa il lavoro è &lt;em&gt;intendete&lt;/em&gt;: una roadmap è un insieme di promesse sul futuro,
e ogni elemento su di essa è uno che manterrete o si vedrà che non mantenete. Questa è la ragione
per pubblicarne una, ed è anche la ragione per cui la maggior parte delle roadmap pubbliche
diventano obsolete entro un trimestre. La versione che sopravvive è piccola, derivata da dati che
già mantenete, e collegata all&amp;#39;altro capo al changelog, così che una promessa diventi un fatto
senza che nessuno la reinserisca.&lt;/p&gt;
&lt;h2&gt;A cosa serve una roadmap pubblica?&lt;/h2&gt;
&lt;p&gt;Una roadmap pubblica dice a una cliente con una richiesta che la richiesta è stata ascoltata, prima
che venga rilasciata. È la metà anticipata della chiusura del ciclo: &amp;quot;pianificato&amp;quot; risponde alla
domanda &amp;quot;qualcuno lo ha letto&amp;quot;, e &amp;quot;in costruzione&amp;quot; risponde a &amp;quot;sta davvero succedendo&amp;quot;. Nessuno dei
due sostituisce l&amp;#39;ultimo passo, avvisare chi ha chiesto quando viene rilasciato, ma entrambi
riducono il numero di persone che chiedono nel frattempo.&lt;/p&gt;
&lt;p&gt;Fa anche una cosa per il team: forza un impegno pubblico, che è la cura più economica conosciuta
per un backlog che nasconde silenziosamente quattrocento elementi che nessuno costruirà.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Colonna&lt;/th&gt;
&lt;th&gt;La promessa che fa&lt;/th&gt;
&lt;th&gt;Cosa sposta un elemento dentro&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Pianificato&lt;/td&gt;
&lt;td&gt;Intendiamo costruire questo&lt;/td&gt;
&lt;td&gt;Una decisione, registrata come etichetta sull&amp;#39;issue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In costruzione&lt;/td&gt;
&lt;td&gt;Qualcuno ci sta lavorando ora&lt;/td&gt;
&lt;td&gt;Un&amp;#39;etichetta &lt;code&gt;roadmap:building&lt;/code&gt; sull&amp;#39;issue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rilasciato&lt;/td&gt;
&lt;td&gt;È live&lt;/td&gt;
&lt;td&gt;Un&amp;#39;etichetta &lt;code&gt;roadmap:shipped&lt;/code&gt;, o la chiusura dell&amp;#39;issue mentre ce l&amp;#39;ha&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Tre colonne, in ordine fisso, sono sufficienti. Una quarta colonna (&amp;quot;in considerazione&amp;quot;, &amp;quot;in
revisione&amp;quot;, &amp;quot;backlog&amp;quot;) è dove le buone intenzioni diventano un museo, ed è la prima che i clienti
imparano a ignorare.&lt;/p&gt;
&lt;h2&gt;La vostra roadmap dovrebbe essere pubblica?&lt;/h2&gt;
&lt;p&gt;Rendetela pubblica se potete mantenerla piccola e onesta; tenetela privata se l&amp;#39;alternativa è una
lunga lista di forse. Il costo di una roadmap pubblica non ha nulla a che fare col pubblicarla:
ogni elemento su di essa è ora una domanda che qualcuno farà, nel supporto, nelle chiamate di
vendita e nelle conversazioni di rinnovo. Dieci elementi che costruirete sono un asset. Sessanta
elementi che potreste costruire sono sessanta conversazioni future sul perché no.&lt;/p&gt;
&lt;p&gt;Due ragioni oneste per non pubblicare: i vostri piani cambiano più veloce di un trimestre, o la
vostra concorrenza legge la vostra roadmap più attentamente dei vostri clienti. Entrambe sono reali,
ed entrambe si risolvono pubblicando meno piuttosto che niente: solo &amp;quot;in costruzione&amp;quot;, con
&amp;quot;pianificato&amp;quot; tenuto interno, dice comunque a chi ha chiesto che il suo issue si sta muovendo.&lt;/p&gt;
&lt;h2&gt;Come si costruisce una roadmap pubblica dagli issue di GitHub?&lt;/h2&gt;
&lt;p&gt;Mettete un&amp;#39;etichetta per colonna sugli issue che già tracciate, e rendete gli issue etichettati
come la roadmap. Niente viene reinserito, la roadmap non può divergere dal lavoro, e lo stesso
issue che è iniziato come richiesta di un cliente si muove attraverso le colonne senza cambiare
identità.&lt;/p&gt;
&lt;p&gt;Il meccanismo, così come lo eseguiamo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Un&amp;#39;etichetta per colonna, con prefisso fisso&lt;/strong&gt;: &lt;code&gt;roadmap:planned&lt;/code&gt;, &lt;code&gt;roadmap:building&lt;/code&gt;,
&lt;code&gt;roadmap:shipped&lt;/code&gt;. Qualsiasi issue in un repository collegato che ne porti una appare in quella
colonna. Un issue senza nessuna di esse non è sulla roadmap, che è la maggior parte degli issue,
il che è corretto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le colonne sono un array ordinato, sempre nello stesso ordine.&lt;/strong&gt; Pianificato, in costruzione,
rilasciato. Non una mappa indicizzata per nome, così che una lettrice (o un widget) non debba
mai indovinare la sequenza.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se un issue porta due etichette, vince la più avanzata.&lt;/strong&gt; Qualcuno aggiungerà
&lt;code&gt;roadmap:shipped&lt;/code&gt; prima di rimuovere &lt;code&gt;roadmap:planned&lt;/code&gt;; una macchina a stati guidata da &amp;quot;quale
webhook è arrivato per ultimo&amp;quot; metterebbe l&amp;#39;elemento in colonne diverse a seconda dell&amp;#39;ordine di
consegna. Decidere solo dall&amp;#39;insieme di etichette rende la risposta uguale indipendentemente da
come arrivano gli eventi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rilasciato è uno stato di etichetta come gli altri.&lt;/strong&gt; La carta si sposta quando l&amp;#39;issue riceve
&lt;code&gt;roadmap:shipped&lt;/code&gt;, o viene chiuso mentre ce l&amp;#39;ha. La carta in sé non collega alla voce di
changelog; la voce, redatta dalla pull request che ha chiuso l&amp;#39;issue, è dove vivono i dettagli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servitela come dati.&lt;/strong&gt; La roadmap è un documento JSON con quelle tre colonne, pubblicato
accanto al feed di changelog con gli stessi header di cache, così che un sito docs, un widget o
una pagina di stato possano renderla senza una seconda integrazione. La
&lt;a href=&quot;https://changeloop.dev/docs&quot;&gt;documentazione del feed&lt;/a&gt; ha la forma esatta.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un&amp;#39;etichetta è poco da chiedere a una mantenitrice, ed è tutta l&amp;#39;integrazione. Nessuna board da
mantenere sincronizzata, nessuno strumento separato in cui accedere, e la richiesta che la cliente
ha archiviato è l&amp;#39;elemento sulla roadmap; quando viene rilasciato, è lo stesso elemento.&lt;/p&gt;
&lt;h2&gt;Cosa non dovrebbe contenere una roadmap pubblica?&lt;/h2&gt;
&lt;p&gt;Non dovrebbe contenere date, stime, o nulla di cui vi vergognereste se vi venisse chiesto tra nove
mesi. Le date sono l&amp;#39;errore classico: un trimestre su una roadmap diventa un impegno in una
presentazione di vendita diventa un ticket chiamato &amp;quot;avete detto Q3&amp;quot;. Le colonne dicono
abbastanza. &amp;quot;In costruzione&amp;quot; significa già &amp;quot;abbastanza presto che qualcuno ci sta lavorando&amp;quot;.&lt;/p&gt;
&lt;p&gt;Non dovrebbe nemmeno contenere il backlog interno. Una roadmap con trecento elementi è un problema
di ricerca, non una promessa, e la cliente che trova la sua richiesta in posizione 212 ha imparato
qualcosa che non volevate dirle.&lt;/p&gt;
&lt;h2&gt;Come si collega la roadmap al changelog?&lt;/h2&gt;
&lt;p&gt;La roadmap e il changelog descrivono gli stessi issue da due lati, uno per il futuro e uno per il
passato. Nessuno sposta una carta su una board separata. Una mantenitrice cambia l&amp;#39;etichetta
sull&amp;#39;issue su cui stava già lavorando, la voce viene redatta dalla pull request, e quando una
persona approva quella voce chi ha chiesto, se il suo feedback dal widget è diventato
quell&amp;#39;issue, viene informato lì. Spostare la carta in
rilasciato resta un passo a sé, l&amp;#39;etichetta &lt;code&gt;roadmap:shipped&lt;/code&gt;, quindi fatelo parte della stessa
revisione; approvare la voce non lo fa per voi.&lt;/p&gt;
&lt;p&gt;Questo è lo stesso ciclo che descrive l&amp;#39;&lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;articolo sul ciclo di feedback&lt;/a&gt;
dal lato del changelog; la roadmap è ciò che la cliente vede nel mezzo di esso. La rassegna
&lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;strumenti per il changelog&lt;/a&gt; copre quali prodotti offrono una vista roadmap e
quali la trattano come una board separata, che è la differenza che decide se resta accurata.&lt;/p&gt;
&lt;h2&gt;Come appare una buona roadmap pubblica?&lt;/h2&gt;
&lt;p&gt;Sembra corta, e ogni elemento su di essa è un issue che qualcuno può aprire. Il test è se una
cliente può andare da un elemento alla discussione dietro di esso, e da un elemento rilasciato alla
voce che descrive cosa è effettivamente cambiato. Una roadmap che è una lista di nomi di
funzionalità senza modo di entrare è una brochure.&lt;/p&gt;
&lt;p&gt;Un esempio lavorato, come il JSON che un widget andrebbe a recuperare:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &amp;quot;columns&amp;quot;: [
    { &amp;quot;column&amp;quot;: &amp;quot;planned&amp;quot;, &amp;quot;hasMore&amp;quot;: false, &amp;quot;items&amp;quot;: [
      { &amp;quot;id&amp;quot;: &amp;quot;6b0c1f...&amp;quot;, &amp;quot;column&amp;quot;: &amp;quot;planned&amp;quot;,
        &amp;quot;publicTitle&amp;quot;: &amp;quot;Saved views on the inbox&amp;quot;,
        &amp;quot;publicDescription&amp;quot;: &amp;quot;Keep a filter you use often and come back to it.&amp;quot;,
        &amp;quot;publishedAt&amp;quot;: &amp;quot;2026-09-16T10:04:11.000Z&amp;quot; }
    ]},
    { &amp;quot;column&amp;quot;: &amp;quot;building&amp;quot;, &amp;quot;hasMore&amp;quot;: false, &amp;quot;items&amp;quot;: [
      { &amp;quot;id&amp;quot;: &amp;quot;71a4e2...&amp;quot;, &amp;quot;column&amp;quot;: &amp;quot;building&amp;quot;,
        &amp;quot;publicTitle&amp;quot;: &amp;quot;Roadmap column in the widget&amp;quot;,
        &amp;quot;publicDescription&amp;quot;: &amp;quot;See what is coming without leaving the page.&amp;quot;,
        &amp;quot;publishedAt&amp;quot;: &amp;quot;2026-09-12T08:20:02.000Z&amp;quot; }
    ]},
    { &amp;quot;column&amp;quot;: &amp;quot;shipped&amp;quot;, &amp;quot;hasMore&amp;quot;: false, &amp;quot;items&amp;quot;: [
      { &amp;quot;id&amp;quot;: &amp;quot;5c9d70...&amp;quot;, &amp;quot;column&amp;quot;: &amp;quot;shipped&amp;quot;,
        &amp;quot;publicTitle&amp;quot;: &amp;quot;Feedback filed as labelled issues&amp;quot;,
        &amp;quot;publicDescription&amp;quot;: &amp;quot;Widget submissions arrive as issues your triage already handles.&amp;quot;,
        &amp;quot;publishedAt&amp;quot;: &amp;quot;2026-09-02T15:41:37.000Z&amp;quot; }
    ]}
  ],
  &amp;quot;enabled&amp;quot;: true,
  &amp;quot;language&amp;quot;: &amp;quot;en&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tre elementi su tre colonne sono una roadmap pubblica perfettamente buona. Dice cosa sta arrivando,
cosa sta succedendo, e cosa è successo, e ogni riga di essa è verificabile. Altri cinque layout, da
Now/Next/Later a quello per risultati, sono mostrati con voci di esempio negli
&lt;a href=&quot;https://changeloop.dev/blog/it/product-roadmap-examples/&quot;&gt;esempi di roadmap di prodotto&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Quanti elementi dovrebbe avere una roadmap pubblica?&lt;/strong&gt;
Il meno possibile che potete difendere. Meno di dieci in totale è normale per un prodotto piccolo;
più di trenta in &amp;quot;pianificato&amp;quot; è un backlog travestito da roadmap.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una roadmap pubblica dovrebbe avere date?&lt;/strong&gt;
No. Le colonne comunicano sequenza senza creare una scadenza. Se una cliente ha bisogno di una
data, quella è una conversazione, non un elemento di roadmap.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I clienti dovrebbero votare sugli elementi della roadmap?&lt;/strong&gt;
I voti misurano chi si è presentato, non cosa conta. Un commento sull&amp;#39;issue che spiega la
soluzione alternativa che usano oggi vale più di cinquanta voti, e costa qualcosa a chi vota, che è
il punto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa succede a un elemento della roadmap che viene cancellato?&lt;/strong&gt;
Rimuovete l&amp;#39;etichetta e dite perché sull&amp;#39;issue. Un &amp;quot;non lo faremo&amp;quot; pubblico è parte del ciclo, ed è
il messaggio che la maggior parte dei team non invia mai.&lt;/p&gt;
</content:encoded></item><item><title>Automazione del changelog, e i suoi limiti</title><link>https://changeloop.dev/blog/it/changelog-automation/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/changelog-automation/</guid><description>Automatizzate raccolta, formattazione e pubblicazione. Non automatizzate selezione o formulazione. Dove sta il confine e cosa succede quando si muove.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;L&amp;#39;automazione del changelog funziona quando automatizza raccolta, classificazione e pubblicazione,
e si ferma a selezione e formulazione. Automatizzate tutto e spedite un git log formattato; non
automatizzate nulla e il changelog viene scritto a raffiche, a memoria, prima dei rilasci. La
domanda utile è quali parti automatizzare, non quanto.&lt;/p&gt;
&lt;p&gt;I progetti di automazione del changelog falliscono in una di due direzioni, ed entrambe sono
prevedibili dal primo incontro di design. Automatizzate troppo poco e il changelog è un documento
che qualcuno dovrebbe aggiornare, il che significa che viene aggiornato a raffiche, da chi ha
pescato la cannuccia più corta. Automatizzate troppo e diventa un git log formattato: completo,
accurato, e letto da nessuno.&lt;/p&gt;
&lt;h2&gt;Quali parti di un changelog dovrebbero essere automatizzate?&lt;/h2&gt;
&lt;p&gt;Tre dei quattro passi. Raccolta e pubblicazione completamente; classificazione come prima passata
con override umano; selezione e formulazione mai.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Passo&lt;/th&gt;
&lt;th&gt;Automatizzare?&lt;/th&gt;
&lt;th&gt;Perché&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Raccolta: cambiamenti da commit, PR, ticket in una lista&lt;/td&gt;
&lt;td&gt;Completamente&lt;/td&gt;
&lt;td&gt;Noioso, saltato sotto scadenza, le macchine lo fanno perfettamente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Classificazione: Added, Fixed, Changed, Deprecated, Removed, Security&lt;/td&gt;
&lt;td&gt;Prima passata, override umano&lt;/td&gt;
&lt;td&gt;Circa l&amp;#39;80% corretto solo dai metadati; il 20% sbagliato sono le voci che contano&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Selezione e formulazione: cosa dire al lettore, e come&lt;/td&gt;
&lt;td&gt;Mai&lt;/td&gt;
&lt;td&gt;È tutto il valore dell&amp;#39;artefatto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pubblicazione: pagina, feed, email, widget, Slack&lt;/td&gt;
&lt;td&gt;Completamente, da una fonte&lt;/td&gt;
&lt;td&gt;Dove va la maggior parte dello sforzo manuale reale&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Raccolta.&lt;/strong&gt; Portare i cambiamenti dal luogo dove accadono (commit, PR, ticket) in una lista.
Automatizzate questo completamente. Gli umani sono scarsi in questo, è noioso, ed è il passo che
viene saltato sotto scadenza. &lt;a href=&quot;https://changeloop.dev/blog/it/conventional-commits-changelog/&quot;&gt;Conventional commits&lt;/a&gt; o le
etichette PR sono la materia prima abituale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Classificazione.&lt;/strong&gt; Decidere se qualcosa è Added, Fixed, Changed, Deprecated, Removed o Security.
Automatizzate la prima passata dal tipo di commit o dall&amp;#39;etichetta PR, e lasciate che un umano
faccia override. La precisione qui è intorno all&amp;#39;ottanta percento solo dai metadati, e il venti
percento sbagliato è concentrato esattamente nelle voci che contano, perché l&amp;#39;ambiguità correla con
il significato.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Selezione e formulazione.&lt;/strong&gt; Decidere cosa dovrebbe sapere un lettore e come dirlo. &lt;strong&gt;Non
automatizzate questo.&lt;/strong&gt; È tutto il valore dell&amp;#39;artefatto. Tutto il resto è logistica.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pubblicazione.&lt;/strong&gt; Portare le voci finite su una pagina, un feed, un&amp;#39;email, un widget in-app, un
canale Slack. Automatizzate completamente, e da una fonte. Qui va la maggior parte dello sforzo
manuale reale, e quasi nessuno lo conta. È anche il passo che può dire a chi ha chiesto il
cambiamento che è stato rilasciato, che è tutto il tema di
&lt;a href=&quot;https://changeloop.dev/blog/it/customer-feedback-loop/&quot;&gt;chiudere il ciclo di feedback dal changelog&lt;/a&gt;. La metà email
di quel passo ha una sua forma propria, nel
&lt;a href=&quot;https://changeloop.dev/blog/it/product-update-email/&quot;&gt;template email di aggiornamento prodotto&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Quest&amp;#39;ultimo punto merita di essere considerato. I team tendono a vedere il changelog come un
problema di scrittura, e poi passano la maggior parte del tempo sulla distribuzione: copiare voci
in uno strumento email, riformattare per l&amp;#39;in-app, incollare su Slack, aggiornare una pagina docs.
La scrittura richiede un&amp;#39;ora. La copia richiede un&amp;#39;ora per ogni rilascio, per sempre, ed è la parte
che dovrebbe avere una macchina.&lt;/p&gt;
&lt;h2&gt;Cosa succede quando il confine si sposta?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Spostatelo in alto e ottenete un dump di git.&lt;/strong&gt; L&amp;#39;automazione totale dai commit produce
&lt;code&gt;bump deps&lt;/code&gt;, &lt;code&gt;fix flaky test&lt;/code&gt;, &lt;code&gt;wip&lt;/code&gt; e &lt;code&gt;address review comments&lt;/code&gt; davanti ai clienti. Ogni team che
lo ha fatto ha poi aggiunto un filtro, e il filtro è un passo di selezione reintrodotto sotto un
altro nome, con ergonomia peggiore.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Spostatelo in basso e ottenete raffiche.&lt;/strong&gt; La raccolta totalmente manuale significa che le voci
vengono scritte a memoria al momento del rilascio. Quella è la modalità contro cui
&lt;a href=&quot;https://changeloop.dev/blog/it/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt; avverte fin dall&amp;#39;inizio, e si degrada
silenziosamente: il changelog sembra mantenuto fino alla settimana in cui nessuno ha avuto tempo.&lt;/p&gt;
&lt;h2&gt;Come appare una pipeline di automazione del changelog?&lt;/h2&gt;
&lt;p&gt;Quattro passi, con esattamente un cancello umano, posto dove una bozza diventa pubblica.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Al merge, derivate una voce bozza dalla PR: tipo da etichetta o prefisso commit, titolo come
prima bozza, link di ritorno alla PR, autrice registrata. Fatela atterrare in un cassetto non
rilasciato.&lt;/li&gt;
&lt;li&gt;Chiunque può editare qualsiasi bozza in qualsiasi momento, e editare è economico. La maggior
parte riceve una riga riscritta.&lt;/li&gt;
&lt;li&gt;Tagliare un rilascio richiede che ogni voce nel cassetto sia o editata o marcata esplicitamente
come interna. Questo cancello è tutto il design. Senza di esso, le bozze vengono rilasciate non
editate nella settimana impegnata.&lt;/li&gt;
&lt;li&gt;Pubblicare è un fan-out dall&amp;#39;insieme rilasciato: la pagina pubblica, il feed, l&amp;#39;email, il
widget, il post Slack. Una fonte, più rendering, nessuna copia.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Il passo 3 è l&amp;#39;unico posto dove è richiesta una persona, e richiede circa dieci minuti per
rilascio una volta che le bozze sono decenti. Dove è coinvolta una richiesta di un cliente, la
bozza porta anche l&amp;#39;issue che chiude, il che è ciò che permette al passo 4 di avvisare chi ha
chiesto; la &lt;a href=&quot;https://changeloop.dev/blog/it/feature-request-template/&quot;&gt;template di richiesta funzionalità&lt;/a&gt; è progettata
perché quel link sopravviva. Dove si colloca questo passo nel flusso di rilascio più ampio è il
tema del &lt;a href=&quot;https://changeloop.dev/blog/it/release-management-process/&quot;&gt;processo di release management&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Cosa richiede l&amp;#39;automazione dai vostri dati?&lt;/h2&gt;
&lt;p&gt;Niente di tutto questo funziona se il changelog è un file Markdown, perché un file non può essere
reso su cinque superfici senza riparsarlo, e parsare la prosa è come si finisce con un widget che
mostra metà titolo.&lt;/p&gt;
&lt;p&gt;Le voci devono essere strutturate: un tipo, una data, una versione o identificatore di rilascio,
un pubblico, un corpo e un link. Allora il file, la pagina, il feed e l&amp;#39;email sono tutte viste.
Quel punto strutturale è l&amp;#39;unica cosa che vale la pena fare bene prima di scegliere uno strumento,
perché è ciò che non potete aggiungere dopo a basso costo. Niente di
tutto questo funziona se poi una voce non viene davvero creata per ogni cambiamento che ne ha
bisogno; &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-ci-enforcement/&quot;&gt;imporre una voce di changelog in CI&lt;/a&gt; copre come far
rifiutare alla pipeline un merge senza voce, invece di lasciare quel passaggio alla memoria.&lt;/p&gt;
&lt;p&gt;Costruiamo &lt;a href=&quot;https://changeloop.dev/&quot;&gt;changeloop&lt;/a&gt;, dove il changelog è prima un feed e poi una pagina, quindi leggete
questo come un interesse piuttosto che una raccomandazione imparziale; il &lt;a href=&quot;https://changeloop.dev/pricing&quot;&gt;pricing&lt;/a&gt; è un
repository gratuito senza carta, sufficiente per vedere la forma. &lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;Strumenti per il changelog&lt;/a&gt;
è la nostra rassegna di cos&amp;#39;altro c&amp;#39;è, inclusi i prodotti con cui competiamo, e il
&lt;a href=&quot;https://changeloop.dev/changelog-generator&quot;&gt;generatore di changelog&lt;/a&gt; fa i passi di raccolta e classificazione nel
browser se volete vedere la derivazione prima di impegnarvi in una pipeline.&lt;/p&gt;
&lt;h2&gt;Il test&lt;/h2&gt;
&lt;p&gt;Contate i minuti tra un cambiamento mergiato e quel cambiamento visibile a una cliente che non
legge il vostro repo. Se la maggior parte di quei minuti è qualcuno che copia testo tra strumenti,
l&amp;#39;automazione di cui avete bisogno è nella pubblicazione, non nella scrittura.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Può l&amp;#39;IA scrivere il changelog?&lt;/strong&gt;
Può redigerne una bozza. Un modello a cui viene data la pull request mergiata produce la maggior
parte delle volte una prima bozza utilizzabile del titolo e del corpo, il che è raccolta e
classificazione fatte meglio. La selezione, se dire qualcosa a un lettore, e la formulazione
finale, hanno ancora bisogno della persona che conosce il pubblico, e una pipeline che pubblica
bozze senza quel cancello ha automatizzato il passo sbagliato.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra un generatore di changelog e l&amp;#39;automazione del changelog?&lt;/strong&gt;
Un generatore trasforma i commit in una lista formattata una volta, su richiesta. L&amp;#39;automazione
gira ad ogni merge, mantiene un cassetto non rilasciato, condiziona il rilascio alla revisione
umana, e pubblica su ogni superficie da una fonte. Il generatore è il primo passo della pipeline,
eseguito a mano.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il changelog dovrebbe essere automatizzato dai commit o dalle pull request?&lt;/strong&gt;
Dalle pull request, dove l&amp;#39;unità di cambiamento è la PR: il titolo e la descrizione sono scritti
una volta, per l&amp;#39;intero cambiamento, e la PR collega l&amp;#39;issue che chiude. La derivazione basata su
commit funziona quando il commit è l&amp;#39;unità e segue una convenzione.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come si impedisce all&amp;#39;automazione di pubblicare cambiamenti interni?&lt;/strong&gt;
Classificate &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;ci&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt; e aggiornamenti di dipendenze come interni per
default, e rendete la promozione a pubblico un atto deliberato. Il default inverso, pubblico a meno
che qualcuno lo nasconda, è come &lt;code&gt;bump deps&lt;/code&gt; raggiunge i clienti.&lt;/p&gt;
</content:encoded></item><item><title>Changelog vs release notes: qual è la differenza?</title><link>https://changeloop.dev/blog/it/changelog-vs-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/changelog-vs-release-notes/</guid><description>Un changelog è un registro continuo per chi cerca qualcosa. Le release notes sono un messaggio curato per chi decide se interessarsene. Ecco la divisione.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un changelog è un registro continuo e cumulativo di tutto ciò che è cambiato, scritto per qualcuno
che sta cercando qualcosa. Le release notes sono un messaggio curato su un rilascio, scritto per
qualcuno che decide se lo riguarda. La differenza è di pubblico, non di formattazione, e la
maggior parte dei team ne ha bisogno di entrambi: uno come riferimento, uno come annuncio, derivati
dalle stesse voci.&lt;/p&gt;
&lt;p&gt;La maggior parte dei team finisce con uno di questi per caso e l&amp;#39;altro su richiesta. Iniziate con
un changelog perché uno sviluppatore vuole un registro di cosa è stato rilasciato. Mesi dopo
qualcuno del supporto chiede perché i clienti non sapessero di una funzione live da aprile, e ora
vi servono release notes.&lt;/p&gt;
&lt;h2&gt;Changelog vs release notes, a confronto&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Changelog&lt;/th&gt;
&lt;th&gt;Release notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Lettore&lt;/td&gt;
&lt;td&gt;Qualcuno che cerca qualcosa&lt;/td&gt;
&lt;td&gt;Qualcuno che decide se interessarsene&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ambito&lt;/td&gt;
&lt;td&gt;Tutto ciò che è cambiato&lt;/td&gt;
&lt;td&gt;Cosa vale la pena dire su questo rilascio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cadenza&lt;/td&gt;
&lt;td&gt;Continua, per merge o per rilascio&lt;/td&gt;
&lt;td&gt;Per rilascio, e solo quelli che vale la pena annunciare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tono&lt;/td&gt;
&lt;td&gt;Conciso, fattuale, spesso imperativo&lt;/td&gt;
&lt;td&gt;Esplicativo, a volte persuasivo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Durata&lt;/td&gt;
&lt;td&gt;Permanente, letto anche anni dopo&lt;/td&gt;
&lt;td&gt;Letto la prima settimana, poi archiviato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vive in&lt;/td&gt;
&lt;td&gt;Il repo, un sito docs, una pagina &lt;code&gt;/changelog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Email, in-app, un post del blog, una pagina di rilascio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fallisce per&lt;/td&gt;
&lt;td&gt;Essere incompleto&lt;/td&gt;
&lt;td&gt;Essere noioso, o arrivare tardi&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Cos&amp;#39;è un changelog?&lt;/h2&gt;
&lt;p&gt;Un changelog è un registro cronologico, quasi completo, di ciò che è cambiato, più recente prima,
con ogni voce tipizzata (added, changed, deprecated, removed, fixed, security) e datata. Il suo
lettore ha già deciso che gli importa. Sta cercando qualcosa: quando è cambiato un comportamento,
se un bug è corretto, quale versione ha introdotto un flag. La completezza è tutto il valore, per
cui la convenzione &lt;a href=&quot;https://changeloop.dev/blog/it/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt; dedica la maggior
parte della sua unica pagina alla struttura e quasi niente alla prosa.&lt;/p&gt;
&lt;h2&gt;Cosa sono le release notes?&lt;/h2&gt;
&lt;p&gt;Le release notes sono un messaggio selettivo, scritto in prosa, su un rilascio. Il loro lettore non
ha ancora deciso nulla. Sta decidendo se questo rilascio gli importa, e se deve fare qualcosa al
riguardo. La selezione è tutto il valore: una release note che elenca tutto è un changelog con
paragrafi, e fallisce il lettore allo stesso modo in cui un changelog che salta cose fallisce il
suo. &lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;Come scrivere release notes&lt;/a&gt; riguarda la selezione e la
formulazione.&lt;/p&gt;
&lt;h2&gt;Servono sia un changelog che le release notes?&lt;/h2&gt;
&lt;p&gt;Ne servono entrambi una volta che i vostri due pubblici vogliono cose diverse; fino ad allora un
solo artefatto che fa entrambi i lavori è corretto. I team piccoli pubblicano una singola pagina
&lt;code&gt;/changelog&lt;/code&gt; con un breve paragrafo in cima a ogni voce, e per un po&amp;#39; quello serve altrettanto bene
uno sviluppatore che cerca una correzione e un cliente che scorre in cerca di novità. Dividere
troppo presto vi dà due cose da mantenere e una delle due marcirà.&lt;/p&gt;
&lt;p&gt;La divisione vale la pena quando iniziano a succedere queste cose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le vostre voci di changelog sono cresciute con paragrafi esplicativi che gli sviluppatori
scorrono senza leggere.&lt;/li&gt;
&lt;li&gt;O il contrario: i vostri annunci di rilascio hanno iniziato a elencare aggiornamenti di
dipendenze.&lt;/li&gt;
&lt;li&gt;Il supporto sta copiando voci nelle email e riscrivendole per strada.&lt;/li&gt;
&lt;li&gt;Qualcuno chiede &amp;quot;solo i cambiamenti che rompono qualcosa&amp;quot; e non potete filtrarli.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quell&amp;#39;ultimo è il vero segnale. Se nessuno può rispondere &amp;quot;cosa è cambiato che mi riguarda&amp;quot; senza
leggere tutto, avete un artefatto che fa male due lavori.&lt;/p&gt;
&lt;h2&gt;Una fonte, due viste&lt;/h2&gt;
&lt;p&gt;L&amp;#39;errore è trattarli come due documenti. Sono due viste sullo stesso insieme di cambiamenti.&lt;/p&gt;
&lt;p&gt;Scrivete il changelog man mano, una voce per ogni cambiamento significativo, ciascuna etichettata
con cosa è: fixed, added, changed, removed, deprecated, security. Mantenete le voci abbastanza
brevi che scriverne una non sia una decisione. Poi, al momento del rilascio, le release notes sono
una selezione e una riscrittura: prendete le voci che importano a una persona, raggruppatele per
cosa permettono di fare, e mettete il motivo in cima.&lt;/p&gt;
&lt;p&gt;Questo ha una conseguenza pratica. Se il changelog è la fonte, deve essere dati strutturati, non
una pagina mantenuta a mano. Una voce ha bisogno di un tipo, una data, una versione, e un modo di
dire per chi è. Una volta che ha quello, la pagina pubblica, il widget in-app e il feed RSS o
JSON sono tre rendering di una cosa sola, e nessuno riscrive nulla lungo il percorso verso un
cliente. Un&amp;#39;email di release notes può citare la stessa voce, da qualunque strumento invii le
vostre email. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-automation/&quot;&gt;Automazione del changelog&lt;/a&gt; riguarda quale di questi passi
dovrebbe possedere una macchina. Questo è tutto l&amp;#39;argomento per trattare un changelog come un feed
piuttosto che una pagina. È anche, con trasparenza, ciò che costruiamo, quindi leggetelo come un
interesse piuttosto che un sondaggio neutrale.&lt;/p&gt;
&lt;h2&gt;Se avete tempo solo per uno&lt;/h2&gt;
&lt;p&gt;Scrivete il changelog. Costa meno per voce, è utile il giorno in cui lo scrivete, e le release
notes possono essere derivate da esso dopo. Il contrario non è vero: non potete ricostruire un
anno di cambiamenti da dodici email di annuncio, e la gente ve lo chiederà.&lt;/p&gt;
&lt;p&gt;Mantenetelo in un formato fisso così che la derivazione resti possibile. La nostra pagina di
&lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; raccoglie voci di team che lo fanno bene, e la
&lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;release notes template&lt;/a&gt; è la forma che usiamo quando trasformiamo un
insieme di voci in qualcosa che vale la pena inviare.&lt;/p&gt;
&lt;h2&gt;Una nota sui nomi&lt;/h2&gt;
&lt;p&gt;Niente di tutto questo è standardizzato, e troverete &amp;quot;release notes&amp;quot; usato per una lista continua e
&amp;quot;changelog&amp;quot; usato per un annuncio trimestrale. Non vale la pena discutere sulle parole. Decidete
quale dei due lavori sta facendo ciascuno dei vostri artefatti, chiamatelo come il vostro team già
lo chiama, e assicuratevi che nessuno dei due stia facendo entrambi in silenzio.&lt;/p&gt;
&lt;p&gt;Su quale superficie finisca il risultato è una decisione a parte, trattata in
&lt;a href=&quot;https://changeloop.dev/blog/it/changelog-page/&quot;&gt;come costruire una pagina di changelog&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Un changelog è lo stesso delle release notes?&lt;/strong&gt;
No. Un changelog è il registro completo, letto da chi cerca qualcosa; le release notes sono
l&amp;#39;annuncio selezionato, letto da chi decide se interessarsene. Lo stesso cambiamento appare in
entrambi, formulato diversamente per ciascun lettore.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le release notes possono essere generate da un changelog?&lt;/strong&gt;
Sì, ed è la direzione giusta. Selezionate le voci che importerebbero a una persona, raggruppatele
per risultato, riscrivete il titolo. Il contrario, ricostruire un changelog dagli annunci, perde
tutto ciò che gli annunci hanno lasciato fuori.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dove dovrebbe vivere un changelog?&lt;/strong&gt;
Da qualche parte permanente e collegabile a cui il lettore può arrivare senza un repository: una
pagina &lt;code&gt;/changelog&lt;/code&gt;, un sito docs, o un feed che si rende in più posti. Un &lt;code&gt;CHANGELOG.md&lt;/code&gt; da solo
raggiunge i collaboratori, non i clienti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un changelog dovrebbe includere cambiamenti interni?&lt;/strong&gt;
Sì, in fondo, una riga ciascuno. Il changelog è il registro completo. Anche le release
notes possono tenerli, in una breve sezione finale, purché vengano prima i cambiamenti che un lettore
noterà.&lt;/p&gt;
</content:encoded></item><item><title>Dai conventional commits a un changelog</title><link>https://changeloop.dev/blog/it/conventional-commits-changelog/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/conventional-commits-changelog/</guid><description>I conventional commit rendono un changelog derivabile. Non lo rendono leggibile. Cosa offre la convenzione, dove si ferma, e come colmare il divario.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I conventional commit regalano a un changelog tre cose: il tipo di ogni cambiamento, la parte del
sistema che ha toccato, e se rompe qualcosa. Non gli regalano nient&amp;#39;altro. Formulazione,
raggruppamento e selezione, che sono il changelog, restano completamente aperti, e una pipeline che
finge il contrario spedisce un git log formattato.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;feat(exports): add CSV column selection
fix(auth): reject expired refresh tokens
chore(deps): bump node-pg to 8.11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tre commit nel formato &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt;. Da questi, una
macchina può dirvi che uno è una funzionalità, uno è una correzione, uno è manutenzione, e quale
parte del sistema ha toccato ciascuno. Questo è genuinamente utile, ed è tutta la promessa della
convenzione: una cronologia dei commit leggibile da qualcosa di diverso da una persona. L&amp;#39;errore è
pensare che questo vi dia un changelog. Vi dà la materia prima.&lt;/p&gt;
&lt;h2&gt;Cosa specifica la convenzione?&lt;/h2&gt;
&lt;p&gt;Un tipo, uno scope opzionale, e una descrizione: &lt;code&gt;type(scope): description&lt;/code&gt;. I tipi
convenzionalmente sono &lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;, &lt;code&gt;refactor&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;perf&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;ci&lt;/code&gt;.
Due cose segnano un cambiamento che rompe qualcosa: un &lt;code&gt;!&lt;/code&gt; prima dei due punti, o un footer
&lt;code&gt;BREAKING CHANGE:&lt;/code&gt;. Gli strumenti si basano su &lt;code&gt;feat&lt;/code&gt; e &lt;code&gt;fix&lt;/code&gt; per i bump di versione minor e patch,
e sul marcatore di breaking per uno major.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Il commit vi dà&lt;/th&gt;
&lt;th&gt;Il changelog ha bisogno di&lt;/th&gt;
&lt;th&gt;Chi colma il divario&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;code&gt;feat&lt;/code&gt; / &lt;code&gt;fix&lt;/code&gt; / &lt;code&gt;chore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Added / Fixed / interno&lt;/td&gt;
&lt;td&gt;Una mappatura, automatica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;(scope)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Un raggruppamento che il lettore riconosce&lt;/td&gt;
&lt;td&gt;Una persona, una volta per scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!&lt;/code&gt; o &lt;code&gt;BREAKING CHANGE:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chi si rompe, per quando, e cosa fare&lt;/td&gt;
&lt;td&gt;Una persona, ogni volta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;La descrizione, scritta per una revisora&lt;/td&gt;
&lt;td&gt;Il risultato, scritto per una cliente&lt;/td&gt;
&lt;td&gt;Una persona, ogni voce&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Un commit&lt;/td&gt;
&lt;td&gt;Un cambiamento, che può essere più commit&lt;/td&gt;
&lt;td&gt;Regole di squash, o una persona&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Il marcatore lo dice allo strumento; non lo dice al chiamante, che è l&amp;#39;argomento di
&lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;come deprecare un&amp;#39;API&lt;/a&gt; e
&lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;cos&amp;#39;è un cambiamento che rompe qualcosa&lt;/a&gt;. È una specifica piccola e
vale la pena seguirla anche se non generate mai nulla da essa, perché forza una decisione per
commit: è un cambiamento che gli utenti vedono, o no.&lt;/p&gt;
&lt;h2&gt;Dove si fermano i conventional commit?&lt;/h2&gt;
&lt;p&gt;Si fermano alla frase. Tutto ciò che la convenzione cattura sono metadati su un cambiamento; il
cambiamento stesso è ancora descritto nel vocabolario di una revisora.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I messaggi di commit sono scritti per revisore.&lt;/strong&gt; &lt;code&gt;fix(auth): reject expired refresh tokens&lt;/code&gt; è
corretto e non dice nulla a una cliente. La lettrice di un changelog vuole &amp;quot;verrai disconnesso
quando una sessione è davvero scaduta, invece di vedere 401 intermittenti&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gli scope sono interni.&lt;/strong&gt; &lt;code&gt;exports&lt;/code&gt;, &lt;code&gt;auth&lt;/code&gt;, &lt;code&gt;ingest&lt;/code&gt; sono nomi di moduli. Sono stabili, il che
li rende buoni per raggruppare, e privi di significato per chiunque sia fuori dalla codebase.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un cambiamento è spesso più commit.&lt;/strong&gt; Una funzionalità mergiata su undici commit produce undici
voci, dieci delle quali rumore, e schiacciarle per nasconderlo perde la cronologia di revisione.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;chore&lt;/code&gt; è un cassetto, non una categoria.&lt;/strong&gt; Aggiornamenti di dipendenze, cambiamenti CI e
rinomine finiscono tutti lì, e alcuni contano per gli utenti mentre la maggior parte no.&lt;/p&gt;
&lt;p&gt;Quindi: la convenzione vi dà tipo, scope e stato di breaking gratis, e lascia formulazione,
raggruppamento e selezione completamente aperti. Quei tre sono il changelog. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-entry-ownership/&quot;&gt;A chi
appartiene davvero una voce di changelog&lt;/a&gt; copre chi dovrebbe
occuparsi di quella formulazione, raggruppamento e selezione, dato che la convenzione stessa non
ha un&amp;#39;opinione a riguardo.&lt;/p&gt;
&lt;h2&gt;Come si genera un changelog dai conventional commit?&lt;/h2&gt;
&lt;p&gt;In due strati, e il secondo deve essere obbligatorio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strato uno, automatico.&lt;/strong&gt; Al merge, derivate una voce bozza dal commit: tipo mappato su un tipo
di changelog (&lt;code&gt;feat&lt;/code&gt; su Added, &lt;code&gt;fix&lt;/code&gt; su Fixed, un marcatore di breaking su Changed più un flag),
scope tenuto come metadato piuttosto che come testo, link alla PR. Fatela atterrare nella sezione
Unreleased che &lt;a href=&quot;https://changeloop.dev/blog/it/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt; richiede.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strato due, umano, e richiesto.&lt;/strong&gt; Prima che esca un rilascio, ogni voce bozza o riceve una
riscrittura di una riga nel vocabolario dell&amp;#39;utente, o viene marcata interna e scartata dalla vista
pubblica. Questo è il passo che la gente cerca di saltare, e saltarlo è ciò che produce changelog
che si leggono come un diff.&lt;/p&gt;
&lt;p&gt;Il dettaglio importante di design è che lo strato due non è opzionale nella pipeline. Se un
rilascio può essere tagliato con bozze non editate, lo sarà, nella settimana in cui tutti sono
impegnati. Quali passi appartengono alla macchina e quali alla persona è tutto il tema di
&lt;a href=&quot;https://changeloop.dev/blog/it/changelog-automation/&quot;&gt;automazione del changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tagliare il rilascio è anche il momento in cui un tag git, una release e questa voce di changelog
o combaciano o iniziano a disallinearsi; &lt;a href=&quot;https://changeloop.dev/blog/it/git-tags-releases-changelog/&quot;&gt;tag git, release e il tuo changelog&lt;/a&gt;
copre come mantenere i tre sincronizzati.&lt;/p&gt;
&lt;h2&gt;Tre trappole&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gli squash merge mangiano i footer.&lt;/strong&gt; Se la vostra piattaforma schiaccia con il titolo della PR
come messaggio, il footer &lt;code&gt;BREAKING CHANGE:&lt;/code&gt; di un commit dentro quel branch scompare, e il vostro
strumento smette silenziosamente di vedere il cambiamento che rompe qualcosa. Controllate cosa
mantiene davvero il vostro template di squash.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I commit di revert producono voci fantasma.&lt;/strong&gt; Un &lt;code&gt;fix&lt;/code&gt; che viene revertito il giorno dopo genera
una voce per qualcosa che non è mai stato rilasciato, a meno che la derivazione non riconcili i
revert. La maggior parte degli strumenti non lo fa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il bump di versione e il changelog si disallineano.&lt;/strong&gt; Se la versione è calcolata dai commit e il
changelog è scritto a mano dopo, divergono in circa due rilasci. Calcolate entrambi nello stesso
passaggio o accettate che uno dei due sia sbagliato.&lt;/p&gt;
&lt;h2&gt;Se volete la parte meccanica senza una pipeline&lt;/h2&gt;
&lt;p&gt;Il nostro &lt;a href=&quot;https://changeloop.dev/changelog-generator&quot;&gt;generatore di changelog&lt;/a&gt; fa il passo di derivazione nel browser:
incollate i commit, ottenete voci raggruppate e tipizzate. È deliberatamente deterministico ed
interamente lato client, così i commit che incollate non lasciano mai la vostra macchina, il che
conta quando i messaggi provengono da un repository privato. Fa onestamente la metà di raccolta e
non tenta lo strato due, perché lo strato due è un giudizio e uno strumento che lo finge produce
esattamente il changelog contro cui argomenta questo articolo.&lt;/p&gt;
&lt;p&gt;Per la versione pipeline, &lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;strumenti per il changelog&lt;/a&gt; copre cosa esiste.&lt;/p&gt;
&lt;h2&gt;Il riassunto&lt;/h2&gt;
&lt;p&gt;I conventional commit rispondono &amp;quot;che tipo di cambiamento è questo&amp;quot; in modo affidabile ed
economico. Non rispondono &amp;quot;cosa dovremmo dire alla gente&amp;quot;, e nessuna quantità di strumenti sopra il
messaggio di commit lo farà, perché l&amp;#39;informazione non è mai stata nel messaggio di commit.
Mettete in budget la riscrittura.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;I conventional commit generano automaticamente un changelog?&lt;/strong&gt;
Generano automaticamente una bozza: voci tipizzate, con scope, collegate. La formulazione per una
cliente, il raggruppamento e la decisione su cosa lasciare fuori hanno ancora bisogno di una
persona, e una pipeline che salta quel passo pubblica messaggi di commit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quali tipi di conventional commit appaiono in un changelog?&lt;/strong&gt;
&lt;code&gt;feat&lt;/code&gt; e &lt;code&gt;fix&lt;/code&gt; sempre, come Added e Fixed. &lt;code&gt;perf&lt;/code&gt; di solito, come Changed. &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;,
&lt;code&gt;refactor&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt; e &lt;code&gt;ci&lt;/code&gt; sono interni per default e appaiono solo se una persona ne
promuove uno.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come segnano i conventional commit un cambiamento che rompe qualcosa?&lt;/strong&gt;
Un &lt;code&gt;!&lt;/code&gt; dopo il tipo o lo scope (&lt;code&gt;feat(api)!: ...&lt;/code&gt;), o un footer &lt;code&gt;BREAKING CHANGE:&lt;/code&gt; nel corpo del
commit. Entrambi si perdono se uno squash merge conserva solo il titolo della PR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Servono i conventional commit per automatizzare un changelog?&lt;/strong&gt;
No. Le etichette PR, i template PR e i link agli issue portano gli stessi metadati per i team che
mergiano tramite pull request. I conventional commit sono l&amp;#39;opzione più economica quando l&amp;#39;unità di
cambiamento è il commit.&lt;/p&gt;
</content:encoded></item><item><title>Come scrivere release notes che la gente legge davvero</title><link>https://changeloop.dev/blog/it/how-to-write-release-notes/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/how-to-write-release-notes/</guid><description>«Correzioni di bug e miglioramenti prestazioni» non è una release note. La domanda a cui ogni voce deve rispondere, e la riscrittura di una reale.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Per scrivere release notes che la gente legge, rispondi a una domanda per ogni voce: cosa può fare
ora il lettore che prima non poteva, e cosa deve fare al riguardo. Metti per prima qualsiasi cosa
con una scadenza, nomina chi è interessato, di&amp;#39; &amp;quot;nessuna azione necessaria&amp;quot; quando è vero, e salta
i rilasci che non hanno nulla da dire. Tutto il resto in questa pagina è quella regola applicata.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Correzioni di bug e miglioramenti delle prestazioni.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ogni prodotto lo ha pubblicato almeno una volta. La causa raramente è pigrizia: è quello che si
ottiene quando le release notes sono scritte dall&amp;#39;interno, da qualcuno che ha passato due
settimane nel diff e non riesce più a vedere quali parti importerebbero a uno sconosciuto. Un tono
migliore non lo risolverà; rispondere alla domanda sì.&lt;/p&gt;
&lt;h2&gt;Cosa dovrebbero includere le release notes?&lt;/h2&gt;
&lt;p&gt;Le release notes dovrebbero includere, per ogni cambiamento degno di nota: cosa può fare ora il
lettore, chi è interessato, cosa deve fare al riguardo (incluso &amp;quot;niente&amp;quot;), e quando entra in
vigore qualsiasi cosa con una scadenza. Non dovrebbero includere numeri di ticket interni, nomi di
componenti usati solo dal team, o un numero di versione come unico titolo.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Includere&lt;/th&gt;
&lt;th&gt;Escludere&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Il risultato, nei termini del lettore&lt;/td&gt;
&lt;td&gt;L&amp;#39;implementazione, nei termini del team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chi è interessato, per piano, ruolo o versione API&lt;/td&gt;
&lt;td&gt;&amp;quot;Alcuni utenti&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L&amp;#39;azione richiesta, o &amp;quot;nessuna azione necessaria&amp;quot;&lt;/td&gt;
&lt;td&gt;Silenzio, che il lettore riempie con lo scenario peggiore&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Una data per qualsiasi cosa con scadenza&lt;/td&gt;
&lt;td&gt;Un numero di versione al posto di una data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Un link alla doc che lo spiega&lt;/td&gt;
&lt;td&gt;Un link alla pull request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug segnalati dagli utenti, e il limite che è stato alzato&lt;/td&gt;
&lt;td&gt;Id di ticket interni&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;La sezione noiosa, una riga ciascuna, in fondo&lt;/td&gt;
&lt;td&gt;La sezione noiosa mescolata con le novità&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;La divisione tra una release note e una &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;voce di changelog&lt;/a&gt;
è ciò che rende possibile questa lista: il changelog tiene tutto, così le notes possono lasciare
fuori delle cose.
Esempi annotati di ogni tipo di voce sono raccolti in &lt;a href=&quot;https://changeloop.dev/blog/it/release-notes-examples/&quot;&gt;esempi di release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;La domanda a cui risponde ogni voce&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cosa può fare ora il lettore che prima non poteva, e cosa deve fare al riguardo?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Se una voce non può rispondere a questo, appartiene al changelog e non alle release notes.
Entrambe le metà contano. La prima metà è il valore. La seconda metà è quella che i team
dimenticano, ed è quella che genera ticket di supporto quando manca.&lt;/p&gt;
&lt;p&gt;Due esempi della seconda metà che fa un lavoro reale:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;I webhook esistenti continuano a funzionare fino al 1° novembre. Dopo quella data, i payload non
firmati verranno rifiutati.&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Nessuna azione necessaria. Le esportazioni esistenti vengono ricodificate automaticamente la
prossima volta che le apri.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La seconda dice esplicitamente &amp;quot;nessuna azione necessaria&amp;quot;. Vale la pena scrivere quella frase ogni
singola volta, perché un lettore che non la trova presume il peggio.&lt;/p&gt;
&lt;h2&gt;Come dovrebbero essere ordinate le release notes?&lt;/h2&gt;
&lt;p&gt;Ordinale per conseguenza sul lettore, mai per la parte del sistema che è cambiata. Raggruppare per
API, dashboard, mobile e infrastruttura è il vostro organigramma, non il problema del lettore.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cambiamenti che rompono qualcosa e qualsiasi cosa con scadenza.&lt;/strong&gt; Sempre per primi, anche se
piccoli. Se un lettore smette di leggere dopo una riga, questa è la riga che deve aver letto. Se
la scadenza è un sunset, la voce dovrebbe suonare come un
&lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;avviso di deprecazione&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cosa c&amp;#39;è di nuovo che vorranno.&lt;/strong&gt; Uno per paragrafo, con il risultato nella prima frase.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cosa è migliorato.&lt;/strong&gt; Bug segnalati, limiti alzati, cose che erano lente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tutto il resto, come lista.&lt;/strong&gt; Aggiornamenti di dipendenze, refactor interni, copy minore. Una
riga ciascuno. Nessuno legge questa sezione, e dovrebbe comunque esserci, perché chi la cerca ne
ha davvero bisogno.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;La riscrittura&lt;/h2&gt;
&lt;p&gt;Prima:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;v4.2.0&lt;/strong&gt; Corretto un problema per cui l&amp;#39;endpoint &lt;code&gt;POST /exports&lt;/code&gt; restituiva intermittentemente
500 sotto carico. Rifattorizzato il worker di export. Aggiornato &lt;code&gt;node-pg&lt;/code&gt; a 8.11. Migliorata la
gestione errori nel serializzatore CSV.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dopo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Le esportazioni non falliscono più sugli account grandi.&lt;/strong&gt;
Gli account con oltre circa 50.000 righe potevano ricevere un 500 all&amp;#39;avvio di un&amp;#39;esportazione,
più spesso a fine mese. Questo è risolto, e le esportazioni di qualsiasi dimensione ora si
riprovano da sole invece di fallire. Nessuna azione necessaria, e qualsiasi esportazione fallita
nell&amp;#39;ultima settimana può semplicemente essere rieseguita.&lt;/p&gt;
&lt;p&gt;Anche nella 4.2.0: &lt;code&gt;node-pg&lt;/code&gt; 8.11, errori più chiari nel serializzatore CSV.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Stesso rilascio. La seconda nomina l&amp;#39;account interessato, il momento peggiore, cosa è cambiato, e
cosa fare. L&amp;#39;aggiornamento della dipendenza non è scomparso, ha solo smesso di essere il titolo.
L&amp;#39;articolo &lt;a href=&quot;https://changeloop.dev/blog/it/release-notes-best-practices/&quot;&gt;buone pratiche per le release notes&lt;/a&gt; ha il resto
delle regole che questa riscrittura segue, ciascuna con quanto costa saltarla.&lt;/p&gt;
&lt;h2&gt;Cose che vale la pena eliminare&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;quot;Siamo entusiasti di annunciare.&amp;quot;&lt;/strong&gt; Il lettore non è ancora entusiasta. Guadagnatelo nella
frase successiva.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Numeri di ticket interni.&lt;/strong&gt; &lt;code&gt;PROJ-4471&lt;/code&gt; non significa nulla fuori dal vostro tracker. Se la
voce ha bisogno di un riferimento, linka la pagina della doc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nomi di componenti usati solo dal vostro team.&lt;/strong&gt; Se avete rinominato la &amp;quot;pipeline di ingest&amp;quot;,
dite &amp;quot;importazioni&amp;quot;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un numero di versione come unico titolo.&lt;/strong&gt; &lt;code&gt;v4.2.0&lt;/code&gt; è un&amp;#39;etichetta di archiviazione, non un
riassunto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Screenshot di una pagina impostazioni che nessuno ha mai visitato.&lt;/strong&gt; Mostrate ciò che è
cambiato, in uso.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Con che frequenza si dovrebbero pubblicare le release notes?&lt;/h2&gt;
&lt;p&gt;Pubblicate quando succede qualcosa, non secondo un calendario. Le note che arrivano ad ogni
rilascio addestrano tutti a ignorarle. Le note che arrivano quando succede qualcosa vengono aperte.
Va bene, ed è di solito corretto, pubblicare un rilascio senza alcuna nota e far confluire le sue
voci nel set successivo che ha un titolo degno di lettura.&lt;/p&gt;
&lt;p&gt;Il changelog continua a registrare tutto. Questa è la divisione del lavoro: il changelog è
completo, le note sono selettive. Se mantieni il changelog strutturato man mano, scrivere le note
è selezione e riscrittura, non archeologia.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;release notes template&lt;/a&gt; è la forma che usiamo per il passaggio di
selezione, e &lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; raccoglie voci di team il cui changelog è
abbastanza buono da derivarne delle note.&lt;/p&gt;
&lt;p&gt;Tutto questo presuppone una pagina che controlli completamente, senza limite di lunghezza e con
link che funzionano. &lt;a href=&quot;https://changeloop.dev/blog/it/mobile-app-release-notes/&quot;&gt;Release notes per app mobile&lt;/a&gt; copre cosa
cambia quando la superficie è un elenco App Store o Play Store.
&lt;a href=&quot;https://changeloop.dev/blog/it/emergency-release-notes/&quot;&gt;Release notes di emergenza&lt;/a&gt; copre l&amp;#39;altra eccezione: cosa
cambia quando non resta più tempo per seguire affatto il normale processo di scrittura.&lt;/p&gt;
&lt;h2&gt;Un test prima di pubblicare&lt;/h2&gt;
&lt;p&gt;Leggi le note come qualcuno che è stato in vacanza per due settimane e ha 40 secondi. Se in quel
tempo non riesce a capire se gli viene richiesto qualcosa, le note non sono finite, per quanto
accurate siano.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Quanto dovrebbero essere lunghe le release notes?&lt;/strong&gt;
Quanto richiedono i cambiamenti con conseguenze, e non un pizzico di più. Un rilascio con un
cambiamento che rompe qualcosa e due miglioramenti sono tre paragrafi. Riempire un rilascio
tranquillo per farlo sembrare sostanzioso è come i lettori imparano a saltare le note.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chi dovrebbe scrivere le release notes?&lt;/strong&gt;
La persona che capisce il cambiamento, editata da qualcuno che non lo capisce. L&amp;#39;ingegnera sa cosa
è cambiato; l&amp;#39;editrice sa cosa fraintenderà uno sconosciuto. Scrivere la voce al momento del merge,
mentre l&amp;#39;ingegnera se lo ricorda ancora, è la pratica che rende tutto questo economico.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le release notes dovrebbero includere correzioni di bug?&lt;/strong&gt;
Sì, quelle che qualcuno ha segnalato o incontrato. Indica il sintomo visto dal lettore, non la
causa. &amp;quot;Le esportazioni oltre 50.000 righe fallivano&amp;quot; è una correzione che un lettore riconosce;
&amp;quot;corretta una race condition nel worker di export&amp;quot; è un messaggio di commit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è la differenza tra release notes e un changelog?&lt;/strong&gt;
Il changelog è il registro completo e continuo; le release notes sono il messaggio curato su un
rilascio, scritto per persone che non hanno ancora deciso se interessarsi. La risposta più lunga è
in &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;changelog vs release notes&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Keep a Changelog, davvero implementato</title><link>https://changeloop.dev/blog/it/keep-a-changelog-implemented/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/keep-a-changelog-implemented/</guid><description>La specifica è una pagina e si legge in dieci minuti. Implementarla è dove i team deviano. Cosa dice, cosa lascia aperto, e dove finisce per sbagliare.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Keep a Changelog è una convenzione di una pagina per un &lt;code&gt;CHANGELOG.md&lt;/code&gt;: versione più recente prima,
una sezione per versione con un numero e una data ISO, voci raggruppate sotto sei tipi (Added,
Changed, Deprecated, Removed, Fixed, Security), e una sezione Unreleased in cima per le voci tra i
rilasci. La maggior parte dei team che la cita implementa circa due terzi di essa, e il terzo che
tralascia è quello che protegge i loro utenti.&lt;/p&gt;
&lt;p&gt;Olivier Lacan ha pubblicato &lt;a href=&quot;https://keepachangelog.com/&quot;&gt;Keep a Changelog&lt;/a&gt; nel 2014 con una frase
invecchiata meglio della maggior parte della prosa sul software: &lt;em&gt;don&amp;#39;t let your friends dump git
logs into changelogs&lt;/em&gt;. Dieci anni dopo è la cosa più vicina a uno standard che questo angolo del
software abbia. Vale la pena leggere la fonte piuttosto che un riassunto; questo riguarda le parti
che vengono tralasciate.&lt;/p&gt;
&lt;h2&gt;Cosa chiede Keep a Changelog?&lt;/h2&gt;
&lt;p&gt;Un &lt;code&gt;CHANGELOG.md&lt;/code&gt; nella radice del repo, più recente prima, con una sezione per versione. Ogni
versione porta un numero e una data ISO, e raggruppa le sue voci sotto sei tipi:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tipo&lt;/th&gt;
&lt;th&gt;Per&lt;/th&gt;
&lt;th&gt;Cosa costa tralasciarlo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Added&lt;/td&gt;
&lt;td&gt;Nuove funzionalità&lt;/td&gt;
&lt;td&gt;Niente; nessuno tralascia questo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changed&lt;/td&gt;
&lt;td&gt;Cambiamenti nel comportamento esistente&lt;/td&gt;
&lt;td&gt;I lettori scoprono un cambiamento di comportamento da un errore&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deprecated&lt;/td&gt;
&lt;td&gt;Funzionalità in procinto di essere rimosse&lt;/td&gt;
&lt;td&gt;Una rimozione diventa un incidente invece di un evento pianificato&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Removed&lt;/td&gt;
&lt;td&gt;Funzionalità rimosse in questo rilascio&lt;/td&gt;
&lt;td&gt;Nessuno distingue una rimozione da un bug&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed&lt;/td&gt;
&lt;td&gt;Correzioni di bug&lt;/td&gt;
&lt;td&gt;Niente; nessuno tralascia neanche questo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Vulnerabilità&lt;/td&gt;
&lt;td&gt;L&amp;#39;unica lettrice che la cercava non la trova&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Più una sezione &lt;code&gt;Unreleased&lt;/code&gt; in cima, così c&amp;#39;è dove mettere una voce nel momento in cui viene
mergiata, e così chiunque può vedere cosa arriva.&lt;/p&gt;
&lt;p&gt;Questo è quasi tutto. Il resto è il ragionamento: le voci sono per esseri umani, una voce per
cambiamento, e il file è un documento piuttosto che un log.&lt;/p&gt;
&lt;h2&gt;Quali parti di Keep a Changelog vengono tralasciate?&lt;/h2&gt;
&lt;p&gt;La sezione Unreleased, poi quattro dei sei tipi, Security tra questi, in quest&amp;#39;ordine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Unreleased&lt;/code&gt; scompare per prima.&lt;/strong&gt; È la sezione senza scadenza, quindi è quella che smette di
essere mantenuta, e una volta sparita le voci vengono scritte al momento del rilascio dalla
cronologia dei commit. È esattamente il git-log-dump contro cui la specifica avverte all&amp;#39;inizio,
raggiunto gradualmente. &lt;a href=&quot;https://changeloop.dev/blog/it/changelog-automation/&quot;&gt;Automazione del changelog&lt;/a&gt; riguarda per lo
più tenere viva questa sezione senza che qualcuno debba ricordarselo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I sei tipi collassano in due.&lt;/strong&gt; La maggior parte dei changelog reali finisce con Added e Fixed,
perché Changed e Deprecated richiedono un giudizio su cosa qualcuno abbia dato per scontato. Quel
giudizio è la parte preziosa. Deprecated in particolare è l&amp;#39;unico tipo che è una promessa sul
futuro, e tralasciarlo è come una rimozione si trasforma in un incidente; la meccanica per mantenere
quella promessa è in &lt;a href=&quot;https://changeloop.dev/blog/it/api-deprecation/&quot;&gt;come deprecare un&amp;#39;API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Security smette di essere separato.&lt;/strong&gt; Una correzione di sicurezza archiviata sotto Fixed è
invisibile all&amp;#39;unica lettrice che la stava cercando. Tenetela distinta anche quando la correzione è
banale, e specialmente quando preferireste non attirare attenzione su di essa.&lt;/p&gt;
&lt;h2&gt;Cosa non risponde la specifica?&lt;/h2&gt;
&lt;p&gt;È un formato di file. Non dice nulla sulle domande che si incontrano subito dopo averla adottata:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Come lo scopre qualcuno?&lt;/strong&gt; Un file in un repo raggiunge i collaboratori. Non raggiunge un
cliente che non ha mai aperto GitHub.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E i prodotti senza versioni?&lt;/strong&gt; Un servizio distribuito continuamente non ha una v4.2.0 per cui
raggruppare. La maggior parte dei team sostituisce con date, il che funziona, e la specifica non
lo benedice né lo vieta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chi scrive la voce?&lt;/strong&gt; La specifica assume che lo faccia un umano. Non dice quando.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E i pubblici multipli?&lt;/strong&gt; Un file serve gli sviluppatori. Non serve lo stesso contenuto a
un&amp;#39;amministratrice non tecnica, e riformattarlo a mano per lei è dove inizia la duplicazione.
&lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;Changelog vs release notes&lt;/a&gt; è la divisione che la
specifica vi lascia fare da soli.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://common-changelog.org/&quot;&gt;Common Changelog&lt;/a&gt;, un fork più severo dell&amp;#39;idea, stringe parte di
questo: vieta certe formulazioni delle voci, richiede un link al cambiamento, ed è categorico su
chi sia il lettore. Vale la pena leggerlo se le parti sciolte di Keep a Changelog sono ciò su cui il
vostro team continua a discutere.&lt;/p&gt;
&lt;h2&gt;Si può automatizzare Keep a Changelog senza scaricare git log?&lt;/h2&gt;
&lt;p&gt;Sì: derivate la bozza da commit strutturati, mettetela in Unreleased col tipo precompilato, e
richiedete che un umano editi la formulazione prima che un rilascio venga tagliato. L&amp;#39;avvertimento
della specifica riguarda l&amp;#39;output, non lo strumento. Derivare una bozza da commit va bene.
Pubblicare quella bozza non editata è ciò a cui si oppone.&lt;/p&gt;
&lt;p&gt;La macchina gestisce raccolta e formattazione, in cui è brava. L&amp;#39;umano gestisce selezione e
formulazione, in cui non lo è. &lt;a href=&quot;https://changeloop.dev/blog/it/conventional-commits-changelog/&quot;&gt;Conventional commits&lt;/a&gt;
copre la divisione su due livelli su cui questo si basa, e quali tipi di commit si mappano su
quale delle sei categorie sopra. La nostra rassegna &lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;strumenti per il
changelog&lt;/a&gt; copre cosa esiste per la metà di raccolta.&lt;/p&gt;
&lt;h2&gt;Dove smette di essere sufficiente Keep a Changelog?&lt;/h2&gt;
&lt;p&gt;Si ferma alla distribuzione. Keep a Changelog è una buona risposta a &amp;quot;come dovrebbe apparire
questo file&amp;quot;. Non è una risposta a &amp;quot;come fanno i nostri utenti a scoprire cosa è cambiato&amp;quot;, perché
un file Markdown in un repo è una strategia di distribuzione che funziona solo se i vostri utenti
sono collaboratori.&lt;/p&gt;
&lt;p&gt;Questo è il secondo ostacolo che colpisce la maggior parte dei team: il file va bene, e nessuno
fuori dal team lo legge. Risolverlo significa che le voci devono diventare dati che possono essere
resi altrove, il che è un problema diverso dal formattare un file, ed è il motivo per cui
&lt;a href=&quot;https://changeloop.dev/changelog-examples&quot;&gt;esempi di changelog&lt;/a&gt; raccoglie pagine pubbliche di changelog piuttosto che
file di repository. Come trasformare quelle voci in qualcosa a cui la gente torna è trattato in
&lt;a href=&quot;https://changeloop.dev/blog/it/changelog-page/&quot;&gt;come costruire una pagina di changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Adottate comunque la specifica. Costa un pomeriggio, rende trattabile il secondo problema, ed è
ancora la migliore pagina mai scritta su questo argomento.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Keep a Changelog è uno standard?&lt;/strong&gt;
È una convenzione ad ampia adozione, non la specifica di un ente di standardizzazione. Gli
strumenti (script di rilascio, linter, parser) assumono la sua forma abbastanza spesso che
seguirla compra compatibilità.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cosa va nella sezione Unreleased?&lt;/strong&gt;
Ogni voce per un cambiamento che è stato mergiato ma non ancora rilasciato in una versione
numerata. Quando si taglia un rilascio, la sezione viene rinominata alla versione e data, e una
nuova sezione Unreleased vuota va sopra.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un changelog dovrebbe usare il versionamento semantico?&lt;/strong&gt;
Keep a Changelog lo raccomanda e non lo richiede. Le librerie e le API ne beneficiano; un servizio
distribuito continuamente di solito sostituisce con date, cosa che il formato accomoda.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le correzioni di sicurezza dovrebbero essere nel changelog prima di essere pubbliche?&lt;/strong&gt;
Aggiungete la voce quando la correzione viene rilasciata, con dettaglio sufficiente perché
un&amp;#39;operatrice possa agire e non di più. Ritardare la voce fino a una data di divulgazione
coordinata è normale; ometterla non lo è.&lt;/p&gt;
</content:encoded></item><item><title>Buone pratiche per le release notes che meritano</title><link>https://changeloop.dev/blog/it/release-notes-best-practices/</link><guid isPermaLink="true">https://changeloop.dev/blog/it/release-notes-best-practices/</guid><description>La maggior parte delle liste di buone pratiche sono consigli di stile. Queste cambiano cosa fa il lettore, e tre popolari che sono puro culto della forma.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Le buone pratiche per le release notes che contano sono quelle con una conseguenza attaccata:
scrivi la voce al momento del merge, nomina chi è interessato, dichiara l&amp;#39;azione richiesta anche
quando è nessuna, dai una data ai cambiamenti che rompono qualcosa, mantieni una voce permanente
per cambiamento, raggruppa per risultato, e mantieni la sezione noiosa. Ciascuna cambia cosa fa il
lettore. La maggior parte del resto dei consigli su questo tema cambia come appaiono le note.&lt;/p&gt;
&lt;p&gt;Cerca buone pratiche per le release notes e ottieni consigli di stile: sii chiaro, sii conciso, usa
un linguaggio semplice, aggiungi screenshot. Niente di tutto questo è sbagliato e niente cambia
qualcosa, perché nessun team si è mai seduto con l&amp;#39;intenzione di essere poco chiaro. Le pratiche
qui sotto sono accompagnate da quanto costa saltarle, perché una pratica senza una modalità di
fallimento allegata è solo una preferenza.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pratica&lt;/th&gt;
&lt;th&gt;Cosa costa saltarla&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Scrivere la voce al merge, non al rilascio&lt;/td&gt;
&lt;td&gt;Le voci ricostruite dopo dicono &amp;quot;vari miglioramenti&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nominare chi è interessato&lt;/td&gt;
&lt;td&gt;Ogni lettore decide che non lo riguarda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dichiarare l&amp;#39;azione richiesta, incluso &amp;quot;nessuna&amp;quot;&lt;/td&gt;
&lt;td&gt;Quaranta ticket di supporto identici, e lettori che presumono il peggio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datare i cambiamenti che rompono qualcosa, non versionarli&lt;/td&gt;
&lt;td&gt;La scadenza si scopre dopo che è passata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Una voce permanente e collegabile per cambiamento&lt;/td&gt;
&lt;td&gt;Nessuno può rispondere &amp;quot;quando è cambiato questo&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raggruppare per risultato, non per sistema&lt;/td&gt;
&lt;td&gt;I lettori hanno bisogno della vostra architettura per trovare la loro sezione&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mantenere la sezione noiosa&lt;/td&gt;
&lt;td&gt;Sicurezza, compliance e chi debugga una versione perdono la loro fonte&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Quali sono le buone pratiche per le release notes?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Scrivi la voce quando fai il merge, non quando rilasci.&lt;/strong&gt;
Costo di saltarlo: chi ricostruisce il rilascio dalla cronologia dei commit non è chi ha fatto il
cambiamento, e indovinerà l&amp;#39;intento. Le voci scritte due settimane dopo sono quelle che dicono
&amp;quot;vari miglioramenti&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Di&amp;#39; chi è interessato, per nome.&lt;/strong&gt;
&amp;quot;Team sul piano Business&amp;quot;, &amp;quot;chiunque usi l&amp;#39;API di export v1&amp;quot;, &amp;quot;installazioni self-hosted su
Postgres 14&amp;quot;. Costo di saltarlo: ogni lettore deve capire se lo riguarda, e la maggior parte
deciderà di no.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dichiara l&amp;#39;azione richiesta, incluso quando è nessuna.&lt;/strong&gt;
Costo di saltarlo: il supporto risponde alla stessa domanda quaranta volte, e i lettori che non
hanno chiesto presumono che sia richiesto qualcosa e lo rimandano.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dai una data ai cambiamenti che rompono qualcosa, non un numero di versione.&lt;/strong&gt;
&amp;quot;Rimosso in v5&amp;quot; non significa nulla per chi non sa quando arriva v5. &amp;quot;Smette di funzionare il 1°
novembre&amp;quot; è una data che può segnare in calendario. Costo di saltarlo: la scadenza si scopre dopo
che è passata. Cosa conta come tale, e la checklist per pubblicarlo, sono in
&lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;cos&amp;#39;è un cambiamento che rompe qualcosa&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mantieni una voce permanente e collegabile per cambiamento.&lt;/strong&gt;
Un&amp;#39;email non è un archivio e un messaggio Slack non è un riferimento. Costo di saltarlo: nessuno
può rispondere &amp;quot;quando è cambiato questo&amp;quot; sei mesi dopo, nemmeno voi. L&amp;#39;email ha comunque un
compito, trattato nel &lt;a href=&quot;https://changeloop.dev/blog/it/product-update-email/&quot;&gt;template email di aggiornamento prodotto&lt;/a&gt;;
rimanda alla voce invece di sostituirla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Raggruppa per risultato, non per sistema.&lt;/strong&gt;
Costo di saltarlo: il lettore deve tenere la vostra architettura in testa per capire quale sezione
gli interessa. L&amp;#39;ordine che segue da questo è in
&lt;a href=&quot;https://changeloop.dev/blog/it/how-to-write-release-notes/&quot;&gt;come scrivere release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mantieni la sezione noiosa.&lt;/strong&gt;
Aggiornamenti di dipendenze e cambiamenti interni restano, in fondo, una riga ciascuno. Costo di
saltarlo: il team di sicurezza, chi revisiona la compliance e chi debugga un disallineamento di
versione perdono la loro unica fonte. Le voci che sbagliano più spesso sono le correzioni; &lt;a href=&quot;https://changeloop.dev/blog/it/bug-fix-release-notes/&quot;&gt;release notes per le correzioni di bug&lt;/a&gt;
mostra come scriverle perché il lettore sappia se deve agire.&lt;/p&gt;
&lt;h2&gt;Quali sono le buone pratiche per il changelog, e come si differenziano?&lt;/h2&gt;
&lt;p&gt;Un changelog è un riferimento, quindi le sue pratiche riguardano completezza e struttura piuttosto
che persuasione. Le quattro che contano:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Un tipo di voce fisso per riga.&lt;/strong&gt; Added, Changed, Deprecated, Removed, Fixed, Security. Non è
uno stile di casa, è un filtro: è ciò che permette di chiedere &amp;quot;solo i cambiamenti che rompono
qualcosa&amp;quot;. La convenzione &lt;a href=&quot;https://changeloop.dev/blog/it/keep-a-changelog-implemented/&quot;&gt;Keep a Changelog&lt;/a&gt; è la fonte
abituale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una sezione non rilasciata.&lt;/strong&gt; Dove vivono le voci tra il merge e il rilascio. La sua assenza è
il motivo per cui i team scrivono voci in ritardo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date ISO.&lt;/strong&gt; &lt;code&gt;2026-08-28&lt;/code&gt;, non &lt;code&gt;28/08/26&lt;/code&gt;, che significa due giorni diversi a seconda del
lettore.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una voce per cambiamento, non per commit.&lt;/strong&gt; Tre commit che correggono un bug sono una voce.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I due artefatti sono confrontati a fondo in
&lt;a href=&quot;https://changeloop.dev/blog/it/changelog-vs-release-notes/&quot;&gt;changelog vs release notes&lt;/a&gt;; la versione breve è che le
pratiche del changelog proteggono la completezza e quelle delle release notes proteggono
l&amp;#39;attenzione.
&lt;a href=&quot;https://changeloop.dev/blog/it/private-release-notes-enterprise/&quot;&gt;Release notes private per clienti enterprise&lt;/a&gt; copre
una versione di questo che compare solo quando le vostre clienti non sono più tutte sulla stessa
build: gli stessi obiettivi di completezza e attenzione, ma calibrati per account invece che
trasmessi a tutte insieme.&lt;/p&gt;
&lt;h2&gt;Tre che sono puro culto della forma&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Emoji come tipi di voce.&lt;/strong&gt; Un razzo e una chiave inglese non sono una tassonomia. Sembrano
ordinati e non si possono filtrare, ordinare, o leggere da uno screen reader in modo utile. Usa
parole, e se vuoi l&amp;#39;emoji, mettila dopo la parola.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Numeri di versione semantica come titoli per un prodotto ospitato.&lt;/strong&gt; Semver è una promessa sulla
compatibilità API. Per un prodotto SaaS dove nessuno sceglie la propria versione, un numero di
versione nel titolo è archiviazione interna travestita da notizia. Tieni semver nel changelog e
fuori dall&amp;#39;annuncio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pubblicare secondo un calendario indipendentemente dal contenuto.&lt;/strong&gt; Note mensili senza nulla
dentro insegnano alla gente che le vostre note sono rumore. Pubblicate quando c&amp;#39;è qualcosa da dire.
Il changelog copre il resto.&lt;/p&gt;
&lt;h2&gt;Quella che è davvero difficile&lt;/h2&gt;
&lt;p&gt;Mantenere il changelog e l&amp;#39;annuncio sincronizzati, senza scrivere tutto due volte.&lt;/p&gt;
&lt;p&gt;La maggior parte dei team inizia con una sola pagina, la divide quando le audience divergono, e poi
lascia silenziosamente marcire una delle due, di solito il changelog, perché è quello senza una
scadenza attaccata. La via d&amp;#39;uscita è strutturale piuttosto che disciplinare: tieni le voci come
dati con un tipo, una data e un&amp;#39;audience, e tratta entrambe le superfici come rendering di quello.
La nostra rassegna &lt;a href=&quot;https://changeloop.dev/changelog-tools&quot;&gt;strumenti per il changelog&lt;/a&gt; copre cosa è disponibile per
questo, inclusi gli strumenti con cui competiamo, e la pagina
&lt;a href=&quot;https://changeloop.dev/beamer-alternative&quot;&gt;alternativa a Beamer&lt;/a&gt; è il confronto onesto contro il widget da cui parte la
maggior parte dei team.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;release notes template&lt;/a&gt; è dove vive il passaggio di selezione una
volta che le voci esistono.&lt;/p&gt;
&lt;h2&gt;Se adotti una sola cosa&lt;/h2&gt;
&lt;p&gt;Scrivi la voce al momento del merge, in un formato fisso, con un tipo. Ogni altra pratica in
questa pagina diventa più facile una volta che quella è in atto, e nessuna sopravvive senza di
essa.&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Le release notes dovrebbero avere screenshot?&lt;/strong&gt;
Solo di ciò che è cambiato, in uso. Uno screenshot di una pagina impostazioni che nessuno ha mai
visitato aggiunge scroll, non informazione. Un testo che nomina il risultato e il lettore
interessato batte un&amp;#39;immagine che non mostra nessuno dei due.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Come si scrivono release notes per un cambiamento che rompe qualcosa?&lt;/strong&gt;
Prima la data, secondo i chiamanti interessati, terza l&amp;#39;azione richiesta, quarta la migrazione.
Mai iniziare con il numero di versione. La forma completa, con una voce di esempio, è in
&lt;a href=&quot;https://changeloop.dev/blog/it/breaking-changes/&quot;&gt;cos&amp;#39;è un cambiamento che rompe qualcosa&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le release notes dovrebbero essere scritte da ingegneria o marketing?&lt;/strong&gt;
Redatte dall&amp;#39;ingegnere che ha fatto il cambiamento, al momento del merge, ed editate da qualcuno
che le legge come uno sconosciuto. Nessuno dei due da solo produce note su cui un cliente possa
agire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Qual è il formato ideale per le release notes?&lt;/strong&gt;
Prima gli elementi con scadenza, poi le nuove capacità, poi i miglioramenti, poi una lista di una
riga ciascuna col resto. La &lt;a href=&quot;https://changeloop.dev/release-notes-template&quot;&gt;release notes template&lt;/a&gt; è quel formato come
pagina da compilare.&lt;/p&gt;
</content:encoded></item></channel></rss>