Apakah ada keuntungan untuk praktik lincah selain memiliki build yang bekerja di antara sprint?

9

Saya baru-baru ini tertarik pada praktik lincah dalam pengembangan perangkat lunak dan sejak itu saya telah melihat banyak artikel menunjukkan bahwa praktik ini memungkinkan untuk mengurangi biaya keseluruhan.

Logika di balik itu biasanya seperti ini: jika kebutuhan Anda berubah, Anda dapat mencerminkan perubahan ini di sprint backlog berikutnya dan ini akan menyebabkan pengurangan biaya, karena merancang fitur baru dan mengimplementasikannya berdekatan dalam hal waktu, sehingga biaya turun, menurut aturan terkenal bahwa nanti Anda perlu melakukan perubahan pada kebutuhan Anda semakin mahal untuk memenuhi persyaratan itu.

Tetapi proyek perangkat lunak menengah hingga besar itu rumit. Perubahan mendadak pada persyaratan tidak berarti Anda tidak perlu menyentuh bagian lain dari sistem Anda untuk memenuhi persyaratan itu. Dalam banyak kasus, arsitektur perlu dimodifikasi secara signifikan, yang juga berarti Anda harus mengimplementasikan kembali semua fitur yang bergantung pada arsitektur yang lebih lama. Jadi inti dari pengurangan biaya agak hilang di sini. Tentu saja jika persyaratan baru memerlukan bagian independen baru dari sistem, itu bukan masalah, arsitektur lama hanya tumbuh, tidak perlu dipikirkan kembali dan diterapkan kembali.

Dan sebaliknya. Jika Anda menggunakan air terjun dan tiba-tiba Anda menyadari bahwa persyaratan baru harus diperkenalkan, Anda dapat pergi dan mengubah desain Anda. Jika mengharuskan arsitektur yang ada diubah, Anda mendesain ulangnya. Jika tidak benar-benar mengacaukannya tetapi hanya memperkenalkan bagian baru dari sistem, maka Anda pergi dan melakukan semua pekerjaan, tidak ada masalah di sini.

Dengan itu, menurut saya sepertinya satu-satunya keuntungan pengembangan tangkas adalah fitur kerja yang lengkap dibangun di antara sprint, dan bagi banyak orang dan prjects ini tidak kritis. Selain itu, agile sepertinya menghasilkan arsitektur perangkat lunak yang buruk secara keseluruhan, karena fitur-fitur agak saling menampar satu sama lain, tim tangkas hanya peduli bahwa suatu fitur berfungsi, bukan bagaimana kerjanya. Ini tampak seperti itu ketika sistem tumbuh dalam kompleksitas dengan waktu, praktik pengembangan lincah sebenarnya meningkatkan kekacauan dalam arsitektur produk secara keseluruhan, sehingga akhirnya menghasilkan biaya yang lebih tinggi, karena akan semakin sulit untuk memperkenalkan perubahan, sedangkan air terjun memungkinkan Anda untuk menyempurnakan arsitektur Anda sebelum Anda melepaskan apa pun.

Dapatkah seseorang tolong tunjukkan saya di mana saya salah di sini, karena jelas banyak orang menggunakan gesit dalam lingkungan produksi, jadi saya pasti salah di suatu tempat.

