Tampaknya pengalaman yang jarang tetapi umum bahwa kadang-kadang Anda sedang mengerjakan sebuah proyek dan tiba-tiba sesuatu muncul tanpa terduga, melemparkan kunci pas besar dalam karya dan meningkatkan kompleksitas banyak.
Sebagai contoh, saya sedang mengerjakan aplikasi yang berbicara dengan layanan SOAP di berbagai mesin lain. Saya membuat prototipe yang berfungsi dengan baik, kemudian mengembangkan ujung depan yang teratur dan umumnya membuat semuanya berjalan dengan baik, cukup sederhana dan mudah diikuti. Ini bekerja sangat baik sampai kami mulai menguji di jaringan yang lebih luas dan tiba-tiba halaman mulai kehabisan waktu karena latensi koneksi dan waktu yang diperlukan untuk melakukan perhitungan pada mesin jarak jauh menghasilkan permintaan batas waktu untuk layanan sabun. Ternyata kami perlu mengubah arsitektur untuk memutar permintaan ke utas mereka sendiri dan menyimpan kembali data yang dikembalikan sehingga dapat diperbarui secara progresif di latar belakang daripada melakukan perhitungan berdasarkan permintaan berdasarkan permintaan.
Detail dari skenario itu tidak terlalu penting - memang itu bukan contoh yang bagus karena cukup dapat ditiru dan orang-orang yang telah menulis banyak aplikasi jenis ini untuk jenis lingkungan seperti ini mungkin telah mengantisipasinya - kecuali bahwa itu menggambarkan cara yang seseorang dapat mulai dengan premis dan model sederhana dan tiba-tiba memiliki eskalasi kompleksitas dengan baik ke dalam pengembangan proyek.
Strategi apa yang Anda miliki untuk menghadapi jenis-jenis perubahan fungsional yang kebutuhannya muncul - seringkali sebagai akibat dari faktor lingkungan daripada perubahan spesifikasi - nanti dalam proses pengembangan atau sebagai hasil pengujian? Bagaimana Anda menyeimbangkan antara menghindari optimasi prematur / YAGNI / risiko rekayasa berlebihan dalam merancang solusi yang memitigasi terhadap masalah yang mungkin terjadi tetapi tidak selalu kemungkinan sebagai kebalikan dari mengembangkan solusi yang lebih sederhana dan lebih mudah yang mungkin sama efektif tetapi tidak menggabungkan kesiapan untuk setiap kemungkinan kemungkinan?
Sunting: Gila Eddie menjawab termasuk "Anda menyedotnya dan menemukan cara paling murah untuk menerapkan kompleksitas baru." Itu membuat saya memikirkan sesuatu yang tersirat dalam pertanyaan tetapi saya tidak secara khusus mengangkat.
Setelah Anda menekan benjolan itu, dan Anda memasukkan perubahan yang diperlukan. Apakah Anda melakukan hal yang akan membuat proyek sedekat mungkin dengan jadwal tetapi dapat mempengaruhi pemeliharaan atau apakah Anda kembali ke arsitektur Anda dan mengerjakannya kembali pada tingkat yang lebih terperinci yang mungkin lebih dapat dipelihara tetapi akan mendorong semuanya kembali selama pengembangan?