Potresti aver risposto alla tua domanda senza rendertene conto:
These projects are still utilized in production environments (without issue) and have new features implemented on a yearly cycle.
Se è davvero così, l'implementazione probabilmente non è così male come pensi. Se il software funziona ed è relativamente facile da mantenere, lo hai inchiodato. Inoltre, se riesci ad aggiungere facilmente nuove modifiche strutturali drastiche, allora hai veramente inchiodato.
Ricorderai sempre ieri con ciò che sai oggi e deciderà che ieri è in qualche modo inferiore a oggi. Questo è ciò che chiamiamo crescita e miglioramento, tuttavia ciò non implica che in qualche modo la giornata di ieri debba essere risolta.
Perché, oh, perché impiegheresti molto tempo a rendere un programma mantenibile, estensibile e funzionale esattamente la stessa cosa che era quando hai iniziato? Ci saranno evidenti vantaggi per gli utenti che non sono misurati in milionesimi di secondo o linee di codice che vedono raramente (se mai)?
Se, durante il ciclo di vita del programma, ti rendi conto che i metodi o le funzioni deprecati rendono il design esistente non tanto sensato quanto originariamente fatto, potrebbe essere necessario apportare alcune modifiche. Potrebbe anche essere necessario introdurre una funzione che giustifica alla fine tornare indietro e fare un sacco di ri-factoring.
Non rifare il factoring di qualcosa in produzione solo per il ri-factoring. L'intero obiettivo è scrivere codice che non debba essere drasticamente modificato in futuro, e sembra che tu abbia raggiunto quell'obiettivo. Perché cortocircuitare un successo?