Salah satu bagian dari jawabannya adalah Refactoring .
Pertama, mulailah menulis unit test untuk memastikan bahwa Anda tidak secara tidak sengaja merusak apa pun dengan perubahan Anda. Kemudian mulailah meningkatkan desain, menghapus duplikasi, dll. Dalam langkah-langkah kecil, menjalankan pengujian unit Anda setelah setiap langkah, memperbaiki masalah apa pun jika salah satu tes gagal, atau langsung kembali jika Anda mengalami masalah yang lebih besar daripada yang dapat Anda pecahkan dengan mudah.
Bagian lainnya adalah pendidikan .
Orang harus diajari untuk tidak meninggalkan kode buruk. Ini tentu saja merupakan pertempuran jangka panjang, karena kebiasaan dan proses berpikir sulit (kadang-kadang bahkan tidak mungkin) untuk diubah . Namun, tanpa itu, Anda hanya akan terus mendapatkan persediaan kode buruk yang terus-menerus berteriak untuk di-refactored.
Anda dapat memilih untuk melakukan tinjauan kode grup untuk membuka diskusi tentang kebiasaan pengkodean yang baik dan buruk, dan sebarkan manfaat dari yang sebelumnya. Tidaklah cukup untuk mengatakan "Anda harus (tidak) menulis kode seperti ini", Anda perlu meyakinkan orang-orang dengan logika dan fakta keras. Seperti "jika Anda memiliki bagian metode ini digandakan pada basis kode n kali, menurut Anda kemungkinannya adalah bahwa jika bug ditemukan dalam metode itu, itu akan diperbaiki di setiap salinan kode metode?"
Perusahaan Anda mungkin juga perlu merevisi insentif dan kriteria penerimaan untuk para konsultan - jika mereka bisa lolos dengan menulis kode ceroboh, mereka pasti akan tetap memilih jalur yang lebih mudah. Jika perusahaan terus menilai "pengiriman cepat" dalam pemeliharaan jangka panjang, tidak ada yang akan berubah :-( Jadi Anda mungkin perlu mendiskusikan ini dengan manajemen juga. Salah satu cara untuk membuat mereka mengerti adalah ini: refactoring berarti menjaga kode tetap bersih, mudah pahami dan pertahankan. Menghilangkan refactoring seperti menumpuk hutang pada kartu kredit Anda. Anda dapat meloloskan diri untuk sementara waktu, tetapi jika Anda tidak secara aktif mengelola kebiasaan beli dan utang Anda, suatu hari nanti pasti akan remuk di pundak Anda. Dalam kehidupan proyek perangkat lunak, kebangkrutan adalah ketika proyek menjadi tidak dapat dipelihara: menjadi lebih mudah untuk menulis ulang dari awal daripada menambahkan fitur baru ke basis kode yang ada. Atau pengguna jadi muak dengan tingkat dukungan dan fitur yang lebih rendah sehingga mereka beralih ke kompetisi.