Saya pikir pertanyaan ini adalah inti dari pertanyaan siklus hidup lincah vs air terjun.
Jika Anda tangkas, premis dasarnya adalah bahwa kode yang digabungkan dengan interaksi pengembang dekat lebih baik dan lebih cepat daripada spesifikasi terperinci. Tim memprioritaskan merilis fitur-fitur baru dan berkualitas tinggi di atas hal-hal lain - seperti mekanisme komunikasi formal seperti spesifikasi desain terperinci. Tapi ada perdagangan di sini - Anda harus memiliki saluran komunikasi antara anggota tim yang memungkinkan mereka bertanya tentang nuansa dan maksud desain rinci ketika mereka membutuhkannya.
Jika Anda melakukan air terjun, Anda bekerja dengan asumsi bahwa pekerjaan mengisi kode di bawah desain terperinci dan kemudian mengujinya adalah signifikan. Dan Anda ingin memberi para pemangku kepentingan wawasan awal tentang bagaimana pekerjaan ini akan dilanjutkan dan akan seperti apa saat itu dilakukan. Itu mungkin memeriksa desain dengan pelanggan untuk memastikan Anda telah menemukan fitur yang masuk akal. Mungkin juga untuk memeriksanya dengan para ahli di arena lain - seperti ulasan keselamatan, ulasan keamanan, dan ulasan oleh anggota tim yang harus berintegrasi dengan kode Anda. Asumsinya adalah bahwa ulasan ini akan menghemat waktu dalam jangka panjang karena mereka akan menyelamatkan Anda dari menyelidiki sejumlah besar waktu dalam mengembangkan hal yang salah.
Akhir-akhir ini, saya telah melihat beberapa perpaduan yang sangat bagus antara desain rinci dan alat kode komentar - JavaDoc misalnya. Karena sebagian besar desain terperinci adalah cetakan kaki kode dan penjelasan singkat tentang apa yang akan dilakukan - ini kurang lebih sama dengan yang Anda harapkan sebagai komentar kode. Jadi memiliki alat yang akan mengubah komentar kode menjadi spesifikasi desain terperinci sangat bagus - cara yang jauh lebih baik untuk tetap up to date daripada melakukannya dengan tangan.
Saya percaya bahwa penilaian yang tidak akurat tentang bagaimana desain rinci harus untuk proyek , merupakan faktor utama dalam pertumbuhan biaya. Bagian terburuknya adalah Anda dikutuk jika Anda melakukannya dan terkutuk jika Anda tidak:
- Jika desain Anda terlalu rinci untuk ukuran tim, kompleksitas pekerjaan, dan persyaratan gerbang yang harus Anda lalui (ulasan keamanan, ulasan keselamatan, dll.), Maka Anda telah membuang-buang waktu dan uang yang berharga untuk artefak yang tidak akan pernah Anda gunakan.
- Jika desain Anda tidak cukup detail, Anda akan membuang-buang uang karena anggota tim membuat asumsi yang tidak benar yang mengarah ke masalah integrasi, dan Anda berisiko pengerjaan ulang yang berat ketika audit keamanan atau keselamatan final mengungkap masalah yang bisa diperbaiki lebih awal dan murah jika mereka telah melakukannya. aspek desain yang jelas sebelum implementasi.
Saya tidak merasa ini kasus hitam dan putih - mungkin ada banyak waktu di mana beberapa komponen "cukup baik" jika dirancang pada tingkat tinggi, sementara yang lain membutuhkan pekerjaan rinci yang ketat. Dan lingkungan tim atau proyek yang berubah dapat menentukan kebutuhan desain baru ketika sebuah proyek berkembang.