Metodologi yang tangkas: cepat dan kotor atau rencanakan dulu?


10

Pertanyaan lincah: apakah lincah percaya untuk menyelesaikan masalah dan menjalankan "cara cepat dan kotor" - atau apakah tangkas lebih suka membangun dengan kokoh dari bawah ke atas? Atau apakah ini bukan pertanyaan tentang metodologi, dan lebih banyak lagi pertanyaan yang Anda evaluasi kasus per kasus?

Secara teknis saya "membuat ulang" fondasi sistem, setelah saya sudah membangun banyak struktur itu sendiri ... itu bukan jumlah pekerjaan yang monumental ... akan tangkas ingin saya untuk menentukan seluruh aliran terlebih dahulu, menganalisisnya, atur, dan kemudian bangun? Saya merasa lebih baik dengan cara ini ... begitu saya memasang sistem yang berantakan saya melihat lebih baik bagaimana itu perlu dilakukan ... di sisi lain itu tidak begitu terorganisir ... hanya ingin tahu apa pengembangan terbaik praktek dalam hal ini.

Saya percaya pertanyaan ini agak berbeda dari Agile dan prototyping karena saya tidak bertanya tentang prototyping dan kode sekali pakai; Saya tertarik pada kelincahan untuk kode tingkat produksi.




7
Saya sudah cukup sering melihat manajer melihat semua waktu pengujian dan perencanaan pada rencana proyek 'tradisional', dan bertanya "Tidak bisakah kita hentikan semua itu dan gunakan Agile sebagai gantinya" ... yang melewatkan titik dengan lebar batas.
JeffUK

1
Ini mungkin bisa membantu. i.redd.it/bxsitfsewho01.png
JeffUK

Jawaban:


46

Metodologi tangkas adalah rencana pertama. Hanya saja tidak merencanakan semuanya terlebih dahulu. Bahkan Anda mengumpulkan persyaratan, desain, kode, uji, penyebaran, dan sekarang. Anda hanya melakukan semua itu dalam waktu kurang dari dua minggu (memberi atau menerima) pada fitur kecil terkecil yang dapat Anda gunakan dan dapatkan umpan balik. Kemudian Anda melakukan semuanya lagi menambahkan fitur lain atau men-tweak yang lama.

Kuncinya adalah menulis kode yang menerima perubahan sehingga ketika Anda akhirnya melihat "bagaimana seluruh aliran harus berjalan" Anda dapat mengubah kode untuk melakukan itu. Dengan begitu ketika "jalannya aliran harus pergi" (atau apa pun) berubah lagi, itu tidak traumatis.

Anda tidak dapat menulis dengan cepat dan kotor. Cepat dan kotor memberi Anda kode ridgid. Jadilah cepat dengan bekerja kecil. Tetap fleksibel dengan tidak menyebarkan pengetahuan . Idealnya setiap perubahan fitur tunggal harus memengaruhi hanya satu tempat dalam kode.

Anda tidak dapat menghabiskan banyak waktu untuk melakukan apa pun selain merencanakan. Anda dapat merencanakan tetapi Anda harus dapat mengubah rencana tersebut. Anda perlu dengan cepat menemukan alasan untuk mengubah rencana. Ketika perencanaan berjalan dengan lancar, tanpa kejutan untuk dipelajari, saat itulah perencanaan telah berjalan terlalu lama. Perencanaan dan pengkodean harus terjadi berdekatan. Jika Anda belajar maka semakin tua rencananya, itu adalah bodoh.

Dalam jangka panjang, Anda harus merencanakan untuk menjadi lebih pintar. Tulis kode yang fleksibel. Maka semakin pintar tidak menyebabkan penyesalan.


1
+1, tetapi saya ingin membuat catatan khusus bahwa "fleksibel" tidak selalu berarti "abstraksi lebih banyak." Salah satu cara untuk meningkatkan fleksibilitas adalah memastikan kode dapat didekati (mudah dibaca, mudah dimengerti).
jpmc26

1
Tidak, cara "berpura-pura lincah" Modern adalah tentang perencanaan. Lincah nyata adalah tentang iterasi dan peningkatan cepat dan kotor dan konstan. Anda mulai dengan sesuatu yang bekerja (ish) dan kemudian beralih untuk membuatnya lebih baik. jenis perencanaan dengan lincah yang Anda advokasi hanyalah cara untuk mengatakan "banyak air terjun".
gbjbaanb

5
+1 Agile adalah tentang melakukan perencanaan yang cukup untuk merasa nyaman menulis kode yang fleksibel dan bertanggung jawab. Lagi adalah pemborosan sumber daya. Ini bukan "tidak ada perencanaan", dan itu bukan "merencanakan segalanya", tetapi di suatu tempat di antara keduanya.
Eric King

23

Saya tidak suka bahwa bagi kebanyakan orang itu "cepat dan kotor" atau "desain besar di depan". Mereka bahkan tidak mempertimbangkan ada pilihan lain.