tux91
sumber
Anda benar juga. Saya ingin menunjukkan bahwa istilah 'air terjun' tidak memiliki 1 definisi universal (seperti banyak istilah lain di TI). Kebanyakan orang berpikir bahwa Anda tidak diizinkan untuk membuat kode kecuali 2000 halaman persyaratan lengkap ditulis dan ditandatangani. Ini tidak harus menjadi masalah sama sekali.
NoChance
Ya, dengan "air terjun" yang saya maksud adalah proses linear dari spesifikasi fungsional (pada dasarnya) -> desain -> kode antara tonggak, bukan sprint. Dan, tentu saja, persyaratan 2.000 halaman dan spesifikasi teknis tidak harus, tanggung jawab dasar kelas dan hubungannya satu sama lain seringkali cukup sebagai desain tingkat atas.
tux91
3
@EmmadKareem: Sebenarnya, di Waterfall yang tepat, inilah yang terjadi. Anda tidak memulai pengkodean sampai setiap detail desainnya final. Untungnya, Waterfall sebenarnya jarang diterapkan dalam pengembangan perangkat lunak - kebanyakan karena itu tidak benar-benar berfungsi.
Pelaku
1
@tdammers, terima kasih atas komentar Anda. Ini terjadi beberapa kali. Metode air terjun tidak memiliki pemilik dan dapat diterapkan dan diartikan berbeda. Engkau bukan aturan yang mengatakan jangan kode sampai .... atau yang lain ..., ini karena itu bukan metodologi. Ketika dibungkus dalam metodologi yang baik, saya pikir itu masuk akal terutama dalam proyek-proyek di mana pengguna tahu inti dari apa yang mereka butuhkan dari suatu sistem.
NoChance
@Emmad Kareem: Saya setuju dengan Anda. Saya pikir metode gesit lebih cocok untuk proyek-proyek di mana persyaratannya tidak jelas dan banyak prototyping dan umpan balik pengguna diperlukan untuk mendapatkan persyaratan akhir. Di sisi lain ada kasus di mana persyaratan inti jelas dari awal. Dalam kasus ini, saya akan mengadopsi metode pengembangan yang lebih mirip dengan air terjun (dengan beberapa ruang untuk koreksi di sepanjang jalan) daripada metode gesit. Saya pikir itu sangat tergantung pada jenis proyek yang sedang Anda kerjakan.
Giorgio

Jawaban:

7

Pertama-tama, model "air terjun" selalu menjadi tukang jerami yang menggambarkan bagaimana TIDAK menjalankan proyek pengembangan perangkat lunak. Lihat itu.

Bagaimanapun, sebagian besar proyek "air terjun" SDLC memerlukan proses "Manajemen Perubahan", karena ketika orang menemukan bahwa asumsi yang ditulis dalam spesifikasi tidak lagi valid (dan ini selalu terjadi pada proyek kompleks besar). Sayangnya, proses manajemen perubahan dibangun sebagai tindakan penanganan pengecualian, dan sangat mahal, berarti proyek akan berakhir terlambat, atau berkualitas buruk.

Gagasan di balik metodologi Agile adalah bahwa perubahan diberikan - itu akan terjadi. Oleh karena itu, Anda harus membuat operasi standar "manajemen perubahan" daripada penanganan pengecualian. Ini tidak mudah, tetapi orang-orang telah menemukan bahwa jika Anda menggunakan banyak praktik desain yang baik, Anda dapat melakukannya.

Masalah utama lainnya dengan desain front load adalah bahwa (paling sering) begitu banyak waktu dihabiskan dalam pengumpulan persyaratan dan desain, pengembangan dan waktu pengujian menderita. Juga, jika pengujian adalah tahap terakhir, dan masalah serius ditemukan, sangat tidak mungkin untuk diperbaiki dalam kerangka waktu Anda.

Mungkin salah satu fitur terbaik dari pendekatan Agile adalah bahwa ia menuntut interaksi yang berkelanjutan (yaitu, komunikasi nyata) antara tim yang mengembangkan solusi, dan pelanggan yang membutuhkannya. Prioritas dibuat, sehingga item prioritas tertinggi dilakukan terlebih dahulu (dan jika waktu habis, item prioritas rendah yang terpotong). Umpan balik datang dengan cepat.

Kembali ke pertanyaan tentang perubahan dramatis - Anda benar-benar perlu menggunakan metode yang mengurangi perubahan. Kepala sekolah SOLID OO yang baik dapat memainkan bagian yang baik dari ini, karena dapat membangun suite tes otomatis yang solid sehingga Anda dapat menguji perangkat lunak Anda. Anda harus melakukan hal-hal ini terlepas dari metodologi Anda, tetapi mereka menjadi sangat penting jika Anda mencoba untuk menjadi gesit.

