AL+ Scriveteci: paul@alplustech.com

Riparare o riscrivere il software? Come decidere

Una riscrittura è una conclusione a cui si arriva dopo aver capito il sistema, non un punto di partenza. Quasi sempre servono un responsabile, un piano e qualche mese di riparazione.

Disponibile anche in: English · Română · Español

Una riscrittura è una conclusione, non un punto di partenza. La maggior parte dei sistemi di cui si propone la riscrittura non ne ha bisogno. Hanno bisogno di un responsabile, di un piano di riparazione e di qualche mese di lavoro paziente. Pochi invece vanno davvero riscritti, e l’unico modo per capire la differenza è comprendere prima il sistema.

Perché si propone una riscrittura

Le riscritture raramente si propongono perché il sistema è tecnicamente irrecuperabile. Si propongono perché nessuno nel team attuale capisce il sistema, e ricostruirlo sembra l’unico modo per riavere quella comprensione.

È una motivazione onesta. È anche il modo più costoso di raggiungere l’obiettivo. Una riscrittura ricrea la conoscenza ricreando il software, e tutto ciò che il vecchio sistema ha imparato in anni di produzione, ogni caso limite e ogni correzione, va imparato da capo.

Il secondo motivo più comune è la frustrazione. Modifiche lente, incidenti ricorrenti e uno stack poco conosciuto rendono allettante ripartire da zero. La frustrazione è reale. Il rimedio, di solito, è una responsabilità chiara, non la sostituzione.

Cosa guardiamo prima di decidere

Non rispondiamo alla domanda «riparare o riscrivere?» nel primo incontro. Rispondiamo dopo una revisione che copre cinque aspetti.

Cosa fa il sistema. Non ciò che dice la documentazione o che ricorda il fondatore. Ciò che fa in produzione, per quali utenti e con che frequenza. Molte riscritture vengono dimensionate su un uso immaginato.

Dove sta il rischio. Quali parti si rompono, quali non le tocca nessuno e quali contengono dati che non si possono perdere. Di solito il rischio è concentrato in una piccola parte del codice.

Se si può modificare in sicurezza. C’è un modo per rilasciare una modifica e sapere che ha funzionato? Ci sono test, ambienti di staging, backup e rollback? Se non ci sono, vengono prima di tutto, qualunque sia la decisione finale, perché una riscrittura senza di essi è solo una versione più grande dello stesso problema.

Quanto costa mantenere lo stack. Framework e runtime arrivano a fine vita. Le spese di hosting crescono. Per alcuni stack è difficile trovare sviluppatori. Sono costi reali, ma misurabili, e spesso più piccoli di una riscrittura.

Di cosa avrà bisogno l’azienda in futuro. Un sistema che richiede tre piccole funzionalità all’anno ha esigenze diverse da uno che deve raddoppiare le proprie capacità. La decisione sulla riscrittura dipende dalla destinazione, non solo dallo stato attuale.

Quando la risposta è riparare

La riparazione è la risposta giusta più spesso di quanto i team si aspettino. I segnali:

  • Il modello dei dati di base è solido, anche se il codice che lo circonda è disordinato.
  • I problemi sono concentrati. Due o tre moduli causano la maggior parte degli incidenti.
  • Il sistema è in produzione con utenti reali e il comportamento da cui dipendono è per lo più non documentato.
  • Lo stack è vecchio ma ancora supportato, oppure si può aggiornare per gradi.

Riparare significa stabilire la responsabilità, aggiungere le protezioni (test attorno alle parti rischiose, monitoraggio, deploy affidabili) e poi migliorare il sistema sul posto, una modifica circoscritta alla volta. Gli utenti vedono prima la stabilità e poi i miglioramenti. Nulla viene buttato finché il suo sostituto non è dimostrato.

Quando la risposta è riscrivere

Alcuni sistemi devono davvero essere sostituiti. I segnali sono specifici:

  • La piattaforma non è più supportata e non si può aggiornare. Un framework senza correzioni di sicurezza è una scadenza.
  • Il modello dei dati non è adatto a ciò che l’azienda fa oggi, e ogni funzionalità deve lottare contro di esso.
  • Il sistema è stato costruito per una scala o un caso d’uso che non esistono più, e gran parte di esso è zavorra.
  • Il costo di capirlo supera il costo di specificarlo, cosa che accade con codice generato o copiato in massa, privo di un progetto coerente.

Anche in quel caso, dove è possibile riscriviamo per parti. Un nuovo sistema che rileva una responsabilità alla volta dal vecchio mantiene l’azienda in funzione e lascia la decisione reversibile.

Una matrice decisionale

I cinque aspetti della revisione si riducono a una piccola tabella. Assegnate un punteggio a ogni riga per il sistema che avete davanti; la colonna con più segni indica la raccomandazione, e un solo «sostituire» nella riga della piattaforma prevale sul resto.

Domanda Indica la riparazione Indica la modernizzazione sul posto Indica la riscrittura o la sostituzione
La piattaforma è supportata? Sì, versioni attuali Sì, ma con diversi passaggi di aggiornamento arretrati No, e non si può aggiornare
Il modello dei dati è adatto all’azienda? Sì In gran parte; alcune strutture ostacolano le nuove funzionalità No; ogni funzionalità lo aggira
Esiste un modo sicuro per modificarlo? Sì In parte; per alcune parti ci sono test e rollback No, e aggiungerli costa più di quanto valgano le parti
Dov’è il rischio? Concentrato in due o tre moduli Distribuito su uno strato che si può sostituire da solo Ovunque; non c’è un progetto coerente da preservare
Quanto se ne usa ancora? La maggior parte La maggior parte, con aree inutilizzate da eliminare Una minoranza; il resto serve casi che non esistono più
Di cosa ha bisogno l’azienda dopo? Piccole funzionalità e stabilità Nuove capacità significative sulla stessa base Un prodotto diverso

Riparare è manutenzione con un piano. Modernizzare sul posto è il nostro servizio di riparazione e modernizzazione. Una riscrittura si fa comunque per parti dove possiamo, con il vecchio sistema in funzione finché ogni parte non si è dimostrata valida.

La nostra posizione

Capire il sistema, renderlo sicuro da modificare, poi decidere. I team che saltano direttamente alla riscrittura saltano la parte in cui si impara che cosa si sta sostituendo, e quella conoscenza è la cosa più costosa da ricostruire.