Debito tecnico: se non puoi evitarlo, impara a gestirlo
Il debito tecnico (se non sai cos’è leggi questo articolo) andrebbe evitato come la peste. Un software scritto male, per prendere scorciatoie e rispettare i tempi di consegna, verrà a chiedere il conto con gli interessi alla prossima modifica. Ecco perché un bravo Project Manager dovrebbe innanzitutto conoscere bene questo concetto. Soprattutto, dovrebbe tenere conto dell’impatto che può avere il debito tecnico su un progetto e riservare del tempo per affrontarlo.
Morte, tasse e…debito tecnico
L’industria del software viaggia su ritmi di consegna serrati. L’approccio agile in primis mette al centro la velocità di rilascio, per ridurre il time-to-market, reagire ai cambiamenti, supportare rilasci di funzionalità ed effettuare validazioni frequenti. La rapida obsolescenza delle tecnologie complica ulteriormente le cose per chi deve garantire qualità, efficacia e redditività di prodotti digitali. Da qui si può comprendere la tentazione di pretendere scorciatoie sul codice. Tuttavia, agire con metodo è fondamentale per scrivere software di qualità in grado di adeguarsi rapidamente ai cambiamenti, per durare nel tempo.
Le logiche di business fanno sì che il debito tecnico sia inevitabile. Anche quando ci si sforza di limitarlo al minimo. Quello su cui è importante agire è quindi la consapevolezza e la gestione delle “sacche” di debito che si possono momentaneamente accumulate. Questo ci permetterà di
- Conteggiare le azioni legate al debito tecnico nei nostri progetti (per limitarlo, affrontarlo o, purtroppo, anche subirlo temporaneamente)
- Individuare rapidamente il debito prima che diventi un problema boccante
- Farsi guidare da standard di lavoro che prioritizzino la qualità del codice in una logica di business
Come affrontare il debito tecnico in chiave di project management
1. Investi sul lungo termine
Se lavori a un progetto a lungo termine, considera sempre di inserire nel piano una serie di attività di routine che ridurranno il debito tecnico. Di fatto, sviluppare software di qualità in grado di reggere alla prova del tempo e delle modifiche, ti permetterà risparmiare risorse lungo le varie fasi del progetto
2. Iterazioni dedicate a ridurre il debito
Se hai ereditato un codice “indebitato” potrebbe volerci più di qualche refactoring standard per renderlo funzionante e performante. Considera nei tempi di rilascio le iterazioni necessarie a ripristinare la situazione.
3. Concorda gli standard programmazione con il tuo team
Questo dovrebbe includere alcune buone pratiche fondamentali a cui attenersi per evitare il debito tecnico e lavorare sempre in condizioni stimolanti. Ad esempio, calcola sessioni di pair programming o mob programming per consentire agli sviluppatori di individuare più facilmente problemi nel codice e condividere competenze.
4. Individua il tuo debito tecnico e rendilo rintracciabile
Solo così potrai eliminarlo facilmente. Puoi utilizzare specifici editor che evidenziano le violazioni degli standard o strumenti che eseguono automaticamente l’analisi statica del codice e testano la code coverage. In tal modo potrai isolare facilmente bug e vulnerabilità.
5. Testa il codice
Ad ogni iterazione è consigliabile testare il codice. Il tempo dedicato alla code coverage ti permetterà di individuare bug e difetti, ma anche eccessive complessità. Considera sempre gli obiettivi di business: non serve perseguire la perfezione assoluta, se questo può diventare bloccante.
6. Calcola il costo del debito
Gli sviluppatori sono rallentati nelle attività da problemi legati al debito? Questo avrà un impatto economico, che può essere affrontato e ridotto dedicando risorse al refactoring del codice. Considera il costo di ogni refactoring rispetto a quello del debito, sia sul breve che sul lungo periodo. Queste informazioni saranno utili per preventivare le varie fasi del progetto.
7. Usa i servizi cloud gestiti o serverless
I cloud provider come AWS forniscono i servizi necessari per creare e mantenere in funzione il software. Il provisioning dell’infrastruttura, l’implementazione del codice, i test, il rilevamento delle minacce, il monitoraggio, gli avvisi e il disaster recovery possono essere completamente automatizzati sul cloud. Le infrastrutture sottoutilizzate possono essere chiuse automaticamente o si ampliano in risposta alla domanda. Ciò consente ai team di concentrare il tempo sul valore aziendale e sull’innovazione piuttosto allocare risorse per gestire attività di routine. E contribuisce enormemente ad evitare il debito tecnico.