Matthew Flynn
sumber
Terima kasih banyak. Untuk semua orang yang ingin membaca tentang bagaimana desain bekerja dengan gesit dan mengapa itu tidak terlalu buruk: http://jamesshore.com/Agile-Book/incremental_design.html
tux91
8

Nah, ada beberapa keuntungan. Yang pertama adalah bahwa pelanggan tidak membaca dokumen spesifikasi. Pernah. Waterfall berasumsi bahwa semua orang akan setuju dengan spesifikasi pada permulaan dan kemudian ketika perangkat lunak dikirimkan kepada pelanggan setahun kemudian dengan spesifikasi yang cocok, mereka akan senang. Dalam praktiknya, pelanggan hanya menemukan semua hal yang benar-benar mereka butuhkan, benar-benar tidak perlu, dan benar-benar perlu menjadi sesuatu yang berbeda ketika mereka secara aktif bermain dengan perangkat lunak itu sendiri. Agile mendapatkan prototipe yang berfungsi di tangan pelanggan, sehingga pemutusan ini langsung tertangkap. Agile bukan hanya tentang bereaksi terhadap perubahan persyaratan. Ini juga tentang memiliki persyaratan perubahan yang terjadi lebih awal, ketika biaya perubahan rendah, bukan pada akhirnya, ketika biaya perubahan tinggi.

Keuntungan kedua adalah bahwa karena Agile sering memberikan hasil yang sangat terlihat, proyek cenderung tidak keluar jalur. Dengan proyek Air Terjun yang besar, terlalu mudah untuk mendapatkan jalan di belakang tanpa menyadarinya. Waterfall menghasilkan pawai kematian multimonth di akhir proyek. Dengan Agile, karena Anda mengirim ke pelanggan setiap beberapa minggu, semua orang tahu persis di mana proyek itu dan slip ditangkap (dan disesuaikan dengan) dengan cepat. Dalam pengalaman saya, Waterfall menghasilkan minggu atau bulan 100 jam minggu pada akhirnya. Agile berarti Anda mungkin harus menggunakan pasangan selama 12 jam di akhir sprint.

Keuntungan ketiga adalah bahwa proyek Agile cenderung lebih memotivasi. Sangat sulit bagi orang untuk memiliki rasa berkendara dalam proyek setahun. Tenggat waktu tampaknya begitu jauh dan kurangnya kedekatan berarti bahwa orang cenderung menunda-nunda, desain yang terlalu terpoles dan sebaliknya tidak bekerja dengan sangat produktif. Ini terutama benar karena bulan-bulan awal dihabiskan untuk hal-hal yang orang tidak suka lakukan, seperti dokumen spesifikasi. Karena Agile selalu memiliki tenggat waktu yang sangat segera dan konkret dalam waktu dekat, orang cenderung lebih termotivasi. Jauh lebih sulit untuk menunda-nunda dengan tenggat waktu yang konkret untuk serangkaian tugas tetap yang akan dijadwalkan minggu depan.

