Nel mondo IT sono definiti sistemi legacy quelli basati su tecnologie vecchie o comunque superate da soluzioni più moderne ed efficienti, ma ancora funzionanti ed in esercizio. In un mondo continuamente in evoluzione, sia in termini di tecnologia e strumenti software, sia di esigenze da parte delle aziende e dei loro clienti, spesso tali sistemi rappresentano di fatto un fardello ingombrante nell’ottica dell’evoluzione e potenziamento di un modello di business moderno.

Per garantire produttività interna ed una risposta veloce ed ottimale alle esigenze dei clienti delle impres, e secondo la logica d’interazione su più canali, è necessario adottare tecnologie compatibili con la modernizzazione degli applicativi, che permettano di ottimizzare i processi di sviluppo, aggiornamento e deploy del software.

Criticità dei sistemi legacy

Molti sistemi ormai obsoleti sono comunque mantenuti in esercizio per vari motivi comprensibili. Sebbene i sistemi basati su tecnologie ormai superate risultino spesso relativamente troppo costosi da mantenere in esercizio, anche eseguire un aggiornamento verso un sistema moderno richiede pianificazione ed investimenti non trascurabili.

I sistemi legacy di frequente sono stati sviluppati con linguaggi di programmazione e strumenti vetusti. Perciò può risultare difficile reperire personale in grado di eseguire i necessari aggiornamenti. Capita che gli sviluppatori originali non siano più disponibili, oppure che siano stati usati database e software ormai non più supportati e aggiornati attivamente dai produttori. Perciò anche soltanto pianificare la migrazione dei dati può essere un compito complesso e lungo da portare a termine.

Naturalmente è importante affidarsi ad un partner affidabile con le competenze necessarie per valutare le procedure necessarie all’evoluzione della infrastruttura verso standard più moderni, efficienti e vantaggiosi dal punto di vista delle funzionalità e dei costi di esercizio. Società che dispongono di know-how, esperienza e risorse per accompagnare nella evoluzione dei sistemi legacy.

Oggi le società devono rispettare standard piuttosto severi nelle proprie infrastrutture informatiche, si pensi per esempio al GDPR o ai regolamenti per il rispetto della privacy, gestendo i dati dei propri utenti. È mandatorio regolamentare e documentare con un insieme di protocolli chi ha accesso al sistema e a quali dati sensibili dei clienti. Nei sistemi legacy spesso queste regole non erano affatto previste e può risultare difficile, se non impossibile, garantire il rispetto delle normative attuali.

Si verifica di frequente che i dati nelle vecchie applicazioni siano gestiti nei cosiddetti data silos, ovvero ogni sottosistema di un framework dispone di hardware e software proprietario con un insieme di dati privato, in pratica inaccessibile agli altri moduli e ai responsabili della business intelligence, con evidenti limiti di trasparenza, sinergia e modernizzazione delle caratteristiche dell’infrastruttura informatica.

Il limite probabilmente più evidente dei sistemi legacy resta comunque la frequente necessità di integrare nuovi servizi e risorse negli applicativi per rispondere a nuovi modelli di business, nonché adeguarsi agli standard di interfaccia e funzionalità dettate dal mercato o dalle esigenze di aziende e clienti. Ma una architettura vecchio stile raramente prevede di integrare in modo semplice moduli basati su tecnologie recenti, sconosciute e quindi impreviste quando fu progettata e implementata. Un applicativo legacy monolitico è di fatto agli antipodi dei criteri di modularità e sviluppo AGILE moderno.

Modernizzare sistemi legacy

L’esigenza di rendere più moderna ed efficiente una infrastruttura esistente e operativa da tempo per migliorare il proprio business diventa non più rinviabile quando l’analisi dei costi di gestione e l’impossibilità di adottare tecnologie più moderne ed efficienti risultano più importanti dei tempi di pianificazione e dei costi necessari per la ristrutturazione ed evoluzione di quanto già esistente.

Un progetto di aggiornamento dell’infrastruttura informatica ha senso solo se crea valore per l’azienda. Per questo motivo si parte normalmente da un’attenta analisi costi/benefici, considerando come aggiornare o sostituire applicazioni legacy possa comportare rallentamenti nel lavoro aziendale e perfino disagi tangibili per i clienti.

