Skip to main content

“Sanare il debito tecnico” può sembrare una frase annunciata a reti unificate dal nuovo Presidente del Consiglio, invece è una realtà ben più “pratica” che colpisce lo sviluppo software.

Definizione

Il termine “debito tecnico” è stato coniato dal programmatore Statunitense Ward Cunningham. E’ una definizione usata per descrivere la condizione in cui un software diventa troppo complesso da poter aggiornare ed evolvere. Con il tempo vengono accumulate delle mancanze che, per cause solitamente di carattere progettuale, per essere colmate necessitano di tempi molto lunghi. In molti casi dagli uffici dei team di sviluppo vengono fuori esclamazioni del tipo: “facciamo prima a rifare tutto da zero”.

Le cause

Una delle cause principali dell’accumulo di debito tecnico è: la fretta. 

La necessità di rilasciare un software in maniera rapida è una delle cause che principalmente influiscono nell’accantonamento di pattern architetturali più efficaci che permetterebbero di riprendere in mano il progetto in fasi successive per integrazioni, aggiornamenti e modifiche.

La fase progettuale in questo caso è un fulcro importante, in quanto permette di avere una visione d’insieme molto più chiara che consente di seguire delle linee guida ben precise per tutte le fasi di avanzamento. Progettare in fretta omettendo passaggi o non avendo ben chiaro lo scopo dell’applicazione ci fa accumulare debito tecnico.

Addirittura avviare un lavoro prima ancora di aver completato la progettazione può rivelarsi dannoso.

Come funziona in pratica

Immaginiamo di essere una giovane coppia e di volere a tutti i costi costruire casa in poche settimane.

Pensiamo che un bilocale, pur di avere l’indipendenza dai genitori il prima possibile, potrebbe andare più che bene. Meglio presto, che bene!

“La nostra casa è pronta, dopo un breve trasloco iniziamo ad utilizzarla e viverla quotidianamente.”

Dopo qualche periodo di convivenza arriva un bebè. E ora che si fa? Sfondiamo una parete, costruiamo un soppalco, buttiamo giù il tetto?

“No! Facciamo prima a buttarla giù e ricostruirla con una stanza in più!”

Ecco, questo è uno scenario verosimile che accade in alcune aziende digitali: la scarsa analisi dei requisiti e la poca lungimiranza progettuale, spingono gli sviluppatori a rilasciare un software in fretta, dando poca importanza a modifiche e integrazioni future, che prima o poi si presenteranno.

Di conseguenza ogni modifica o integrazione (il caso di una cameretta in più per il bebè) potrebbe costare molto tempo o denaro, che solitamente il cliente non è in grado di mettere a disposizione.

E a questo punto che si fa? La soluzione è quasi sempre quella di ricominciare da zero con un MVP, con tutti gli oneri che ne derivano.

Come si può attenuare

Per ridurre al minimo l’insorgere di debito tecnico in un progetto c’è bisogno di fare un’analisi approfondita di tutte le ramificazioni del lavoro che stiamo per intraprendere. La fase di pianificazione è molto importante per definire il perimetro di azione ed eventuali criticità future. Questo permette anche di decidere la miglior tecnologia da utilizzare.

Oltre ad una buona pianificazione, bisogna mettere in atto degli strumenti di sviluppo che permettono di tenere alto il livello di qualità del codice, con test automatizzati, pipeline di deployment, controlli costanti e refactoring agevolato, per poter velocemente implementare nuove funzionalità o correggere bug.

Ci sono un sacco di variabili da tenere a mente, ma in generale possiamo dire che “chi ben comincia è a metà dell’opera”.

Conclusioni

Lo sviluppo software è una disciplina che coniuga razionalità e creatività. Un’attività molto complessa, vessata da leggi di mercato stringenti, tempistiche e costi sempre molto ridotti. Le aziende che dedicano il giusto tempo alle attività di analisi, progettazione e sviluppo, mettendo in atto sin da subito soluzioni lungimiranti in linea con le richieste del cliente, hanno un potenziale più elevato.

Questo potenziale si esprime con prodotti di qualità, che permettono velocemente di essere aggiornati, estesi, modificati e adattati alle esigenze di un mercato che cambia sempre più velocemente, senza subire il peso di un eccessivo debito tecnico che ha conseguenze ben più pesanti del semplice aspetto tecnico.

Fabio De Notariis

Autore Fabio De Notariis

Full Stack Web Developer