Le aziende hanno generalmente 3 opzioni quando si tratta di modernizzare il codice legacy: refactoring, migrazione o riscrittura. Possono anche combinare questi approcci. Decidere quale percorso intraprendere richiede il coinvolgimento sia del team di ingegneria del software che del team di leadership aziendale.
Il refactoring del codice altera la struttura interna del codice sorgente senza modificarne il comportamento esterno o influire sulla sua funzionalità. Queste piccole modifiche hanno meno probabilità di introdurre bug e possono contribuire a creare un codice più chiaro, pulito e gestibile.
Per il codice legacy, i team possono iniziare con piccole modifiche per ciascun modulo, ad esempio rinominando le variabili, rimuovendo i metodi duplicati o inutilizzati e standardizzando la formattazione. Possono quindi procedere con una ristrutturazione più basata sulla logica, ad esempio suddividendo metodi troppo grandi in altri più piccoli, semplificando condizioni complesse e spostando parti di logica tra funzioni per ridurre le dipendenze e migliorare la coesione.
La migrazione è un altro percorso verso la modernizzazione del codice legacy. Comporta la migrazione totale o parziale del codice verso piattaforme o stack più recenti, come la transizione da un'architettura monolitica ai microservizi o il passaggio da un ambiente on-premise al cloud. È importante verificare la compatibilità con la piattaforma o lo stack tecnologico e confermare se i provider offrono supporto durante la migrazione.
La riscrittura del codice legacy è spesso l'ultima risorsa, perché comporta la creazione di codice completamente nuovo per sostituire quello vecchio. Questo è di per sé un nuovo progetto, un'impresa enorme che potrebbe richiedere un team di sviluppo separato per essere gestita.
Sia la migrazione che la riscrittura possono essere un compito arduo per enormi codebase legacy, quindi i team possono prendere in considerazione la "strangler fig strategy".3 Il fico strangolatore (strangler fig) cresce sulla sommità di un albero, facendo scendere le sue radici fino al suolo e avvolgendo lentamente l’albero ospite in una rete soffocante, che con il tempo lo porta ad appassire.
In termini di sistemi legacy, i team possono migrare o riscrivere in modo incrementale piccoli frammenti di codice fino a quando l'intera codebase non viene convertita in un framework moderno o sviluppata in un linguaggio di programmazione attuale. Tuttavia, i team devono creare un'architettura di transizione per far coesistere il codice esistente e il nuovo codice. Questa architettura di transizione verrà quindi dismessa una volta completata la migrazione o la riscrittura.3