Gort the Robot
sumber
Argumen pertama, untuk itulah saya mendapat kesan lincah. Berurusan dengan persyaratan yang terus berubah. Juga, tentang perubahan persyaratan awal, ini masih memiliki kemungkinan besar mengacaukan arsitektur di tangan, yang mengarah ke penerapan kembali banyak kode yang ada. Argumen kedua, dapatkah Anda menjelaskan mengapa proyek air terjun menyebabkan pawai kematian? Sepertinya sedikit disiplin ditambah dengan spesifikasi teknis singkat dapat melakukan keajaiban di sini. Argumen ketiga, apa masalah dengan membangun proyek air terjun dari bawah ke atas dan bisa membangunnya sesekali?
tux91
2
Pengalaman saya dengan proyek Waterfall adalah bahwa mereka selalu tepat waktu untuk 90% pertama dari waktu yang direncanakan, di mana mereka tiba-tiba berbulan-bulan di belakang. Model Agile yang menekankan demo setiap sprint membuatnya jauh lebih kecil kemungkinannya. Ketika orang tahu mereka akan bertanggung jawab dalam satu setengah minggu, mereka biasanya termotivasi lebih baik daripada ketika mereka akan bertanggung jawab dalam sembilan bulan. Itu hanya psikologi manusia.
Gort the Robot
1
Yah, saya kira saya tidak bisa berdebat dengan pengalaman, meskipun pengalaman saya agak berbeda, dengan desain yang baik dalam hand coding tidak memiliki banyak masalah di sepanjang jalan dan perkiraannya tampaknya cukup bagus juga. Saya masih berpikir bahwa arsitektur yang dihasilkan akan lebih solid jika menggunakan air terjun.
tux91
2
Ada beberapa daerah - sebagian besar orang-orang keamanan-kritis, misalnya, sinyal kereta api, avionik - di mana pelanggan melakukan membaca spesifikasi sangat hati-hati. Mereka cukup langka, dan cenderung mengarah pada metodologi pengembangan yang sangat berbeda.
Donal Fellows
4

Menanggapi kutipan dari pertanyaan, yang merupakan kesalahpahaman mendasar dari lawan anti-gesit

"... sedangkan air terjun memungkinkanmu untuk menyempurnakan arsitekturmu sebelum melepaskan apapun." adalah kesalahan, biarkan saya memperbaikinya untuk Anda; "... sedangkan air terjun memungkinkan kamu untuk menyempurnakan arsitekturmu sehingga kamu tidak pernah melepaskan apapun. "

Implikasi bahwa Waterfall bagaimana memberikan arsitektur kualitas yang lebih tinggi pada dasarnya salah dan sepenuhnya dibantah oleh bukti sejarah empiris.

Jika Facebook dirancang dengan cara air terjun dengan 500 juta pengguna sebagai persyaratan keras dan cepat dan tidak dirilis sampai arsitektur untuk mendukung yang disempurnakan tidak ada yang akan pernah mendengarnya hari ini.

Sama dengan YouTube, Twitter, dan banyak perusahaan lain.

Mereka mendapatkan sesuatu yang dapat disentuh oleh pelanggan dan merespons untuk bekerja dan merilisnya secepat mungkin. Mereka mendapat umpan balik dan memperbaikinya dan merilisnya lagi; pengulangan. Ini adalah bagaimana dalam tiga contoh ini, mereka merespons dengan hanya fitur yang diterima dan diinginkan pelanggan dan membuang waktu sesedikit mungkin pada hal-hal yang pelanggan temukan nilainya sedikit atau tidak sama sekali.

Siapa pun dengan pengalaman pengembangan perangkat lunak yang signifikan selama bertahun-tahun akan setuju bahwa tidak ada arsitektur yang disempurnakan . Hanya satu yang dimulai lebih jauh dari entropi dan bola lumpur besar daripada alternatif lainnya. Agile mengakui hal ini dan memperhitungkannya. Membangun ke dalam proses, ini sebagai hutang teknis, prioritas ulang yang cepat dan refactoring.


