Benar.
Refactoring harus dilakukan pada proyek yang berfungsi dan "lewat". Ketika semua tes Anda (pada tingkat unit, sistem, dan penerimaan) lulus, Anda tahu bahwa produk Anda memenuhi persyaratan. Saat Anda refactor, Anda dapat terus mengonfirmasi bahwa semua tes terus berjalan. Jika tes apa pun mulai gagal, maka Anda melakukan sesuatu yang salah dan perlu memperbaikinya. Jika Anda gagal dalam tes, Anda harus memperbaikinya sebelum refactoring sehingga Anda selalu dapat memastikan refactoring Anda tidak mengubah fungsionalitas sistem.
Ini juga merupakan waktu yang tepat untuk refactoring, dengan anggapan Anda memiliki waktu dan sumber daya untuk melakukan refactoring dan masih memenuhi waktu dan anggaran. Refactoring sekarang akan membuatnya lebih mudah untuk memahami dan memelihara sistem Anda, sehingga saat Anda menambahkan lebih banyak fitur baru, itu menjadi lebih mudah. Anda harus berjuang melawan kode busuk dan entropi perangkat lunak .
Seperti yang ditunjukkan Joel Etherton dalam komentar, Anda perlu mengelola lingkup refactoring. Fokus pada refactoring bagian-bagian sistem yang akan segera Anda tambahkan fitur, melakukan refactoring yang akan membuatnya lebih mudah untuk bekerja dengan atau menambahkan fitur-fitur baru. Penggunaan analisis statis, alat metrik, dan ulasan kode dapat membantu Anda mengidentifikasi area yang paling kritis. Anda tidak ingin ketinggalan tenggat karena Anda sedang melakukan refactoring - Anda masih perlu terus menambah nilai kepada pelanggan.
Anda menyebutkan pelanggan tidak melihat nilai dalam refactoring. Biasanya, pelanggan tidak peduli dengan kualitas kode, tetapi dari produk. Refactoring akan memudahkan Anda untuk mempertahankan kualitas produk yang tinggi dan terus memberikan produk yang memenuhi kebutuhan pelanggan yang terus berubah. Cobalah untuk merundingkan waktu untuk refactoring ke dalam jadwal Anda (pelanggan menginginkan fitur X dalam Y hari, cobalah untuk melihat apakah Anda tidak bisa mendapatkan Y + Z hari atau fitur XN sehingga Anda dapat menghabiskan waktu pada desain, refactoring, dan implementasi), jika Anda bisa.