Saya telah menggunakan metodologi tangkas (SCRUM) selama sekitar tiga tahun sekarang dan saya melihat keuntungan tertentu untuk itu, terutama dalam umpan balik jangka pendek di berbagai tingkatan (dari pelanggan memiliki akses awal ke fitur yang diimplementasikan, dari penguji yang dapat menguji fitur sebagai segera setelah diterapkan, dari pengembang lain yang dapat memberikan umpan balik sangat awal tentang kode baru melalui ulasan, dll).
Di sisi lain, saya memiliki dua masalah terbuka, yang pertama akan saya coba jelaskan dalam pertanyaan ini.
Masalah: Kesulitan mendapatkan desain yang bagus
Saya mencoba melakukan refactoring segera setelah kode menjadi berantakan, saya menulis unit test sebanyak yang saya bisa (yang memang membantu mencegah bug secara umum dan ketika refactoring pada khususnya). Di sisi lain, mengembangkan beberapa fitur kompleks dengan peningkatan kecil, dengan komitmen harian dan terus menerus memikirkan kembali kode ketika tidak terstruktur tidak memungkinkan saya untuk menghasilkan desain yang sangat bagus.
Satu-satunya modul yang dirancang dengan baik yang dapat saya hasilkan baru-baru ini saya peroleh dengan mengambil pendekatan yang berbeda: Saya menganalisis masalah selama beberapa hari (saya benar-benar memiliki masalah melewati pikiran saya selama beberapa bulan sebelum saya mulai bekerja dengan serius ), membuat sketsa desain yang agak rinci dari semua kelas yang terlibat dan hubungan mereka selama beberapa hari lagi, dan kemudian mengunci diri di kantor saya dan menuliskan seluruh kode dengan bekerja tanpa gangguan selama sekitar tiga minggu. Hasilnya adalah hal terbaik yang saya hasilkan sementara waktu, dengan sangat sedikit bug yang agak mudah ditemukan dan diperbaiki, dan dengan desain yang sangat jelas, yang tidak memerlukan perubahan yang relevan sejak saat itu.
Jadi sampai sekarang saya merasa jauh lebih efektif untuk mendapatkan gambaran keseluruhan tentang apa yang ingin saya lakukan sebelumnya daripada mulai menulis kode dalam peningkatan kecil dengan harapan bahwa gambaran besar secara ajaib muncul dalam proses. Dengan upaya terbaik saya, pendekatan pengembangan peningkatan kecil selalu membawa saya ke desain yang lebih buruk.
Pertanyaan : Adakah yang punya pengalaman serupa? Apakah saya menerapkan SCRUM dengan cara yang salah atau apa yang harus saya perhatikan jika saya ingin mengembangkan sedikit demi sedikit dan masih berakhir dengan perangkat lunak yang dirancang dengan baik? Atau haruskah saya menjadwalkan cerita pengguna desain sebelum memulai pengkodean yang sebenarnya? Apakah ini dianggap praktik yang baik, setidaknya untuk fitur yang lebih kompleks daripada rata-rata?
EDIT - CATATAN
Saya menyadari fakta bahwa desain yang baik bukanlah sesuatu yang absolut dan tidak memiliki nilai sendiri tetapi tergantung pada konteksnya, dan bahwa seseorang harus mengarah pada desain yang cukup baik untuk masalah yang dihadapi.
Misalnya, saya tidak peduli (terlalu banyak) tentang desain yang baik jika saya harus mengimplementasikan komponen sederhana yang (1) harus siap sesegera mungkin, (2) hanya akan digunakan sekali, (3) tidak digunakan oleh bagian lain dari sistem (YAGNI).
Saya sangat peduli dengan desain yang baik ketika komponen (1) akan digunakan beberapa kali dan dalam beberapa rilis produk yang berbeda, (2) perlu dipertahankan dan diperpanjang dari waktu ke waktu, (3) memiliki banyak komponen lain bergantung padanya .
The only well-designed module I could produce recently I obtained by taking a different approach
- Anda menjawab pertanyaan Anda sendiri. Anda masih membutuhkan beberapa desain di muka; Anda tidak dapat mengharapkan desain yang bagus untuk tumbuh secara organik dari refactoring. Tidak berfungsi seperti itu.