Intelligenza artificiale e debito tecnico: rischi e soluzioni

Il debito tecnico è un concetto metaforico introdotto da Ward Cunningham nel 1992. Si riferisce ai compromessi consapevoli o alle “scorciatoie” adottate durante la progettazione, l’implementazione o la manutenzione dei sistemi software per raggiungere obiettivi immediati, spesso a scapito della qualità complessiva del sistema.

Le implicazioni del debito tecnico sono significative e possono avere effetti estesi sia sui sistemi software tradizionali, sia su quelli più moderni abilitati dall’intelligenza artificiale.

Ignorare il debito tecnico ha conseguenze dirette e misurabili sul business:

  • Aumento dei costi: il debito tecnico agisce come un debito finanziario che, se non viene “ripagato”, aumenta i costi di manutenzione e ostacola l’evoluzione futura del software. Le aziende possono arrivare a pagare un ulteriore 10-20% sui costi di ogni progetto per affrontare il debito tecnico accumulato.
  • Freno all’innovazione: un alto livello di debito frena l’innovazione e ogni iniziativa di trasformazione aziendale. Le aziende con il debito tecnico più grave hanno il 40% di probabilità in più di vedere i loro progetti di modernizzazione IT fallire o essere cancellati.
  • Assorbimento del Budget IT: il debito tecnico può arrivare a rappresentare circa il 40% del bilancio IT di un’azienda. Secondo McKinsey, circa il 30% dei CIO intervistati ritiene che oltre il 20% del budget tecnico destinato a nuovi prodotti venga deviato per risolvere problemi legati al debito pregresso (Fonte, link esterno).
  • Complessità crescente: il debito deriva da soluzioni temporanee che diventano permanenti, mancati aggiornamenti o implementazioni ad hoc che privilegiano la velocità a breve termine. Questo accumula una complessità che rende ogni progetto futuro più difficile.

Le principali tipologie di debito tecnico

Il debito tecnico può manifestarsi in varie forme e a diversi livelli di granularità durante il ciclo di vita del software. Le tipologie più riconosciute includono:

  • Code Debt: codice scritto male, duplicato, complesso o che non rispetta gli standard. Viene spesso identificato tramite analisi statica e “code smells”. Per evitarlo, assicurati di scrivere seguire una checklist, ad esempio quella che trovi a questa pagina.
  • Architectural Debt: deriva da scelte di design scadenti o da una mancanza di modularità che rende difficile l’aggiunta di nuove funzionalità. Può essere identificato tramite l’analisi delle dipendenze complesse tra componenti, con strumenti specializzati come ARCAN e iPlasma.
  • Design Debt: riguarda scorciatoie tecniche nel design dettagliato, che possono manifestarsi come “design smells”.
  • Test Debt: costi derivanti da test insufficienti, incompleti o dalla mancanza di test unitari, di integrazione o di accettazione, che portano a software difettosi. L’identificazione avviene analizzando le pratiche e la copertura dei test.
  • Documentation Debt: il costo generato dalla mancanza o incompletezza della documentazione e dei commenti nel codice. L’NLP può aiutare a identificarlo.

> Leggi anche: “Test Automation: strumenti open source e vantaggi”

Una categoria trasversale è il Self-Admitted Technical Debt (SATD), che si verifica quando gli sviluppatori introducono deliberatamente codice di bassa qualità per rispettare scadenze, spesso annotandolo nei commenti. Il SATD può manifestarsi come debito di design, difetto, documentazione, requisiti e test.

Debito tecnico che impedisce l'innovazione

L’era dell’AI e il debito tecnico

L’ascesa dei sistemi abilitati all’AI e in particolare dell’AI generativa e degli LLM, è destinata ad aumentare ulteriormente il debito tecnico. I sistemi di Machine Learning sono particolarmente inclini a contrarre questo debito, poiché presentano tutti i problemi di manutenzione del codice tradizionale, più un insieme di problematiche specifiche del ML.

Questo AI Technical Debt si riferisce alle passività potenziali legate allo sviluppo di tali sistemi. I professionisti lo percepiscono come grave e dannoso, sebbene la sua prevalenza sia spesso sottovalutata.

> Scopri la formazione specializzata in Intelligenza Artificiale e Machine Learning 

Le Nuove Forme di Debito Tecnico nell’AI

