Logo Codebaker
EN

Modernizzazione Software Legacy: AS400, VB6 e .NET Framework

Portiamo gestionali e applicazioni datate su tecnologie attuali con un percorso in fasi, un modulo alla volta, mantenendo la produzione in funzione e i dati sotto controllo.

Quando conviene modernizzare un software legacy

Un software legacy non è semplicemente un software vecchio: è un software che funziona ancora, che regge processi importanti e che però nessuno può più modificare senza rischio. Nelle PMI manifatturiere e logistiche dell'Emilia-Romagna questo si presenta quasi sempre nella stessa forma: un gestionale su AS400/iSeries che gira da vent'anni, un programma di reparto scritto in Visual Basic 6, un applicativo su una vecchia versione di .NET Framework che gira solo su un server che nessuno osa spegnere.

I sintomi che rendono urgente l'intervento sono ricorrenti: una sola persona sa mettere le mani sul codice, il sistema non parla con nulla di quello che è stato aggiunto dopo — e-commerce, app per gli agenti, portali per i clienti — le versioni di sistema operativo e di database sono fuori supporto, e ogni piccola modifica richiede settimane. A quel punto il costo di non intervenire smette di essere teorico: si paga in ore di lavoro manuale, in occasioni commerciali perse e in rischio di fermo.

La modernizzazione, però, non coincide con la riscrittura. Riscrivere tutto è la scelta più costosa e più rischiosa, e spesso non è necessaria: in molti casi il sistema esistente è solido nel suo perimetro e il vero problema è che resta isolato. Per questo il primo passo è sempre capire cosa si ha davanti, non decidere in anticipo dove si vuole arrivare. Il nostro metodo di sviluppo software parte dall'osservazione dei processi reali, e su un progetto legacy questo conta ancora di più, perché una parte delle regole di business non è scritta da nessuna parte se non nel codice.

Wrapping API di un sistema legacy AS400

yellow dot
strategia

Wrapping API

Il wrapping consiste nell'esporre le funzioni del sistema legacy attraverso API moderne, lasciando il sistema esattamente dov'è. Il gestionale continua a lavorare come ha sempre fatto, ma smette di essere un'isola: da quel momento un'app mobile per gli agenti, un e-commerce o un portale clienti possono leggere le giacenze e scrivere gli ordini senza che nessuno ricopi nulla a mano. È l'intervento più rapido e meno invasivo, e ha senso quando il sistema è stabile e copre bene il suo perimetro: il problema da risolvere è l'isolamento, non la logica applicativa. Il limite va detto con chiarezza: il wrapping non riduce il debito tecnico sottostante e non risolve il rischio di avere una sola persona in grado di manutenere quel codice. Risolve il problema di integrazione, che spesso è quello che blocca il business nell'immediato, e compra tempo per pianificare il resto con calma.

Migrazione incrementale con strategia strangler fig

yellow dot
strategia

Strangler fig

Lo strangler fig è la strategia che proponiamo più spesso sui sistemi in esercizio. L'idea è sostituire il legacy un modulo alla volta invece che in blocco: si sceglie una funzione, la si riscrive su stack moderno, la si manda in produzione affiancata alla vecchia e si sposta il traffico solo quando ha dimostrato di funzionare. Ripetendo il ciclo, il perimetro del sistema vecchio si restringe progressivamente fino a esaurirsi. Il vantaggio non è tecnico ma di rischio: ogni passo è piccolo, misurabile e reversibile, e il valore arriva fin dal primo modulo invece che alla fine di un progetto lungo. In cambio richiede disciplina — per un certo periodo due sistemi convivono e vanno tenuti sincronizzati — e una scelta accorta dell'ordine dei moduli, che decidiamo insieme all'azienda partendo da dove il dolore operativo è maggiore.

Rewrite completo di un applicativo legacy

yellow dot
strategia

Rewrite completo

