Legacy System Modernization
Libera la tua azienda dal software che nessuno osa più toccare: modernizza senza fermare il business.
Il problema in breve
Molte aziende italiane gestiscono processi critici, ordini, produzione, fatturazione, con software scritto quindici o vent’anni fa. Funziona, ma nessuno sa esattamente come. Spesso c’è una sola persona che lo conosce davvero, e quando va in ferie o si avvicina alla pensione, il rischio diventa concreto. Aggiungere una funzione, collegare un nuovo strumento o semplicemente aggiornare il sistema operativo diventa un’impresa. Nel frattempo, il Garante per la privacy ha già sanzionato PMI per inadeguatezza tecnica dei sistemi informativi. Il paradosso è che il software funziona, fino al giorno in cui smette di farlo, e a quel punto non c’è più nessuno che sappia ripararlo.
La sfida
Il panorama tecnologico delle PMI italiane presenta una stratificazione di sistemi legacy che costituisce un freno strutturale alla crescita. ERP sviluppati in Visual Basic 6, gestionali basati su Microsoft Access, portali interni in ASP.NET WebForms, MES costruiti su misura vent’anni fa con architetture monolitiche e database non normalizzati: questi sistemi rappresentano il nucleo operativo dell’azienda, ma sono costruiti su tecnologie per cui non esistono più aggiornamenti di sicurezza, sviluppatori disponibili sul mercato, né percorsi di evoluzione supportati dai vendor.
Il problema tecnico è aggravato da caratteristiche architetturali tipiche dell’epoca. In molte applicazioni VB6 sviluppate senza una separazione architetturale esplicita, gran parte della business logic, spesso il 40-60%, è incorporata direttamente negli event handler dell’interfaccia utente, click di pulsanti, caricamento di form, eventi di griglia, rendendo impossibile separare la logica dal frontend senza un’analisi approfondita del codice. Le dipendenze da componenti COM e controlli ActiveX prodotti da vendor ormai scomparsi dal mercato creano vincoli binari non sostituibili. I database, spesso privi di documentazione, contengono relazioni implicite, stored procedure con logica di business critica e strutture non normalizzate che rendono ogni tentativo di migrazione un esercizio di reverse engineering.
Sul piano della compliance, la situazione è critica. L’impossibilità di cancellare dati personali senza compromettere tabelle correlate in modi non documentati, l’assenza di log di accesso ai dati personali, il consenso al trattamento tracciato solo su moduli cartacei in archivi fisici: queste non sono ipotesi, ma le condizioni reali riscontrate nelle PMI italiane. Il Garante ha già emesso sanzioni per inadeguatezza tecnica, e con il D.Lgs. 138/2024 (NIS2) che estende i requisiti di cybersecurity lungo la supply chain, anche le PMI non direttamente in perimetro sono esposte.
A questo si aggiunge il fattore umano. In molte PMI italiane esiste un’unica figura, spesso il responsabile IT che ha costruito il sistema, che ne possiede la conoscenza completa. Questa concentrazione di know-how non documentato rappresenta un singolo punto di vulnerabilità organizzativa (single point of failure) che, con l’avvicinarsi del pensionamento di queste figure, sta trasformando un rischio latente in un’emergenza operativa.
La soluzione
Evoluzione Incrementale, non Riscrittura
L’approccio alla modernizzazione parte da un principio fondamentale: non si riscrive tutto da zero. La riscrittura totale del sistema, il cosiddetto “big bang rewrite”, ha un tasso di fallimento storicamente elevato nei progetti enterprise, stimato oltre il 70% nelle analisi di settore più citate (Standish Group, McKinsey). L’alternativa è un’evoluzione incrementale e controllata, in cui il sistema legacy continua a funzionare mentre viene progressivamente sostituito.
Assessment Architetturale e di Rischio
La prima fase è un assessment architetturale e di rischio: reverse engineering del codice esistente per mappare la business logic (inclusa quella nascosta negli event handler e nelle stored procedure), analisi delle dipendenze COM/ActiveX, audit del database per identificare relazioni implicite, e valutazione del debito tecnico. Questa fase produce una mappa completa del sistema e una prioritizzazione dei moduli da modernizzare basata su rischio operativo, valore di business e complessità tecnica.
Strangler Fig Pattern
La strategia di migrazione adotta lo Strangler Fig Pattern, formalizzato da Martin Fowler: un layer architetturale, tipicamente un API gateway, viene posizionato davanti al sistema legacy. Tutto il traffico in ingresso passa attraverso questo layer. Man mano che nuovi moduli vengono sviluppati con architetture moderne (microservizi, API RESTful, frontend disaccoppiati), le richieste corrispondenti vengono instradate verso i nuovi servizi, mentre il resto del traffico continua a essere gestito dal legacy. Nel tempo, il sistema legacy si “svuota” progressivamente fino al ritiro completo. Ogni passaggio è reversibile: se un nuovo modulo presenta problemi, il traffico viene ridiretto al legacy in tempo reale.
Sincronizzazione Dati e Anti-Corruption Layer
La coesistenza tra vecchio e nuovo introduce la sfida della sincronizzazione dei dati. Tecniche di Change Data Capture (CDC), tramite strumenti come Debezium, intercettano le modifiche nel database legacy e le pubblicano come eventi su un message broker (Apache Kafka), consentendo ai nuovi microservizi di mantenere la propria base dati sincronizzata quasi in tempo reale. Un Anti-Corruption Layer (ACL) isola i nuovi servizi dai modelli dati obsoleti del legacy, traducendo le strutture dati vecchie nel nuovo domain model senza contaminazione architetturale.
Migrazione VB6 a .NET
Per le migrazioni specifiche da VB6 a .NET, l’approccio combina strumenti di conversione automatica come punto di partenza, il cui output richiede revisione sistematica, per raggiungere la parità funzionale con il sistema originale, affiancati da refactoring progressivo per separare la business logic dall’interfaccia, adottare pattern moderni (dependency injection, repository pattern, CQRS dove appropriato) e abilitare il testing automatico. Il target architetturale, ASP.NET Core, Blazor, o API backend con frontend SPA, viene scelto in base al profilo dell’applicazione e alle competenze del team del cliente.
Validazione, Migrazione Dati e Knowledge Transfer
La validazione di ogni modulo migrato avviene attraverso test di contratto tra legacy e nuovo servizio, esecuzione in parallelo dei due sistemi su traffico reale, e confronto degli output prima del cutover definitivo. La migrazione dei dati, spesso il rischio più sottovalutato, prevede profilazione della qualità dei dati esistenti, normalizzazione dello schema, e validazione post-migrazione tramite confronto sistematico tra sorgente e destinazione. Il percorso include una valutazione dell’infrastruttura di destinazione, on-premise, cloud o ibrida, e, in parallelo all’intervento tecnico, sessioni strutturate di knowledge transfer con le figure chiave interne e formazione del team sul nuovo stack tecnologico. L’architettura modernizzata abilita nativamente i requisiti NIS2 (logging strutturato, gestione delle vulnerabilità, incident response) e GDPR (audit trail, cancellazione granulare, gestione del consenso) che il sistema legacy non era in grado di soddisfare.
Tecnologie chiave
Microservices Architecture
Decomposizione del monolite in servizi indipendenti, deployabili e scalabili autonomamente.
ApprofondisciAPI Gateway & Service Mesh
Routing intelligente del traffico tra sistema legacy e nuovi servizi, con autenticazione, rate limiting e observability centralizzati.
ApprofondisciChange Data Capture
Sincronizzazione in near-real-time tra database legacy e nuovi servizi tramite event streaming.
ApprofondisciContainer Orchestration
Deployment, scaling e gestione del ciclo di vita dei microservizi con Docker e Kubernetes.
ApprofondisciCI/CD Pipelines
Automazione di build, test e deployment per rilasci frequenti, affidabili e reversibili.
ApprofondisciEvent-Driven Architecture
Disaccoppiamento tra servizi tramite eventi asincroni per resilienza e scalabilità.
ApprofondisciRisultati e benefici
Riduzione del 25-35% dei costi operativi IT (manutenzione, infrastruttura, tempo sviluppatore improduttivo) entro 18-24 mesi dall’avvio della modernizzazione
Riduzione del 40-60% del lead time dalla richiesta al deployment di nuove funzionalità grazie a CI/CD e architettura modulare
Eliminazione del singolo punto di vulnerabilità organizzativa: la conoscenza del sistema diventa documentata, testata e condivisa
Onboarding di nuovi sviluppatori ridotto da mesi a settimane grazie a codebase testato, documentato e strutturato secondo pattern moderni
Conformità GDPR e NIS2 raggiungibile nativamente: log strutturati, gestione granulare dei dati personali, audit trail completi, gestione delle vulnerabilità
L’integrazione con sistemi esterni (e-commerce, CRM, fatturazione elettronica), che su sistemi legacy richiede settimane di adattamento, diventa un’operazione standard grazie alle API esposte dall’architettura modernizzata
Scalabilità orizzontale: l’infrastruttura cresce con il business senza riscritture architetturali
Use case
Manifatturiero: ERP VB6 con 20 anni di business logic
Un’azienda manifatturiera (fatturato €30M, 120 dipendenti) gestisce l’intero ciclo produttivo, ordini, distinte base, pianificazione, magazzino, spedizioni, su un ERP sviluppato internamente in VB6 nel 2004. Il responsabile IT che lo ha costruito andrà in pensione entro 18 mesi. L’applicazione presenta 800+ form con business logic negli event handler, 200+ stored procedure e dipendenze da 12 controlli ActiveX di vendor non più attivi. Un API gateway viene posizionato davanti al sistema, e i moduli vengono estratti progressivamente: prima il magazzino (più critico e meglio isolabile), poi la pianificazione, infine gli ordini. Ogni modulo estratto diventa un microservizio .NET con API REST, database dedicato e test automatici. Con un team dedicato di 3 sviluppatori affiancati all’esperto interno nelle prime fasi di knowledge transfer, in 14 mesi il 60% della business logic è migrata, i nuovi sviluppatori lavorano sul codebase moderno, e il legacy gestisce solo i moduli residuali in fase di migrazione.
Distribuzione: gestionale Access e portale ASP.NET WebForms
Un distributore B2B (fatturato €15M, 45 dipendenti) opera con un gestionale ordini basato su Access condiviso in rete locale e un portale agenti in ASP.NET WebForms. Il database Access ha raggiunto i 1.8 GB, formato per cui la soglia tecnica massima è 2 GB ma le performance degradano significativamente già oltre 500 MB–1 GB in accesso concorrente, e il sistema è inutilizzabile con più di 5 utenti simultanei, e il portale agenti non è accessibile da mobile. La migrazione adotta un approccio database-first: i dati vengono migrati da Access a PostgreSQL con uno schema normalizzato, mantenendo un layer di compatibilità (ACL) che permette al vecchio gestionale di continuare a funzionare durante la transizione. Il nuovo portale, una SPA con backend API, viene sviluppato in parallelo e collegato al nuovo database. In 8 mesi il gestionale Access viene dismesso, il portale agenti funziona da mobile, e l’integrazione con il sistema di fatturazione elettronica (SDI) è nativa.
Servizi professionali: piattaforma di gestione pratiche legacy
Uno studio di consulenza (fatturato €6M, 80 professionisti) gestisce le pratiche clienti su un’applicazione desktop sviluppata in Delphi 15 anni fa. Il software gira solo su Windows, non ha interfaccia web, e ogni aggiornamento richiede installazione manuale su ogni postazione. Con il passaggio al lavoro ibrido post-COVID, la limitazione è diventata insostenibile. L’approccio prevede la creazione di un API layer, a partire dalla business logic estraibile dal codice Delphi, con una fase preliminare di reverse engineering, che espone le funzionalità core come servizi REST, permettendo lo sviluppo di un frontend web moderno che convive con l’applicazione desktop. I professionisti iniziano a usare la versione web per le operazioni quotidiane (consultazione pratiche, inserimento note, gestione scadenze), mentre le funzionalità più complesse vengono migrate progressivamente. In 14 mesi, il 65% dell’operatività quotidiana avviene via web, accessibile da qualsiasi dispositivo, e il client Delphi è utilizzato solo per le funzionalità residuali in fase di migrazione.
Hai un sistema che funziona ma che nessuno vuole più toccare?
Richiedi una valutazione tecnica: analizziamo l'architettura, le dipendenze e i rischi del tuo software legacy per disegnare un percorso di modernizzazione incrementale, senza interrompere le operazioni.