L’AITD si manifesta in forme specifiche che richiedono attenzione:

  • Pipeline Jungle: una pipeline AI diventa eccessivamente complessa e difficile da mantenere a causa di troppi componenti interconnessi. La continua aggiunta di moduli è un aspetto critico da gestire per evitare un’esplosione di complessità. Può essere identificata analizzando le configurazioni della pipeline e la complessità dei flussi di dati.
  • Undeclared Consumers: utenti che accedono liberamente a un modello, rendendo difficile l’analisi degli accessi e aumentando i rischi. La loro identificazione è eccezionalmente difficile.
  • Jumbled Model Architecture: un’architettura confusa che rende il codice difficile da mantenere e il sistema difficile da comprendere.
  • Correction Cascades: creazione di modelli di correzione che introducono nuove dipendenze nel sistema e aumentano i costi futuri di analisi e miglioramento.
  • Glue Code: grandi quantità di codice di supporto scritto per far comunicare pacchetti generici di ML con i dati specifici del sistema.
  • Scattered Use of ML Libraries: uso disperso di API di ML in più file, che richiede modifiche in diversi punti quando l’API deve essere aggiornata, aumentando complessità e dipendenze.
  • Deep God File: un singolo file che contiene più componenti di un sistema AI (es. training, validazione, testing), violando i principi di separazione delle responsabilità.
  • Unwanted Debugging Code: frammenti di codice di debug non più utilizzati ma ancora presenti nel codice sorgente. È generalmente considerato un problema di bassa gravità.
  • Multiple Language Smell: l’uso di più linguaggi nell’architettura, che rende difficile la gestione e l’aggiornamento del sistema.
  • Algorithm Debt: debito derivante dalla scelta, implementazione o manutenzione di algoritmi troppo semplici, complessi, mal ottimizzati o inefficienti.
  • Data Debt: carenze nella raccolta, gestione e applicazione dei dati, come scarsa qualità dei dati o dipendenze non regolate.
  • Model Debt: accumulo di pratiche subottimali nel ciclo di vita dei modelli, come selezione inadeguata delle feature o tuning improprio degli iperparametri.
  • Ethics Debt: carenze relative a equità algoritmica, bias di previsione e mancanza di trasparenza e responsabilità.
  • Accessibility Debt: barriere che gli utenti potrebbero incontrare a causa della mancanza di usabilità immediata delle tecnologie, potendo dissuadere la partecipazione.

Impatto e Manifestazioni dell’AI Technical Debt

L’AITD ha un impatto pervasivo sulla qualità e la gestione dei sistemi AI.

Impatti sulla Qualità del Sistema

  • Comprensibilità: problemi come il “Deep God File” e la “Jumbled Model Architecture” rendono il sistema difficile da capire.
  • Manutenibilità: fortemente influenzata da sette tipi di AITD, tra cui la “Jumbled Model Architecture”, che rendono le modifiche e la manutenzione significativamente più complesse.
  • Sicurezza: particolarmente colpita dagli “Undeclared Consumers” che, accedendo liberamente al modello, possono portare a violazioni della sicurezza e a un uso improprio di informazioni sensibili. Puoi
  • Prestazioni: l’aggiunta incontrollata di passaggi può ridurre le performance. Anche il “Glue Code” e l’uso disperso di librerie ML influiscono negativamente.
  • Propensione ai difetti: quasi tutti i problemi di AITD aumentano la probabilità di difetti. In particolare, “Undeclared Consumers” e “Pipeline Jungle” possono aumentare la complessità architetturale.
  • Complessità e dimensioni: la presenza di “Glue Code” e “Pipeline Jungle” implica un aumento delle dimensioni del sistema, rendendo le classi difficili da mantenere e comprendere.

> Leggi anche: “Intelligenza Artificiale e Cyber Security: tre campi di applicazione”

Impatti sui Fattori Socio-Tecnici

  • Comunicazione del Team: problemi come “Jumbled Model Architecture”, “Multiple Language Smell” e “Pipeline Jungle” possono limitare la comunicazione tra i membri del team, portando a conflitti e soluzioni non ottimali.
  • Familiarità e Competenza: la presenza di più linguaggi (“Multiple Language Smell”) riduce la familiarità degli sviluppatori con il sistema, complicando gli aggiornamenti.

L’introduzione di nuovi membri in progetti AI complessi può creare divari di competenze, portando a codice confuso (“spaghetti code”) e offuscando le responsabilità.

Le Sfide Attuali nella Gestione del debito tecnico dell’AI

Nonostante la sua crescente importanza, l’identificazione e la gestione del debito tecnico, in particolare nell’ambito dell’AI, presentano sfide significative che delineano le necessità future del settore.

  • Bassa consapevolezza e difficoltà di rilevamento: i professionisti sono spesso poco consapevoli della prevalenza dei problemi di debito tecnico nei sistemi AI, sebbene li considerino gravi. La complessità e il comportamento non lineare dei sistemi AI rendono il rilevamento del debito particolarmente difficile.
  • Mancanza di strumenti e dipendenza dal lavoro manuale: la pratica attuale per l’identificazione e la mitigazione del debito si affida in gran parte a ispezioni manuali e refactoring ad-hoc. Esiste, infatti, una scarsa disponibilità di strumenti automatici specifici.
  • Bassa precisione degli strumenti esistenti: gli strumenti automatici sviluppati per l’identificazione del debito tecnico auto-dichiarato (come eXcomment e DebtHunter) hanno mostrato bassi livelli di precisione e richiamo.
  • Necessità di ricerca e sviluppo: sono necessari ulteriori sforzi di ricerca e sviluppo per poter stabilire tecniche standardizzate e strumenti automatizzati specificamente progettati per affrontare il debito tecnico nell’AI, riducendo così la dipendenza dalle ispezioni manuali.
  • Focus incompleto delle soluzioni AI: la maggior parte delle soluzioni basate su tecniche intelligenti per la gestione del debito tecnico si concentra sulle fasi iniziali del processo, come identificazione, misurazione e monitoraggio. Minore attenzione è rivolta alla prevenzione o al “ripagamento” del debito.

