Selamat datang di dunia pengembangan perangkat lunak lama.
Anda memiliki 100 ribu, jutaan, 10 juta jutaan baris kode.
Baris-baris kode ini berharga, karena menghasilkan aliran pendapatan dan menggantikannya tidak dapat dihindari.
Model bisnis Anda didasarkan pada pengungkitan basis kode itu. Jadi tim Anda kecil, basis kode besar. Menambahkan fitur ke diperlukan untuk membuat orang membeli versi baru dari kode Anda, atau untuk membuat pelanggan yang ada senang.
Di dunia yang sempurna, basis kode besar Anda adalah unit yang diuji wazoo. Anda tidak hidup di dunia yang sempurna.
Di dunia yang kurang sempurna, Anda memiliki anggaran untuk memperbaiki utang teknis Anda - memecah kode Anda menjadi bagian-bagian yang dapat diuji unit, melakukan pengujian integrasi yang luas, dan beralih.
Ini, bagaimanapun, adalah membayar hutang tanpa menghasilkan fitur baru. Yang tidak cocok dengan kasus bisnis "menuai keuntungan dari kode yang ada, sambil memodifikasinya untuk menghasilkan insentif untuk meningkatkan".
Anda dapat mengambil potongan besar kode dan menulis ulang menggunakan teknik yang lebih modern. Tetapi di mana pun Anda berinteraksi dengan kode yang ada, Anda akan memaparkan kemungkinan titik istirahat. Retas dalam sistem yang Anda singkirkan sebenarnya dikompensasi dengan kekhasan dalam subsistem yang tidak Anda tulis ulang. Selalu.
Yang bisa Anda lakukan adalah bertindak hati-hati. Anda dapat menemukan beberapa bagian dari kode yang benar-benar Anda pahami, dan yang perilakunya dan interaksinya dengan seluruh sistem dipahami dengan baik. Anda dapat memodernisasi itu, menambahkan unit test dan menjadikan perilakunya lebih jelas.
Kemudian temukan bagian-bagian sisa aplikasi yang sebagian besar berinteraksi dengannya, dan serang mereka satu per satu.
Saat Anda melakukannya, Anda dapat meningkatkan subsistem, menambahkan fitur yang bersedia dibayar oleh pelanggan.
Singkatnya, ini adalah seni dari kemungkinan - membuat perubahan tanpa merusak hal-hal yang menyediakan kasus bisnis.
Tapi ini bukan pertanyaanmu. Pertanyaan Anda adalah, "Saya melakukan sesuatu yang besar, dan kemungkinan akan merusak barang, dan bagaimana saya mengikuti praktik terbaik?"
Ketika melakukan sesuatu yang besar, memang benar bahwa jika Anda ingin melakukannya dengan andal Anda akhirnya menghabiskan lebih banyak upaya untuk melacak bug dan memperbaikinya daripada Anda menulisnya. Ini adalah aturan umum pengembangan perangkat lunak: menulis barang itu mudah, membuatnya bekerja dengan sempurna itu sulit.
Anda mungkin memiliki kasus bisnis yang menggantung di atas kepala Anda, di mana Anda telah berjanji kepada beberapa pemangku kepentingan bahwa perubahan besar ini terjadi. Dan itu sudah "selesai", jadi Anda mendapatkan pushback dengan mengatakan "tidak, ini tidak dilakukan, itu hanya terlihat suka itu".
Jika Anda memiliki kekuatan dan anggaran, benar-benar menghabiskan upaya menghasilkan kepercayaan bahwa perubahan itu berhasil, atau cukup menolak perubahan. Ini akan menjadi masalah derajat, bukan kebaikan.
Jika Anda tidak memiliki kekuatan sebesar itu, tetapi masih memiliki beberapa, cobalah untuk bersikeras bahwa sistem baru ini dapat diuji unit . Jika Anda menulis ulang beberapa subsistem, bersikeras bahwa subsistem baru terdiri dari bagian-bagian kecil dengan perilaku yang ditentukan dengan baik dan tes unit di sekitarnya.
Lalu ada kasus terburuk. Anda masuk lebih dalam ke hutang. Anda meminjam terhadap masa depan program dengan memiliki lebih banyak kode yang rapuh dan lebih banyak bug untuk mendapatkan fitur keluar sekarang , dan sial konsekuensinya. Anda melakukan QA berbasis sweep untuk menemukan masalah terburuk, dan mengabaikan sisanya. Ini sebenarnya kadang-kadang jawaban yang tepat dari perspektif bisnis, karena paling murah sekarang. Masuk ke hutang untuk menghasilkan keuntungan adalah strategi bisnis yang valid, terutama jika membersihkan hutang melalui kebangkrutan (meninggalkan kode) ada di atas meja.
Masalah besar adalah bahwa jarang sekali insentif pemilik perusahaan selaras dengan pembuat keputusan dan pemrogram. Ada cenderung banyak tekanan untuk 'memberikan', dan melakukannya dengan menghasilkan hampir tak terlihat (untuk atasan Anda) utang teknis adalah besar strategi jangka menengah pendek dan kadang-kadang. Sekalipun atasan / pemangku kepentingan Anda akan lebih baik dilayani dengan tidak menciptakan semua hutang itu.