Agile adalah tentang membangun suatu sistem, di mana perubahan, bahkan di akhir pengembangan, adalah sepele. Ini dilakukan dengan membangun perangkat lunak dalam potongan-potongan kecil yang bertahap, dan mengunci perilaku bongkahan-bongkahan tersebut dengan tes otomatis yang kuat. Dan menggunakan sering, penyebaran otomatis ke dalam produksi untuk memvalidasi nilai dari perubahan itu.

Dengan memiliki tes otomatis yang kuat, menjadi sepele untuk mengubah bahkan bagian tersulit dari arsitektur, dengan menambah refactoring dalam periode waktu yang lebih lama. Jadi, bahkan jika Anda menyadari arsitektur Anda dapat dilakukan dengan lebih baik di tengah proyek, secara realistis dimungkinkan untuk melakukan perubahan relatif cepat.

Beberapa orang mengatakan bahwa "beberapa desain di depan" bagus dengan lincah. Tetapi jika Anda berniat untuk beralih pada desain ini sesudahnya, Anda masih perlu memastikan budaya pengembangan Anda menghasilkan sistem yang mudah diubah. Jadi "SDUF" tidak membatalkan kebutuhan untuk pengujian yang kuat, refactoring agresif dan penyebaran berkelanjutan.

Dengan membangun "kemudahan perubahan" ke dalam sistem, Anda tidak perlu berpikir keras tentang desain awal proyek Anda, karena itu dapat diubah nanti. Pendekatan "Cepat dan kotor", kebanyakan orang menyebutnya "lonjakan", hanya dapat digunakan jika Anda menstabilkan fitur yang Anda anggap berharga. Tetapi Anda tidak boleh meninggalkan potongan kode yang diretas terlalu lama di basis kode Anda, karena memperlambat perubahan.


6

Tidak juga.

Ini "Mulai sederhana dan tingkatkan selagi Anda bergerak".

Cepat dan kotor rapuh, tetapi cepat (jika proyek cukup kecil dan berumur pendek).

Rencana pertama adalah kaku, tetapi stabil (jika proyek selesai sebelum mengalami kendala keuangan atau temporal).

Agile adalah alternatif ke 2 di atas. Ini bergantung pada pendekatan berulang di mana fitur diselesaikan satu per satu, fitur demi fitur, dan pengetahuan yang diperoleh saat menyelesaikan bagian-bagian yang berfungsi penuh dari program ini digunakan untuk menyempurnakan dan menyesuaikan rencana seiring perkembangan pembangunan. Untuk melakukan itu, Anda perlu perencanaan di muka - Anda memerlukan setidaknya perencanaan yang cukup untuk dapat memperkirakan berapa banyak pekerjaan yang diperlukan fitur individual - tetapi karena gesit mengharapkan perubahan, perencanaan yang berlebihan menyebabkan pemborosan.


2

Salah satu karakteristik utama Agile adalah melakukan iterasi singkat dan menilai kembali. Anda berlari ke depan untuk menjelajahi wilayah baru, belajar darinya, dan kemudian membuat rencana. Dengan begitu rencana Anda akan lebih baik. Dan jika Anda gagal (menemukan ide kursus Anda tidak berhasil), Anda akan "gagal cepat", yang bagus.

Jadi pendekatan Anda baik-baik saja. Bahayanya adalah mengatakan, "Bagus, berhasil, saya sudah selesai. Apa selanjutnya?". Anda belum selesai, ada banyak jalan pintas untuk diluruskan dan Anda harus mendapatkan / meluangkan waktu untuk melakukannya dengan benar begitu jelas pendekatan Anda menghasilkan sistem yang berfungsi dan bisa diterapkan. Itu bisa berupa menulis tes, mendokumentasikan, StyleCop, mengoptimalkan, mendidik kolega tentang apa yang Anda lakukan dan bagaimana Anda melakukannya, memeriksanya, dll.


1

Untuk menambah jawaban di atas, prinsip utama adalah YAGNI . Jika desain dan perencanaan awal Anda memungkinkan langkah selanjutnya, baik-baik saja. Tetapi jika itu memungkinkan langkah hipotetis masa depan yang Anda tidak dapat membuktikan diperlukan, maka anggaplah YAGNI.

Banyak desain, baik dari atas ke bawah dan dari bawah ke atas, mengasumsikan bahwa akan ada penggunaan kembali kode yang signifikan. Pengalaman mengatakan bahwa penggunaan kembali kode itu tidak umum, karena Anda jarang memecahkan masalah yang sama persis. Jika Anda perlu untuk memecahkan varian dari masalah itu di masa depan, refactor desain Anda di masa depan untuk menambah varian itu, tapi jangan tidak menganggapnya sekarang.

Dengan kata lain, rencanakan tugas segera, tetapi jangan rencanakan apa pun lebih jauh ke depan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.