sumber
3
Dengan menggunakan kata "tidak pernah", apakah Anda mengatakan bahwa tidak ada produk perangkat lunak di luar sana yang dilakukan menggunakan air terjun? Juga, mengapa "tidak pernah" merilis apa pun jika Anda memiliki seperangkat persyaratan untuk tonggak tertentu yang akhirnya berhasil Anda terapkan?
tux91
1
@ tux91 Anda membuat poin untuk saya; tidak ada yang akan sempurna mengingat bahwa kebutuhan segera berubah setelah desain dimasukkan ke kertas dan usang sebelum satu baris kode ditulis. Jadi pernyataan yang saya kutip adalah kesalahan, Anda tidak akan pernah menyempurnakan arsitektur dan karenanya tidak akan pernah merilis apa pun.
1
@ tux91 masih membaca untuk pemahaman, saya katakan, bahwa tidak ada arsitektur prefek dan jika Anda tidak merilis sampai ada seperti dalam kutipan, maka tidak ada yang akan dirilis. Saya tidak mengatakan apa yang Anda klaim, titik, ini ada di kepala Anda dan interpretasi Anda. Apa yang saya katakan, adalah argumen bahwa air terjun entah bagaimana memberikan arsitektur kualitas yang lebih baik adalah kesalahan dan pada dasarnya cacat. Dan argumen ini tentang NASA dan air terjun dan apa yang tidak; selain tidak terkait dengan programmer , menewaskan 3 astronot, di tanah dalam hal ini, bukan kisah sukses yang bersinar.
1
@ tux91 wrt penggunaan "tidak pernah", saya dengan Jarrod di sini: pertanyaan mengatakan "air terjun memungkinkan Anda untuk menyempurnakan ..." - yang ia balas dengan kata yang benar-benar tepat (dalam konteks "sempurna" yang tidak realistis) "tidak pernah". Satu-satunya alasan saya tidak membenarkan adalah bahwa saya mencoba untuk menghindari pemungutan suara pada jawaban untuk pertanyaan tidak konstruktif
nyamuk
1
@gnat ya saya kira saya tidak berpikir ketika saya menggunakan kata sempurna , itu tidak ingin saya maksudkan sebenarnya
tux91
3

Scrum dengan sendirinya tidak menentukan praktik teknis apa pun karena itu adalah kerangka umum.

Pengembangan perangkat lunak yang gesit membutuhkan keunggulan teknis dari tim. Ini berasal dari mengikuti praktik teknis dari XP (pemrograman ekstrim). Misalnya, Anda harus belajar tentang refactoring, tdd, seluruh tim, pemrograman pasangan, desain tambahan, ci, kolaborasi dll.

Melakukannya seperti itu memungkinkan untuk menangani perubahan dengan cepat dan aman, yang juga merupakan alasan utama untuk menggunakan pengembangan lincah di tempat pertama.

Satu ukuran gesit yang penting adalah jika Anda secara teratur (mingguan, dua mingguan) berhasil merilis perangkat lunak yang berharga dan berfungsi untuk pelanggan Anda. Bisakah kamu melakukan itu? Maka Anda lincah dalam buku saya.

Martin Wickman
sumber
Yang tidak saya dapatkan adalah ini "mungkin untuk menangani perubahan dengan cepat dan aman", karena ini menyiratkan bahwa proyek berbasis air terjun lebih sulit untuk diubah. Mengapa demikian? Itu hanya basis kode. Tentukan apa yang Anda perlu ubah, rancang itu dan bagaimana itu cocok dengan arsitektur, kode, uji, dan rilis yang ada. Hanya saja jangan menyebutnya sprint, sebut saja itu tonggak sejarah. Sepertinya tidak akan memakan waktu lebih lama atau menghadirkan kesulitan lebih dari gesit. Perbedaannya adalah bahwa Anda melakukan perencanaan yang lebih hati-hati tetapi tidak perlu melakukan hal-hal XP dengan ketat.
tux91
@ tux91 Memperbarui jawaban saya. Sedangkan untuk arsitektur, saya sarankan membaca ini atau menonton ini di 26:20 tentang apa yang kita sebut "desain tambahan".
Martin Wickman
2

Bagi saya, manfaat utama gesit adalah mengurangi risiko dalam proyek.

Dengan mengirimkannya secara berulang dan mendapatkan banyak umpan balik dari basis pengguna Anda, Anda meningkatkan peluang bahwa Anda akan memberikan sesuatu yang benar-benar mereka inginkan, dan Anda akan melakukannya dengan secara pragmatis memberikan fitur paling penting bagi mereka sedini mungkin. Secara teori, ini akan dilakukan dengan perkiraan dan perencanaan yang lebih baik. Ini jelas sangat menarik dari perspektif bisnis - jauh lebih dari sekadar bangunan yang dapat dirilis.

