Seringkali, patch / changelists "rumit" adalah yang melakukan banyak hal berbeda sekaligus. Ada kode baru, kode dihapus, kode refactored, kode pindah, tes diperluas; sulit untuk melihat gambaran besarnya.
Petunjuk umum adalah bahwa tambalan itu besar tetapi uraiannya kecil: "Terapkan $ FOO."
Cara yang masuk akal untuk menangani tambalan semacam itu adalah dengan meminta petak itu dipecah menjadi serangkaian potongan yang lebih kecil dan mandiri. Sama seperti prinsip tanggung jawab tunggal mengatakan suatu fungsi harus melakukan hanya satu hal, sebuah tambalan juga harus fokus pada satu hal.
Sebagai contoh, tambalan pertama mungkin berisi refactoring murni mekanis yang tidak membuat perubahan fungsional, dan tambalan terakhir dapat fokus pada implementasi aktual dan pengujian $ FOO dengan lebih sedikit gangguan dan ikan haring merah.
Untuk fungsionalitas yang membutuhkan banyak kode baru, kode baru sering kali dapat diperkenalkan dalam potongan yang dapat diuji yang tidak mengubah perilaku produk sampai tambalan terakhir dalam seri benar-benar memanggil kode baru (flip bendera).
Adapun untuk melakukan ini dengan bijaksana, saya biasanya mengatakan itu sebagai masalah saya dan kemudian meminta bantuan penulis: "Saya mengalami kesulitan mengikuti semua yang terjadi di sini. Bisakah Anda memecah tambalan ini menjadi langkah-langkah kecil untuk membantu saya memahami bagaimana semua ini cocok bersama?" Terkadang perlu membuat saran khusus untuk langkah-langkah kecil.
Jadi tambalan besar seperti "Implement $ FOO" berubah menjadi serangkaian tambalan seperti:
- Memperkenalkan versi baru Frobnicate yang membutuhkan sepasang iterator karena saya akan perlu menyebutnya dengan urutan selain vektor untuk mengimplementasikan $ FOO.
- Ganti semua penelepon Frobnicate yang ada untuk menggunakan versi baru.
- Hapus Frobnicate lama.
- Frobnicate melakukan terlalu banyak. Faktor langkah refrumple ke dalam metode sendiri dan tambahkan tes untuk itu.
- Perkenalkan Zerzify, dengan tes. Belum digunakan, tetapi saya akan membutuhkannya untuk $ FOO.
- Terapkan $ FOO dalam hal Zerzify dan Frobnicate baru.
Perhatikan bahwa langkah 1-5 tidak membuat perubahan fungsional pada produk. Mereka sepele untuk ditinjau, termasuk memastikan bahwa Anda memiliki semua tes yang tepat. Bahkan jika langkah 6 masih "rumit," setidaknya itu berfokus pada $ FOO. Dan log secara alami memberi Anda ide yang lebih baik tentang bagaimana $ FOO diterapkan (dan mengapa Frobnicate diubah).