Nonostante i rischi, l’AI stessa offre la via per una gestione più evoluta del debito. In particolare, gli LLM hanno il potenziale per ridurlo se utilizzati correttamente, ad esempio per la scoperta e il riutilizzo del codice o per consolidare il codice duplicato in un’interfaccia più snella. Queste pratiche richiedono tuttavia l’implementazione di “guardrails” e una formazione adeguata per gli sviluppatori.

Intelligenza Artificiale Spiegabile (XAI) per l’Identificazione del Debito Tecnico

Un’area emergente nel campo dell’ingegneria del software è l’utilizzo dell’Intelligenza Artificiale Spiegabile (XAI) per supportare l’identificazione e la gestione del debito tecnico.

L’XAI consente di interpretare i fattori (ad esempio, metriche software) che segnalano il rischio di debito tecnico elevato (HIGH TD) all’interno dei moduli software. Permette inoltre di definire soglie per le metriche che indicano scarsa manutenibilità e di individuare criticità specifiche su cui intervenire per migliorare la qualità del codice.

Tra i metodi più utilizzati, la tecnica SHAP (SHapley Additive exPlanation) fornisce classifiche affidabili sull’importanza delle caratteristiche, offrendo così spiegazioni trasparenti e dettagliate sui modelli predittivi. A supporto di questa metodologia è stato sviluppato DEBTclock, un tool dedicato all’applicazione pratica delle tecniche XAI nella gestione del debito tecnico.

Il debito tecnico, amplificato dalla complessità dei sistemi AI, non è più un problema relegato alle sole funzioni tecniche, ma una variabile che incide sulla capacità di un’azienda di innovare e competere. Il debito tecnico dell’AI richiede un approccio proattivo e multidisciplinare.

Ignorare questo debito significa costruire su fondamenta fragili. Gestirlo strategicamente, sfruttando le stesse tecnologie AI per l’analisi (NLP), il monitoraggio (MLOps) e la spiegazione (XAI), trasforma un rischio operativo in un’opportunità strategica. Permette di creare sistemi più robusti, sicuri e manutenibili, liberando risorse per concentrarsi sul vero obiettivo: la creazione di valore attraverso l’innovazione.

Fonti: 

Baig, A., Blumberg, S., Gundurao, A., & Kayyali, B. (2023, April 25). Tame tech debt to modernize your business | McKinsey. Www.mckinsey.com. https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/breaking-technical-debts-vicious-cycle-to-modernize-your-business

Doerrfeld, B. (2025) Will the Rise of Generative AI Increase Technical Debt? – DevOps.com. DevOps.com. https://devops.com/will-the-rise-of-generative-ai-increase-technical-debt/#google_vignette

Gomes, T. B. S., de Moura Loiola, D. A., & Santos, A. R. (2024). Technical debt tools: a survey and an empirical evaluation. Journal of Software Engineering Research and Development12(1), 8-1.

Licata, P. (2025). Come gestire (e ridurre) il debito tecnico per innovare nell’era dell’AI. CIO. https://www.cio.com/article/3989302/come-gestire-e-ridurre-il-debito-tecnico-per-innovare-nellera-dellai.html

Pandi, S. B., Binta, S. A., & Kaushal, S. (2023). Artificial intelligence for technical debt management in software development. arXiv preprint arXiv:2306.10194.

Recupito, G., Pecorelli, F., Catolino, G., Lenarduzzi, V., Taibi, D., Di Nucci, D., & Palomba, F. (2024). Technical debt in AI-enabled systems: On the prevalence, severity, impact, and management strategies for code and architecture. Journal of Systems and Software216, 112151.

Sklavenitis, D., & Kalles, D. (2024). Measuring Technical Debt in AI-Based Competition Platforms. In Proceedings of the 13th Hellenic Conference on Artificial Intelligence (pp. 1-10).

Tsoukalas, D., Mittas, N., Arvanitou, E. M., Ampatzoglou, A., Chatzigeorgiou, A., & Kechagias, D. (2024). Local and Global Explainability for Technical Debt Identification. IEEE Transactions on Software Engineering.