Anda benar - salin-tempel berfungsi dengan baik, dan KERING tidak ada gunanya ketika tugas Anda adalah untuk menghasilkan program yang mana templat yang disalin atau salinan tidak harus dipertahankan atau dikembangkan di masa depan. Ketika kedua komponen perangkat lunak memiliki siklus hidup yang sama sekali berbeda, kemudian menggabungkannya bersama dengan refactoring kode umum ke lib umum yang itu sendiri di bawah pengembangan yang berat memang dapat memiliki efek yang tidak terduga untuk upaya tersebut. Di sisi lain, ketika menyalin bagian kode di dalam satu program atau sistem program, semua bagian ini biasanya memiliki siklus hidup yang sama. Saya akan menggambarkan di bawah ini apa artinya ini bagi KERING dan manajemen proyek.
Serius, ada banyak program seperti itu di luar sana: misalnya, industri permainan komputer menghasilkan banyak program yang harus dipertahankan dalam waktu singkat beberapa bulan atau satu tahun maksimum, dan ketika waktu itu berakhir, salin-tempel kode lama dari gim sebelumnya yang periode pemeliharaannya sudah ditentukan, menjadi basis kode gim baru dengan baik dan mungkin mempercepatnya.
Sayangnya, siklus hidup sebagian besar program yang harus saya tangani selama beberapa tahun terakhir sangat berbeda dari itu. 98% persyaratan atau permintaan perbaikan bug yang tiba pada saya adalah permintaan perubahanuntuk program yang ada. Dan setiap kali Anda perlu mengubah sesuatu dalam perangkat lunak yang ada, "manajemen proyek" atau perencanaan bekerja paling baik ketika upaya pengujian dan debugging Anda sangat rendah - yang tidak akan terjadi jika Anda mengubah sesuatu di satu tempat, tetapi karena menyalin Logika bisnis yang dicicipi Anda dengan mudah lupa bahwa Anda perlu mengubah selusin tempat lain di basis kode juga. Dan bahkan jika Anda berhasil menemukan semua tempat itu, waktu untuk mengubah semuanya (dan menguji perubahannya) mungkin jauh lebih tinggi seolah-olah Anda hanya memiliki satu tempat untuk berubah. Jadi, bahkan Anda dapat membuat estimasi yang akurat untuk perubahan, dengan biaya selusin kali lebih tinggi dari yang seharusnya dapat dengan mudah bertabrakan dengan anggaran proyek.
TLDR - setiap kali Anda mengembangkan program di mana tidak ada keharusan atau tanggung jawab untuk perbaikan bug dan pemeliharaan asli atau salinan, jangan ragu untuk menyalin. Tetapi jika Anda, tim Anda atau perusahaan Anda atau mungkin menjadi bertanggung jawab, terapkan KERING kapan pun Anda bisa.
Contoh
Sebagai tambahan, izinkan saya menjelaskan apa artinya "perbaikan bug dan pemeliharaan", dan bagaimana ini mengarah pada ketidakpastian dalam perencanaan, terutama di dalam satu produk, dengan contoh dunia nyata. Saya memang pernah melihat hal-hal semacam ini terjadi dalam kenyataan, mungkin tidak dengan 100 instance, tetapi masalah bahkan dapat dimulai ketika Anda hanya memiliki satu instance duplikat.
Tugas: membuat 100 laporan berbeda untuk satu aplikasi, setiap laporan tampak sangat mirip, beberapa perbedaan persyaratan antara laporan, beberapa logika berbeda, tetapi semuanya, tidak banyak perbedaan.
Dev yang mendapatkan tugas ini menciptakan yang pertama (misalkan butuh 3 hari), setelah beberapa perubahan atau perbaikan bug kecil karena QA dan inspeksi pelanggan selesai, sepertinya berjalan dengan baik. Kemudian dia mulai membuat laporan berikutnya dengan menyalin dan memodifikasi semuanya, kemudian yang berikutnya, dan untuk setiap laporan baru yang dia butuhkan rata-rata ~ 1 hari. Sangat mudah ditebak, sekilas ...
Sekarang, setelah 100 laporan "siap", program berjalan ke produksi nyata, dan beberapa masalah terjadi yang diabaikan selama QA. Mungkin ada masalah kinerja, mungkin laporan macet secara teratur, mungkin hal lain tidak berfungsi sebagaimana dimaksud. Sekarang, ketika prinsip KERING telah diterapkan, 90% dari masalah tersebut dapat diselesaikan dengan mengubah basis kode di satu tempat. Tetapi karena pendekatan salin-tempel, masalahnya harus diselesaikan 100 kali, bukan sekali. Dan karena perubahan sudah diterapkan dari satu laporan ke yang lain, dev tidak dapat dengan cepat menyalin-menempelkan perbaikan untuk laporan pertama ke yang lain 99. Dia harus melihat ke dalam semua 100 laporan, membacanya, menerjemahkan perubahan ke modifikasi melaporkan, mengujinya, dan mungkin men-debug masing-masing secara individual. Untuk PM, ini mulai menjadi sangat sulit - dia tentu saja dapat meluangkan waktu untuk perbaikan bug "reguler" (katakanlah, 3 jam) dan kalikan ini dengan 100, tetapi sebenarnya, ini kemungkinan besar perkiraan yang salah, beberapa perbaikan mungkin lebih mudah dibuat daripada yang lain, orang lain mungkin lebih sulit. Dan bahkan jika estimasi ini benar, biaya debugging 100 kali lebih tinggi dari yang dibutuhkan akan membebani Anda banyak uang.
Hal yang sama akan terjadi pada saat berikutnya ketika pelanggan meminta untuk mengubah warna lambang perusahaannya di semua laporan tersebut, untuk membuat ukuran halaman dapat dikonfigurasi, atau oleh beberapa persyaratan baru lainnya yang mempengaruhi semua laporan dengan cara yang sama. Jadi jika itu terjadi, Anda dapat membuat estimasi untuk biaya dan menagih pelanggan 100 kali lipat harga yang harus ia bayar ketika kode telah KERING. Namun, coba ini beberapa kali dan kemudian pelanggan akan membatalkan proyek karena dia mungkin tidak akan mau membayar biaya pengembangan yang selangit. Dan mungkin pada saat itu seseorang akan mengajukan pertanyaan mengapa ini terjadi dan menunjuk dengan jari pada orang yang membuat keputusan untuk pemrograman copy-paste ini.
Maksud saya adalah: ketika Anda menghasilkan perangkat lunak untuk orang lain, Anda selalu setidaknya untuk waktu yang singkat tanggung jawab membuat hal itu berfungsi, memperbaiki bug, menyesuaikan program dengan perubahan persyaratan dll. Bahkan dalam proyek lapangan hijau, ini bagian-bagian dapat dengan cepat bertambah hingga jauh melebihi upaya pengembangan yang direncanakan sebelumnya. Dan terutama ketika semua kode yang Anda salin ditempelkan di dalam satu produk, periode waktu tanggung jawab untuk semua bagian sama, yang sangat berbeda dari situasi di mana Anda menyalin-menempelkan beberapa kode lama dari proyek mati yang tidak lagi dalam pemeliharaan aktif.