Come valutare, gestire ed evitare debiti tecnici

9

Se il debito tecnico suona come qualcosa preso da un manuale di 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 abbandonati 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 un compito arbitrario. Pertanto, di solito ha senso avere una sorta di compromesso tra la consegna 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.

Cos’è il debito tecnico?

Nel definire il debito tecnico, dovremo fare riferimento all’uomo a cui si attribuisce in primo luogo di aver generato 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 e anche di essere puntuale per la tua lezione, 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 casino. Per lo sviluppo del software, quando salti i passaggi necessari e segui un percorso più semplice, con codici “non così puliti”, diventerà più difficile ripulire il codice in futuro. Ci sono più fasi incontrate nei domino del progetto software e più a lungo ignori un problema esistente, più tempo ci vorrà per risolverlo.

Tipi di debiti tecnici

I debiti tecnici sono di diverse tipologie, tra cui:

Debiti tecnici pianificati

Ciò si verifica in situazioni in cui le organizzazioni decidono deliberatamente di contrarre debiti tecnici. Questo, come discusso in precedenza, è solitamente quello di superare le scadenze stabilite e arrivare a un obiettivo specifico. Quando si impegnano in debiti tecnici pianificati, l’organizzazione deve essere chiara a cosa è disposta a rinunciare ea cosa non può. Devi tenere registri accurati, tenendo presente che alla fine dovrai tornare e correggere gli errori che hai saltato all’inizio.

Debiti tecnici non intenzionali

Questo tipo di debito tecnico è l’esatto opposto del primo. Si verifica quando un’organizzazione non prevede o pianifica il 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 siano 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, potrebbero incasinare le dinamiche, rendendo il vecchio codice obsoleto o non necessario.

Cause del debito tecnico

Alcuni dei motivi del debito tecnico sono stati discussi in precedenza, ma li selezionerò 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ò comportare problemi che potrebbero variare dall’avere bug nel codice o insorgere di spaghetti code.

Svista/errore

A volte, i programmatori scrivono solo codici errati, che alla fine portano a debiti tecnici. Indipendentemente dal fatto che il codice errato esista a causa dell’errore del programmatore o meno, 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 codificatore non riesce a rendersi conto o riconoscere quanto dannosi siano i debiti tecnici a lungo termine. Ciò potrebbe derivare da una legittima ignoranza degli effetti dannosi di prendere scorciatoie durante la programmazione, oppure potrebbe essere un intenzionale disprezzo delle conseguenze.

Intenzione

I debiti tecnici possono sorgere intenzionalmente dalle azioni deliberate del codificatore o dell’organizzazione.

Mancanza di modularità

Ciò si verifica principalmente perché un codice può servire diverse logiche di business contemporaneamente. Questo tipo di situazione rende la gestione del software molto più difficile. Con ogni codice scritto da uno sviluppatore, maggiori sono le possibilità che sperimentino 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 possibili futuri. A parte quanto sia dispendioso in termini di tempo il processo manuale, esiste la possibilità che i codici abbiano cambiato forma alla fine del processo manuale.

Un modo per eseguire 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 del debito tecnico dopo il rapporto di codice. Qui, la stima iniziale o il tempo complessivo necessario per sviluppare l’app verrebbero utilizzati 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 saranno abbinati gli elenchi dei debiti tecnici nonché i loro codici di riferimento. Dagli strumenti è possibile ottenere una stima accurata del tempo necessario per risolverlo.

Valutare il 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.

Risoluzione dei debiti tecnici

Cosa succede se si sono verificati debiti tecnici e non sai cosa fare? Ci sono alcuni passi che puoi fare per gestire i debiti tecnici.

In primo luogo, dovresti riconoscere che i debiti tecnici esistono e comunicarli al tuo team. Nella comunicazione, 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 eseguire il refactoring dell’applicazione. Il refactoring viene eseguito con l’obiettivo di ridurre la complessità nell’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 con questo è che potrebbe portare a nuovi debiti tecnici, ma potrebbe essere un compromesso migliore a lungo termine.

Evitare debiti tecnici in futuro

Ovviamente, è un gioco da ragazzi che evitare i debiti tecnici sia decisamente più intelligente che cercare di risolverli quando si presentano. A parte il fatto che ti fa risparmiare tempo e stress, fa anche in modo che le conseguenze residue che derivano dall’avere debiti tecnici fin dall’inizio siano assenti.

Si potrebbe sostenere che i debiti tecnici, di per sé, non sono un male. Sono generalmente problematici perché sono debiti che devono essere ripagati e gli umani non sono la specie più responsabile sulla terra. La scelta costante di un’opzione più debole generalmente indebolirà la forza del tuo software e renderà più difficile migliorare le funzionalità in seguito. In tutto, evitare i debiti tecnici è la soluzione migliore per chiunque.

Quindi, come evitare che sorgano debiti tecnici:

Crea un arretrato di progetto

L’idea qui è di tenere tutti al passo con il processo e portarli al passo con i requisiti per qualsiasi compito venga svolto. La creazione di un backlog consente a tutti di vedere le attività lasciate in sospeso e i percorsi da intraprendere per raggiungerle.

Dai la priorità alla qualità rispetto alla velocità

Se sei tu stesso un programmatore, devi imparare a dare la priorità alla realizzazione di un 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 ed evitare le scorciatoie.

Sensibilizzare

In generale, una conoscenza approfondita di cosa sia il debito tecnico e di come evitarlo può essere utile in primo luogo per prevenirne l’insorgenza. Quando fornisci ai tuoi sviluppatori le conoscenze necessarie, eviteranno meglio le trappole poste dai debiti tecnici.

Introdurre buone pratiche di programmazione

Alcune pratiche di codifica rendono più probabile che tu non cada in un debito tecnico. Pertanto, sarebbe bello evitare l’accoppiamento stretto, impiegare l’astrazione e il refactoring.

Introduci la tecnologia aggiornata

Gli 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 finché 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.

Fonte di registrazione: instantshift.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More