Refactoring seperti mengambil kamar Anda.
Jika Anda menjaga hal-hal tetap rapi, Anda memiliki overhead linear, sebanding dengan jumlah pekerjaan produktif yang Anda lakukan pada kode, O (n) dalam istilah algoritolog. Dengan asumsi Anda menghabiskan 10% dari waktu refactoring Anda (atau menjaga kamar Anda rapi), bahwa 10% diberikan, dan itu akan tetap konstan seiring waktu.
Namun, jika Anda melemparkan pakaian kotor Anda ke sudut, dan terus melakukannya, jumlah waktu yang Anda habiskan untuk mengambil kamar Anda tumbuh seiring kekacauan menjadi lebih kompleks. Dengan asumsi bahwa setiap bagian dari cucian kotor berkontribusi secara eksponensial terhadap waktu pembersihan yang diperlukan, Anda sekarang berada dalam situasi O (e n ).
Siapa pun yang pernah menggali konsep kompleksitas algoritmik akan mengamati bahwa ada titik impas di suatu tempat, yaitu, ada jumlah optimal cucian kotor yang menumpuk; seberapa banyak itu tergantung pada faktor konstan yang dibuang dalam notasi O-besar. Faktor lain adalah nilai pekerjaan Anda dari waktu ke waktu: jika pekerjaan Anda bernilai banyak sekarang, tetapi murah minggu depan (yaitu, ada tenggat waktu hari Jumat ini untuk proyek ini dan tiga lagi, tetapi setelah itu, Anda akan kebanyakan menganggur ), persamaan mungkin berubah untuk tidak refactoring.
Dan kemudian ada kerumitan massa kritis. Pada titik tertentu, kekacauan ('kekacauan kritis', jika Anda mau) menjadi sangat buruk sehingga tampaknya lebih mudah membakar seluruh ruangan dan membeli pakaian baru. Pada kenyataannya biasanya tidak, tetapi tampaknya seperti itu, dan efek psikologis akan membuatnya sepuluh kali lebih sulit untuk mengatasi hal itu.
Dan jelas, jika Anda masuk ke proyek yang sudah menjadi kekacauan berlipat ganda raksasa, Anda memiliki pilihan terbatas.
TL; DR: Jika ragu, refactor. Anda harus memiliki bukti yang sangat baik sebelum memutuskan untuk tidak melakukannya.