Come valutare, gestire ed evitare i debiti tecnici
Pubblicato: 2020-05-26Se il debito tecnico suona come qualcosa preso da un manuale sulla finanza, è perché il termine è legato alla finanza. Tuttavia, nel vero senso della parola, il debito tecnico è legato alla programmazione. È l'idea che durante lo sviluppo di un progetto software, alcuni passaggi necessari vengano saltati o semplicemente eliminati del tutto nel tentativo di rispettare una scadenza.
Nel tentativo di sviluppare l'app o il software perfetto, gli sviluppatori sono spesso a corto di tempo, proprio come qualsiasi persona a caso che svolge comunque qualsiasi attività arbitraria. Pertanto, di solito ha senso avere una sorta di compromesso tra la fornitura di un prodotto perfetto con un codice perfetto e la massimizzazione del tempo.
La domanda allora è: c'è un limite a questi compromessi? Ci sono danni intrinseci che potrebbero derivare da questo compromesso? Infine, lo sviluppatore sta davvero meglio a lungo termine? In questo pezzo sui debiti tecnici, cercherò di rispondere a tutte queste domande.
Che cos'è il debito tecnico?
Nella definizione del debito tecnico, dovremo fare riferimento all'uomo a cui è stato attribuito in primis il termine: Ward Cunningham. Secondo Cunningham, il debito tecnico si riferisce al lavoro di sviluppo extra che deve essere svolto nella programmazione di un codice per compensare il deficit derivante dalla sua programmazione in un breve periodo.
Per renderlo più grafico, immagina di avere il compito di ripulire una stanza disordinata e di essere in ritardo per una lezione. Nel tentativo di assicurarti di eseguire le istruzioni ed essere anche puntuale per la tua classe, fai una rapida pulizia, spazzando la maggior parte dei detriti sotto il divano. La ricaduta di questo è che alla fine dovrai prenderti il tempo per sistemare il pasticcio. Per lo sviluppo del software, quando si saltano i passaggi necessari e si segue un percorso più semplice, con codici "non così puliti", sarà più difficile ripulire il codice in futuro. Ci sono più fasi incontrate nei domino del progetto software e più a lungo si ignora un problema esistente, più tempo ci vorrà per risolverlo.
Tipi di debiti tecnici
I debiti tecnici sono di diverse tipologie, tra cui:
Debiti tecnici programmati
Ciò si verifica in situazioni in cui le organizzazioni decidono deliberatamente di contrarre debiti tecnici. Questo, come discusso in precedenza, è di solito per superare le scadenze dichiarate e raggiungere un obiettivo specifico. Quando si impegna in debiti tecnici pianificati, l'organizzazione deve essere chiara a cosa è disposta a rinunciare e cosa non può. Devi tenere registri accurati, tenendo presente che alla fine dovrai restituire e correggere gli errori che hai saltato all'inizio.
Debiti tecnici non intenzionali
Questo tipo di debito tecnico è l'esatto opposto del primo. Sorge quando un'organizzazione non prevede o pianifica un debito tecnico. La ragione di ciò è in genere un'interruzione della comunicazione tra le varie unità dell'organizzazione o pratiche di lavoro scadenti tra le unità.
Debiti tecnici inevitabili
Questo è il tipo di debito tecnico che nessuna azione da parte dell'organizzazione avrebbe potuto evitare. Ad esempio, con i rapidi cambiamenti sperimentati nella tecnologia, ha senso che alcuni codici scritti in passato non saranno all'altezza degli attuali standard previsti.
Inoltre, questo tipo di debito tecnico può sorgere quando vengono richieste modifiche quando il codice è già in fase di scrittura. Se a metà della progettazione del software vengono introdotte alcune modifiche, ciò potrebbe alterare la dinamica, rendendo il vecchio codice obsoleto o non necessario.
Cause del debito tecnico
Alcuni dei motivi del debito tecnico sono stati discussi sopra, ma li sceglierò uno dopo l'altro per renderli più chiari.
Fretta
La causa più frequente di indebitamento tecnico è la fretta. Gli sviluppatori hanno spesso scadenze rigorose, alcune delle quali includono scadenze per il lancio di determinati software. Spesso è comprensibile (e prevedibile) in questo tipo di situazioni che lo sviluppatore possa incorrere in debiti tecnici lungo il percorso. Questo tipo di debito tecnico è spesso intenzionale e può causare problemi che potrebbero variare dalla presenza di bug nel codice o dall'insorgere di codici spaghetti.
Svista/errore
A volte, i programmatori scrivono semplicemente codici errati, che alla fine portano a debiti tecnici. Indipendentemente dal fatto che il codice errato esista o meno a causa dell'errore del programmatore, il fatto è che gli errori si traducono in debiti tecnici e, poiché non sono scalabili, alla fine dovranno essere corretti.
Mancanza di consapevolezza degli effetti
A volte i debiti tecnici sorgono perché il programmatore non si rende conto o non riconosce quanto siano dannosi i debiti tecnici a lungo termine. Ciò potrebbe derivare da una legittima ignoranza degli effetti dannosi dell'adozione di scorciatoie durante la programmazione, oppure potrebbe essere un intenzionale disprezzo delle conseguenze.
Intenzione
I debiti tecnici possono sorgere intenzionalmente dalle azioni deliberate del programmatore o dell'organizzazione.
Mancanza di modularità
Ciò deriva principalmente dal fatto che un codice può servire contemporaneamente diverse logiche di business. Questo tipo di situazione rende molto più difficile la gestione del software. Con ogni codice scritto da uno sviluppatore, maggiori sono le possibilità che incontrino sfide con la modularità.
Valutazione del debito tecnico
I debiti tecnici non dovrebbero mai essere calcolati manualmente perché sarebbe piuttosto arduo. Significherebbe dover inserire manualmente il codice per determinare i problemi attuali e quelli futuri. A parte la perdita di tempo del processo manuale, c'è la possibilità che i codici abbiano cambiato forma al termine del processo manuale.
Un modo per effettuare la valutazione è eseguire un'analisi statica utilizzando alcuni strumenti che la supportano. Alcuni degli strumenti che possono essere utilizzati includono Coverity, SonarQube, Check Style e Closure Compiler.
In generale, ci sono due modi per calcolare i debiti tecnici. Nel primo approccio potrebbe essere ottenuto calcolando il rapporto di indebitamento tecnico secondo code ratio. Qui, la stima iniziale o il tempo complessivo necessario per sviluppare l'app verrebbe utilizzato per determinare il tempo necessario per riparare il debito tecnico.
Nel secondo approccio, potresti utilizzare direttamente le stime fornite dai vari strumenti come SonarQube. A questo verranno abbinati gli elenchi dei debiti tecnici nonché i relativi codici di riferimento. Dagli strumenti, è possibile ottenere una stima accurata del tempo necessario per risolverlo.
La valutazione del debito tecnico ti darà un'idea di quanti giorni ci vorranno per riparare il debito tecnico. Più debiti ci sono, più tempo ci vorrà per risolverlo.
Risolvere i debiti tecnici
Cosa succede se si sono verificati debiti tecnici e non sai cosa fare? Ci sono alcuni passaggi che puoi intraprendere per gestire i debiti tecnici.
In primo luogo, dovresti riconoscere che i debiti tecnici esistono e comunicarlo al tuo team. Nel comunicare, dovresti essere chiaro su cosa è successo e cosa è necessario fare per correggerlo. Dovresti assicurarti di comunicare chiaramente la necessità di occuparti del debito tecnico il prima possibile.
Dopo aver informato il tuo team dei debiti tecnici, ci sono tre approcci che potresti adottare. Nel primo approccio, potresti decidere di continuare con il sistema così com'è. In questo scenario, l'applicazione verrà utilizzata così com'è.
In alternativa, potresti decidere di refactoring dell'applicazione. Il refactoring viene eseguito con l'obiettivo di ridurre la complessità dell'app e di ripulire la struttura dell'app. Con il refactoring, il comportamento del software non verrà modificato; l'unica parte interessata sarà la struttura interna.
Infine, se le due opzioni discusse sopra non funzionano, dovrai sostituire completamente il codice. Un problema è che potrebbe portare a nuovi debiti tecnici, ma a lungo termine potrebbe essere un compromesso migliore.
Evitare i debiti tecnici in futuro
Naturalmente, è un gioco da ragazzi che evitare i debiti tecnici sia decisamente più intelligente che cercare di risolverli quando si presentano. Oltre al fatto che ti fa risparmiare tempo e stress, fa anche sì che le conseguenze residue che derivano dall'avere debiti tecnici fin dall'inizio siano assenti.
Si potrebbe sostenere che i debiti tecnici, in sé e per sé, non sono negativi. Sono generalmente problematici perché sono debiti che devono essere ripagati e gli esseri umani non sono la specie più responsabile sulla terra. La scelta coerente di un'opzione più debole generalmente indebolirà la forza del tuo software e renderà più difficile il miglioramento delle funzionalità in un secondo momento. In tutto, evitare i debiti tecnici è la soluzione migliore per chiunque.
Quindi, come prevenire l'insorgere di debiti tecnici:
L'idea qui è di tenere tutti al passo con il processo e portarli al passo con i requisiti per qualsiasi attività svolta. La creazione di un backlog consente a tutti di vedere i compiti lasciati in sospeso e i percorsi da intraprendere per raggiungerli.
Se sei un programmatore, devi imparare a dare la priorità al lavoro di qualità rispetto a molto lavoro. Assicurati che i tuoi codici siano puliti e che le tue app o altri software siano sviluppati alla perfezione. Comprendi che la tentazione di prendere scorciatoie non varrà la pena perché alla fine dovrai comunque svolgere i compiti che hai abbandonato.
Se sei a capo di un team, devi comunicare questi stessi valori ai membri del team. Ai membri dovrebbe essere insegnato a creare soluzioni orientate ai risultati e ad evitare le scorciatoie.
In generale, una conoscenza approfondita di cosa sia il debito tecnico e di come evitarlo può essere utile in primo luogo per prevenirne l'insorgere. Quando fornisci ai tuoi sviluppatori le conoscenze necessarie, eviteranno meglio le trappole poste dai debiti tecnici.
Alcune pratiche di codifica rendono più probabile che tu cada in debiti tecnici. Pertanto, sarebbe fantastico evitare un accoppiamento stretto, impiegare l'astrazione e il refactoring.
Aggiornamenti regolari della tecnologia possono essere un ottimo mezzo per prevenire i debiti tecnici. Durante l'aggiornamento, è necessario assicurarsi che ciò che viene utilizzato sia il framework, i database e il software applicativo più recenti.
Conclusione
I debiti tecnici, nella stragrande maggioranza dei casi, sono inevitabili fintanto che si continua a sviluppare programmi e scrivere codici. Tuttavia, le possibilità che si verifichino possono essere notevolmente ridotte quando vengono seguiti i passaggi sopra elencati. Inoltre, nell'eventualità di debiti tecnici, ogni speranza non è persa. Mantieni la calma, sii fiducioso, agisci di conseguenza.