Il rewrite riscrive l'applicazione da zero su tecnologie attuali. È la strada che dà il massimo margine di manovra — modello dei dati ripensato, nessun vincolo ereditato, debito tecnico azzerato — ma concentra tutto il rischio in un unico passaggio: finché il nuovo sistema non è completo non produce valore, e il confronto con il vecchio avviene tutto in una volta. Per questo lo proponiamo quando le alternative incrementali non reggono davvero: quando la tecnologia di base non è più supportata né ospitabile, quando il modello dei dati impedisce qualsiasi evoluzione, o quando i processi che il software supporta sono cambiati al punto che replicarli non avrebbe senso. In quei casi la riscrittura è la scelta onesta, e va affrontata con una migrazione dei dati progettata e riconciliata, non improvvisata alla fine.

impatti sul business

yellow dot

Il sistema torna integrabile

Un gestionale legacy isolato blocca tutto ciò che l'azienda vorrebbe aggiungere: raccolta ordini in mobilità, portale clienti, e-commerce, dashboard di produzione. Esponendo le sue funzioni tramite API, quei progetti tornano possibili senza aspettare la fine della modernizzazione. È spesso il primo risultato tangibile e quello che sblocca il resto.

yellow dot

Il rischio smette di dipendere da una persona

Nei sistemi legacy la conoscenza è concentrata in una o due persone e non è quasi mai documentata. Riportare il codice su stack correnti, con test e documentazione, significa che la manutenzione può essere presa in carico da un team invece che da un individuo, e che una sostituzione o un'assenza non diventano un problema di continuità aziendale.

yellow dot

Costi e tempi tornano prevedibili

Su un sistema legacy ogni richiesta di modifica è un preventivo a sé, perché nessuno sa davvero cosa si romperà. Su una base moderna con test automatici l'impatto di una modifica è stimabile, i rilasci sono ripetibili e il costo di manutenzione smette di crescere a ogni anno che passa. Il vantaggio si misura nel tempo, non al primo rilascio.

La roadmap in fasi di un progetto di modernizzazione

Nessuna delle tre strategie viene scelta a priori. Il percorso è sempre lo stesso e la decisione arriva alla fine della seconda fase, quando ci sono elementi concreti per prenderla:

  1. Assessment del parco applicativo: leggiamo il codice e la banca dati, mappiamo le integrazioni esistenti e osserviamo come le persone usano davvero il sistema. Serve a distinguere i moduli vivi da quelli che nessuno apre da anni e a far emergere le regole di business che esistono solo nel codice.
  2. Scelta della strategia, modulo per modulo: la decisione non è unica per tutto il sistema. Su uno stesso gestionale capita spesso di esporre via API la parte anagrafica, riscrivere in modo incrementale il ciclo ordini e lasciare intatto un modulo contabile che funziona bene.
  3. Messa in sicurezza della base dati: prima di spostare qualsiasi funzione, i dati vengono analizzati, normalizzati dove serve e dotati di procedure di migrazione ripetibili, provate su copie reali finché i totali riconciliano.
  4. Migrazione incrementale con doppio binario: le nuove funzioni entrano in produzione affiancate alle vecchie e i due sistemi restano allineati tramite connettori, così ogni passaggio è reversibile sul singolo modulo.
  5. Affiancamento e dismissione: gli utenti passano al nuovo sistema per gradi, con formazione sul campo; il legacy viene spento solo quando il suo perimetro residuo è vuoto, non prima.

Su cosa incide il costo di un progetto di questo tipo e come si struttura un preventivo lo abbiamo spiegato nella pagina quanto costa un software su misura. A valle della modernizzazione, il sistema entra nel percorso di manutenzione software evolutiva, perché il debito tecnico si riforma se nessuno lo tiene sotto controllo.

Connettori AS400, SAP e integrazione con i sistemi esistenti

La parte che determina la riuscita di una modernizzazione incrementale non è la riscrittura: è il collegamento tra il vecchio e il nuovo mentre convivono. Sviluppiamo connettori e middleware verso AS400/iSeries, SAP e i gestionali di mercato già in uso, così che anagrafiche, giacenze e ordini restino allineati durante tutta la transizione, senza doppia digitazione e senza disallineamenti tra magazzino e ordini. Il lavoro si appoggia sulle API web custom e sulle stesse pratiche di software testing e QA che usiamo sui progetti nuovi.

