Saya telah menggunakan analogi ini ... banyak proyek perangkat lunak dimulai karena orang yang membutuhkan beberapa perangkat lunak tahu sama dengan "tukang", dan mereka mempekerjakan orang ini untuk membuat mereka perangkat lunak yang setara dengan gudang kebun. Ini adalah aplikasi kecil yang berguna yang melakukan tugasnya dengan sangat baik.
Pelanggan kemudian kembali ke tukang, senang dengan pekerjaan mereka, dan meminta mereka untuk mengubah perangkat lunak untuk melakukan satu hal lagi. Sering kali, fitur baru ini tidak ada hubungannya dengan permintaan asli, jadi hampir seperti mereka meminta Anda untuk membangun kamar lain di belakang kebun dengan pintu masuk yang terpisah.
Kemudian mereka ingin meletakkan lampu di dalam gudang, sehingga mereka memiliki tukang kembali, dan dia menjalankan satu sirkuit dari panel utama di rumah, memasang saklar lampu rantai tarik di langit-langit setiap kamar dan menghubungkan mereka ke sirkuit .
Pelanggan kemudian memutuskan bahwa mereka ingin menjalankan beberapa alat listrik, tetapi itu terus meniup pemutus sirkuit, sehingga mereka memanggil orang itu kembali dan dia benar-benar harus merobek satu rangkaian dia berlari ke panel utama, dan memasang konduktor yang lebih besar dan sebuah sub-panel di dalam gudang. Dia harus menjalankan kawat dua kali, dan membayar dua izin listrik, dll. Ini tidak efisien.
Kemudian klien meminta sesuatu yang absurd: bisakah Anda mengubah kebun saya menjadi garasi? Saya tidak ingin Anda melakukan kembali apa yang telah Anda lakukan ... Saya hanya ingin Anda membuatnya lebih besar sehingga saya dapat memarkir mobil saya di sana. Kemudian, dalam banyak kasus, tukang itu berpikir "pelanggan selalu benar" dan mulai membangun tambahan di 3 sisi gudang untuk membuatnya lebih besar, merobohkan dinding di antara partisi, dll. Tentu saja, atap berakhir melorot karena tidak dibangun dengan benar, dll.
Jadi klien tidak lagi terkesan, tetapi mereka masih menginginkan lebih. Mereka meminta tukang itu berulang-ulang untuk hanya menambah satu ruangan lagi, atau mengubah ruangan yang ada ini untuk melakukan ini, dll. Anda berakhir dengan sesuatu yang terlihat seperti The Burrow dan kira-kira sama secara arsitektur.
Sekarang kebanyakan orang tidak cukup bodoh untuk mencoba ini di dunia konstruksi, tetapi itu terjadi setiap saat di dunia perangkat lunak, karena orang tidak membuat koneksi ini:
Seseorang yang memenuhi syarat untuk membangun gudang kebun yang benar-benar bagus belum tentu memenuhi syarat untuk membangun rumah.
Jika Anda tahu sebelumnya bahwa Anda akan membangun rumah secara bertahap, tetapi itu hanya akan dimulai sebagai gudang kebun, Anda akan melakukan hal-hal yang berbeda dan gudang kebun akan jauh lebih mahal (Anda akan menuangkan pad yang benar-benar tebal, pastikan Anda menjalankan konduktor yang cukup besar untuk muatan penuh rumah jadi, dll).
Dalam banyak kasus, peningkatan dari satu tahap ke tahap lain melibatkan pembatalan banyak pekerjaan yang sebelumnya dilakukan, membuatnya lebih mahal daripada yang seharusnya.
Dalam dunia konstruksi, kami dapat memberikan pelanggan ide yang bagus seperti apa hasilnya selama tahap desain, tetapi kami tidak memiliki kemampuan itu di dunia perangkat lunak. Jika Anda sampai pada titik itu, pada dasarnya Anda telah menulis sebagian besar perangkat lunak.
Agile Manifesto adalah hasil dari pengakuan bahwa analogi perangkat lunak / konstruksi rusak. Hal-hal seperti tes unit otomatis dan siklus rilis berulang tidak memiliki paralel dalam konstruksi. Hal-hal ini mengambil keuntungan dari biaya hampir nol untuk beralih dari desain ke prototipe (kami menyebutnya kompilasi atau bangunan).