Masalah dengan melakukan refactoring besar adalah Anda bisa dan kadang-kadang akan mengikuti jalan yang membuat Anda sadar bahwa Anda telah menggigit lebih banyak daripada yang bisa Anda kunyah. Refactoring raksasa adalah kesalahan. Jika desain sistem cacat sejak awal, maka refactoring hanya akan membawa Anda sejauh ini sebelum Anda harus membuat keputusan sulit. Baik meninggalkan sistem apa adanya dan bekerja di sekitarnya, atau berencana untuk mendesain ulang dan membuat beberapa perubahan besar.
Namun ada cara lain. Manfaat nyata dari kode refactoring adalah membuat segala sesuatunya lebih sederhana, lebih mudah dibaca, dan bahkan lebih mudah dipelihara. Di mana Anda mendekati masalah yang memiliki ketidakpastian, Anda lonjakan perubahan, melangkah sejauh ini untuk melihat di mana itu mengarah untuk mempelajari lebih lanjut tentang masalah, kemudian membuang lonjakan, dan menerapkan refactoring baru berdasarkan pada apa lonjakan mengajarimu. Masalahnya, Anda benar-benar hanya dapat meningkatkan kode Anda dengan pasti jika langkah-langkahnya kecil dan upaya refactoring Anda tidak menyerbu kemampuan Anda untuk menulis tes Anda terlebih dahulu. Godaannya adalah menulis tes, lalu kode, lalu kode lagi karena sebuah solusi mungkin tampak jelas, tetapi segera Anda menyadari bahwa perubahan Anda akan mengubah lebih banyak tes, jadi Anda harus berhati-hati untuk hanya mengubah satu hal pada satu waktu.
Karena itu jawabannya adalah jangan pernah menjadikan refactoring Anda sebagai yang utama. Langkah kecil. Mulai dengan mengekstraksi metode, lalu lihat untuk menghapus duplikasi. Kemudian pindah ke kelas penggalian. Masing-masing dalam langkah kecil satu perubahan kecil pada satu waktu. JIKA Anda mengekstraksi kode, tulis tes terlebih dahulu. Jika Anda menghapus kode, maka hapus dan jalankan tes Anda, dan putuskan apakah tes yang rusak akan diperlukan lagi. Satu bayi mungil melangkah sekaligus. Sepertinya itu akan memakan waktu lebih lama, tetapi sebenarnya akan mempersingkat waktu refactoring Anda.
Namun kenyataannya adalah bahwa setiap lonjakan tampaknya merupakan pemborosan usaha yang potensial. Perubahan kode terkadang tidak ke mana-mana, dan Anda menemukan diri Anda memulihkan kode dari vcs. Ini hanya kenyataan dari apa yang kita lakukan dari hari ke hari. Namun setiap lonjakan yang gagal tidak sia-sia, jika itu mengajarkan Anda sesuatu. Setiap upaya refactoring yang gagal akan mengajarkan Anda bahwa Anda mencoba melakukan terlalu banyak terlalu cepat, atau bahwa pendekatan Anda mungkin salah. Itu juga bukan buang-buang waktu jika Anda belajar sesuatu darinya. Semakin banyak Anda melakukan hal ini, semakin banyak Anda belajar dan semakin efisien Anda jadinya. Saran saya adalah hanya memakainya untuk saat ini, belajar untuk melakukan lebih banyak dengan melakukan lebih sedikit, dan menerima bahwa ini adalah hal yang mungkin perlu sampai Anda menjadi lebih baik dalam mengidentifikasi seberapa jauh untuk mengambil lonjakan sebelum itu membawa Anda ke mana-mana.