Una parte della risposta è Refactoring .
In primo luogo, inizia a scrivere test unitari per assicurarti di non rompere accidentalmente nulla con le tue modifiche. Quindi inizia a migliorare la progettazione, rimuovendo duplicazioni, ecc. In piccoli passi, eseguendo i test delle unità dopo ogni passaggio, risolvendo eventuali problemi se uno dei test fallisce o ripristinando immediatamente se si verifica un problema più grande di quello che è possibile risolvere facilmente.
L'altra parte è istruzione .
Le persone devono essere insegnate a non lasciare codice cattivo dietro. Questa è certamente una battaglia a lungo termine, poiché le abitudini e processi di pensiero sono difficili (a volte persino impossibili) da cambiare . Tuttavia, senza di esso, continuerai a ricevere una fornitura infinita di codice errato che urla per essere refactored.
Puoi scegliere di fare revisioni di codice di gruppo per aprire una discussione sulle buone e cattive abitudini di codifica e diffondere i meriti del primo. Non è sufficiente dire "devi (non) scrivere un codice come questo", devi convincere le persone con logica e fatti concreti. Come "se hai questo pezzo di metodo duplicato sopra il codebase n volte, cosa pensi che sia probabile che se un bug viene trovato in quel metodo, verrà corretto in ogni copia del codice del metodo? "
La tua azienda potrebbe anche aver bisogno di rivedere gli incentivi e i criteri di accettazione per i consulenti - se riescono a cavarsela scrivendo il codice sciatto, sicuramente continueranno a scegliere il percorso più facile. Se la società continua a valutare la "consegna rapida" rispetto alla manutenibilità a lungo termine, non cambierà nulla :-( Quindi potrebbe essere necessario discuterne anche con la gestione. Un modo per farle capire è: refactoring significa mantenere il codice pulito, facile da capire e mantenere. Omettere il refactoring è come accumulare debiti sulla carta di credito . Puoi farla franca per un po ', ma se non stai gestendo attivamente le tue abitudini di acquisto e debiti, si sgretolerà inevitabilmente sulle vostre spalle un giorno Nella vita di un progetto software, la bancarotta è quando il progetto diventa non mantenibile: diventa più facile riscriverlo da zero piuttosto che aggiungere una nuova funzionalità alla base di codice esistente. così stufo del livello inferiore di supporto e funzionalità che semplicemente passano alla concorrenza.