Ketika naluri Anda memberi tahu Anda bahwa Anda mungkin harus melakukan refactoring, kemungkinan naluri Anda memberi tahu Anda sedikit terlambat bahwa Anda telah menunda sesuatu yang penting terlalu lama.
Saya mengerti "kode-bau", red-green-refactor dan pemikiran lain, tetapi sering kali saya merasa bahwa waktu terbaik untuk refactor bukanlah pertama kali Anda menulis kode, tetapi kedua atau ketiga kalinya Anda menggunakan kode dan menyadari bahwa itu sebenarnya masalah dan sedang digunakan.
Ada dua level efektif untuk refactoring. Yang pertama adalah masalah yang jelas muncul ketika Anda pertama kali kode. Ini adalah sedikit optimasi yang membuat Anda sangat sedikit melakukan di muka. Hal-hal seperti menjaga metode dan kelas Anda kecil, dan mematuhi KERING dan SRP. Kemudian Anda memiliki tahap tambahan untuk menangani kekurangan utama dalam desain Anda, yang mungkin tidak segera terlihat sampai kode Anda memiliki beberapa mil di bawahnya. Ini adalah level kedua yang Anda bicarakan, namun untuk memastikan bahwa refactoring nanti tidak terlalu mahal, Anda harus sudah menulis kode Anda sedemikian rupa sehingga upaya yang Anda bayangkan nantinya menjadi lebih mudah dan lebih murah, yang berarti melakukan refactoring awal.
Seperti yang disebutkan Jeff dalam jawabannya, "waktu adalah uang" , terutama di perusahaan-perusahaan di mana beban kerjanya tinggi dan risikonya bahkan lebih tinggi. Waktu yang dihabiskan di depan untuk memastikan kode dalam keadaan sebaik mungkin dihemat kemudian, ketika mencari apa yang seharusnya menjadi refactoring mudah ternyata menjadi operasi besar.
Saat menulis perangkat lunak, setiap saat yang dihabiskan untuk memperbaiki kode Anda di muka adalah waktu yang dihemat nanti, ketika Anda benar-benar akan membutuhkannya. Semakin awal Anda melakukan refactor, perubahan Anda nantinya akan semakin jelas. Ini seperti membuat uang muka dalam dolar hari ini terhadap utang teknis di masa depan yang akan menjadi dolar yang digelembungkan besok.
Bagaimanapun, refactoring tidak boleh menjadi tugas yang Anda tunda sampai beberapa masa depan misterius ketika perangkat lunak sudah lengkap dan stabil, karena itu meningkatkan risiko Anda nanti ketika taruhannya jauh lebih tinggi dan produk jauh lebih sulit untuk diubah. Refactoring harus menjadi bagian dari kegiatan sehari-hari Anda, dan ini adalah inti dari filosofi Red-Green-Refactor yang Anda sebutkan.