La modernizzazione dell’applicativo implica inevitabilmente la necessità di rivedere le operazioni di gestione, test e deploy delle componenti, oltre eventualmente alla necessita di adottare nuove tecnologie e sistemi di sviluppo da parte del reparto IT interno. Inoltre, sostituire applicazioni monolitiche con microservizi offre indiscutibili vantaggi, ma aumenta il numero di componenti da gestire. Spesso occorre ottimizzare le risorse disponibili per garantire la specializzazione delle risorse esistenti sui singoli microservizi, o gruppi di microservizi, per ottimizzare il rendimento degli sviluppatori nel tempo.

Durante la pianificazione bisogna chiaramente adottare un approccio strategico che partendo dalle analisi delle esigenze e coinvolgendo responsabili IT e CIO, pianifichi i cambiamenti da apportare, considerando come la nuova architettura risponderà alle esigenze attese di rapporto funzionalità/costi, conformità agli standard di legge sulla sicurezza dei dati e nell’ottica di ottenere certificazioni, interoperabilità con le moderne infrastrutture e servizi di terze parti e adozione di strumenti open source, meno costosi e più semplici da manutenere di quelli proprietari.

Una soluzione conservativa per evolvere sistemi legacy e cercare di mitigare l’inevitabile impatto e i rischi sempre presenti quando si aggiorna una architettura complessa in esercizio, può essere di riutilizzare il codice legacy esistente, in tutto o in parte, attraverso interfacce API migrando le parti di backend e runtime su piattaforme containerizzate, on premise o cloud. I problemi di prestazioni e scalabilità possono essere affrontati con varie strategie di integrazione, per esempio adottando sistemi di buffering delle richieste in entrata e il trasferimento al backend.

Naturalmente più massiccio e profondo è l’intervento sulla struttura esistente, maggiori saranno i vantaggi nel tempo. Un approccio minimalistico e conservativo potrebbe essere la semplice sostituzione di strumenti di lavoro comuni, per esempio aggiornando la mail aziendale gestita da un server dedicato con soluzioni native cloud, possibilmente open source e con API condivise. Sarebbe un piccolo passo, economico e relativamente semplice da compiere, ma a fronte di funzionalità aggiornate e più evolute e di un risparmio economico nel tempo, impatta altresì in maniera spesso quasi trascurabile sulla operatività aziendale.

Un approccio più profondo verso le reingegnerizzazione di una completa architettura software aziendale, anche se non ancora completa, è di pensare ad una soluzione di Rehosting, ovvero trasferire sistemi legacy di dimensioni e complessità importanti, comprensivi di ERP e database, adottando soluzioni cloud che offrono maggior sicurezza e minori costi di esercizio e aggiornamento nel tempo. Si tratta comunque di un compito complesso, da svolgere ovviamente con l’ausilio di partner e consulenti affidabili, ma richiede meno tempo di una totale ristrutturazione. In ogni caso, non consente di godere appieno dei vantaggi di una infrastruttura informatica sviluppata in modo nativo per il cloud, né delle risorse open source e moderni servizi di terze parti con API condivise.

Assai diverso è pianificare e attuare la riprogettazione dell’intera infrastruttura informatica adottando metodologie DevOps, come container, microservizi, orchestratori, API e software open source native per il cloud. L’adozione di queste tecnologie comporta inevitabilmente la riscrittura totale (o quasi) del software esistente, ma nel breve o medio periodo comporta vantaggi evidenti in termini di funzionalità e affidabilità, mentre nel lungo periodo porta vantaggi concreti in termini di costi e tempi di manutenzione, velocità di implementazione degli aggiornamenti e delle nuove tecnologie, fruibilità dei dati a vari livelli e flessibilità dell’architettura nel tempo.

Infatti in questo modo la modernizzazione del software consente di adottare pienamente tecnologie che permettono di pianificare e sviluppare aggiornamenti in produzione delle sole parti necessarie, senza dovere ogni volta considerare l’impatto su tutto l’applicativo visto come un unico grande “blocco” articolato e complesso di software secondo i paradigmi vecchio stile dei sistemi legacy monolitici.