Conor: raccolta ordini modernizzata sopra un AS400 in esercizio

Per Conor abbiamo modernizzato la raccolta ordini mantenendo la continuità con il gestionale AS400 già in uso, grazie a integrazioni API in tempo reale, a servizio di oltre 5.000 clienti al giorno. È il caso tipico in cui il sistema storico non andava sostituito, ma aperto. Scopri il progetto Conor Shop.

Dove invece il gestionale va davvero sostituito, il punto di arrivo è un software gestionale ERP custom modellato sull'operatività esistente, affiancato dove serve dal CRM su misura e dalla digitalizzazione dei processi aziendali per i flussi che oggi vivono fuori dal sistema, tra Excel e email.

Domande frequenti sulla modernizzazione del software legacy

Che cos'è la modernizzazione di un software legacy?

È il percorso che porta un'applicazione datata — un gestionale su AS400, un programma in Visual Basic 6, un applicativo su una vecchia versione di .NET Framework — a una forma sostenibile: integrabile con gli altri sistemi, manutenibile da più di una persona e sicura. Non coincide necessariamente con la riscrittura: a seconda dello stato del sistema si può esporre il legacy tramite API, sostituirlo modulo per modulo o riscriverlo, e le tre strade hanno costi e rischi molto diversi.

Qual è la differenza tra rewrite, strangler fig e wrapping API?

Il wrapping API lascia il sistema legacy dov'è e gli costruisce intorno un'interfaccia moderna, così che altre applicazioni possano dialogarci: è il più rapido e il meno invasivo. Lo strangler fig sostituisce il legacy un modulo alla volta, mandando in produzione le nuove funzioni accanto alle vecchie finché il perimetro residuo si esaurisce: è la via preferibile per un sistema in esercizio, perché ogni passo è reversibile. Il rewrite riscrive tutto da zero: dà il massimo margine di manovra ma concentra il rischio in un unico passaggio, quindi lo riserviamo ai casi in cui il sistema esistente non è recuperabile.

Possiamo modernizzare il gestionale senza fermare la produzione?

Sì, ed è il motivo per cui nella maggior parte dei progetti proponiamo un percorso incrementale invece di una sostituzione in blocco. Il sistema nuovo e quello vecchio convivono per tutta la transizione, sincronizzati tramite connettori e API: gli utenti passano alla nuova funzione un modulo alla volta e, se qualcosa non funziona come previsto, si torna indietro su quel singolo modulo invece che sull'intero progetto. Il fermo, quando serve, si riduce alle finestre di migrazione dei dati, concordate in anticipo.

Lavorate su software scritto da un altro fornitore o senza documentazione?

Sì, ed è la situazione più frequente nei progetti legacy: spesso chi ha scritto il software non è più in azienda e la documentazione è parziale o assente. Partiamo da un assessment tecnico che ricostruisce il comportamento reale del sistema dal codice, dalla banca dati e dall'osservazione di come le persone lo usano davvero, perché è lì che vivono le regole di business mai scritte da nessuna parte. Solo dopo questa fase proponiamo una strategia e una stima.

Cosa succede ai dati storici durante la migrazione?

I dati storici vengono migrati con procedure ripetibili e verificate, non con un travaso una tantum: la migrazione viene provata più volte su copie reali finché i totali del sistema nuovo riconciliano con quelli del vecchio. Dove lo storico è troppo eterogeneo per essere normalizzato interamente, si concorda quale profondità portare nel sistema nuovo e si mantiene il resto in sola consultazione, invece di forzare dati sporchi dentro un modello pulito.

Contattaci oggi per una consulenza gratuita!

Hai un gestionale AS400, un applicativo in Visual Basic 6 o un software che ormai una sola persona riesce a toccare? Raccontaci com'è fatto e come lo usate: il team Codebaker parte da un assessment del sistema e ti propone il percorso di modernizzazione più sensato — API, migrazione incrementale o riscrittura — dicendoti anche quando non conviene rifare nulla.