Anda bisa berargumen bahwa perubahan yang konstan ini membahayakan sistem Anda dan mengurangi kualitas, tetapi saya akan mengatakan dua hal. 1) Perubahan ini tetap terjadi pada proyek-proyek pengiriman perangkat lunak yang lebih tradisional - itu hanya tidak terhitung dan terjadi kemudian dalam proyek yang ketika, seperti yang Anda tunjukkan, hal-hal lebih sulit dan lebih mahal untuk berubah. 2) Agile banyak bicara tentang berurusan dengan perubahan ini dalam hal menggunakan orang-orang yang termotivasi dan praktik seperti TDD, pairing dan review kode. Tanpa perubahan pola pikir menuju peningkatan kualitas dan terus-menerus, saya menerima bahwa perubahan yang sering dilakukan yang tangkas dapat mulai menyebabkan masalah.

Benjamin Wootton
sumber
Ya, itulah yang saya pikirkan satu-satunya keuntungan dari air terjun. Ada saat-saat ketika Anda tidak ingin menunjukkan produk Anda kepada siapa pun ketika sedang dalam tahap pengembangan, karena itu belum siap, ia belum memiliki nilai jual. Atau jika Anda memiliki ide yang kuat tentang apa yang ingin Anda bangun pada akhirnya. Pengujian, pemrograman pasangan, dan tinjauan kode tidak menjamin Anda akan berakhir dengan arsitektur produk keseluruhan yang baik, tetapi hanya dilakukan untuk menjamin bahwa fitur-fitur baru berfungsi dengan baik.
tux91
1

Dalam banyak kasus, arsitektur perlu dimodifikasi secara signifikan, yang juga berarti Anda harus mengimplementasikan kembali semua fitur yang bergantung pada arsitektur yang lebih lama.

Jika arsitektur Anda perlu dimodifikasi secara signifikan sebagai akibat dari perubahan persyaratan, Anda memiliki arsitektur yang buruk atau persyaratan yang buruk. Arsitektur yang baik memungkinkan Anda untuk menunda sebanyak mungkin keputusan dan memisahkan komponen-komponen sistem Anda. Persyaratan (pengguna) yang baik bukanlah hal-hal seperti "gunakan database yang berbeda".

Jadi, mari kita beroperasi dengan asumsi bahwa kita memiliki arsitektur kerja yang baik. Jika itu masalahnya, maka metodologi pengembangan yang tangkas kehilangan "pencucian" ini dengan metodologi desain besar-muka. Setelah semua, fitur inti dari metodologi pengembangan gesit adalah praktik seperti TDD yang mempromosikan kode kopling longgar, yang memungkinkan proyek untuk melanjutkan dengan kecepatan tinggi apakah itu dekat awal atau sangat matang.

Erik Dietrich
sumber
0

Dalam banyak kasus, arsitektur perlu dimodifikasi secara signifikan, yang juga berarti Anda harus mengimplementasikan kembali semua fitur yang bergantung pada arsitektur yang lebih lama. Jadi inti dari pengurangan biaya agak hilang di sini.

Mengikuti proses yang gesit, ada peluang yang lebih baik untuk menangkap persyaratan ini sebelum terlalu banyak perangkat lunak dikembangkan (Dan perlu diubah.). Ketika Anda pergi beberapa bulan tanpa bekerja dengan klien dan memberi mereka sesuatu untuk dilihat, Anda menangkap masalah arsitektur utama ini hanya setelah Anda "berpikir" Anda siap untuk memberikan.

Saya lebih suka mencoba menerapkan perubahan ini dalam aplikasi yang berfungsi yang memiliki cakupan uji daripada tumpukan kode besar yang bahkan tidak dapat dikompilasi. Saat menjadi kepala dukungan teknis, saya diberikan CD aplikasi yang telah berbulan-bulan pengembangan dan bahkan tidak akan menginstal. Kami bisa menemukan masalah itu pada minggu pertama, tetapi sebaliknya sudah waktunya untuk memesan makan malam karena itu adalah malam yang panjang.

JeffO
sumber