Dua metodologi pengembangan perangkat lunak yang dominan adalah air terjun dan lincah. Ketika membahas keduanya, seringkali ada banyak fokus pada praktik-praktik khusus yang membedakan mereka (pair programming, TDD, dll. Vs. spec fungsional, desain besar di muka, dll.)
Tetapi perbedaan sebenarnya jauh lebih dalam, dalam hal praktik-praktik ini berasal dari filsafat.
Waterfall mengatakan: Perubahan itu mahal, jadi harus diminimalkan.
Agile berkata: Perubahan tidak bisa dihindari, jadi buat perubahan murah.
Pertanyaan saya adalah, terlepas dari apa yang Anda pikirkan tentang TDD atau spesifikasi fungsional, apakah metodologi pengembangan air terjun benar-benar layak?
Adakah yang benar-benar berpikir bahwa meminimalkan perubahan pada perangkat lunak adalah pilihan yang layak bagi mereka yang ingin memberikan perangkat lunak yang berharga? Atau apakah pertanyaannya benar-benar tentang praktik seperti apa yang paling berhasil dalam situasi kita untuk mengelola perubahan yang tak terhindarkan?
sumber
Jawaban:
Tentu saja air terjun layak. Itu membawa kita ke bulan!
Dan itu adalah pelatih yang gesit berbicara di sini!
Kecuali Anda dapat dengan jelas mengidentifikasi masalah yang terkait dengan cara Anda mengelola proyek Anda, tidak ada alasan yang sah untuk berubah.
Sebagai alternatif metodologi Agile dan Waterfall , saya akan menyarankan metodologi ANDA . Diadaptasi untuk bisnis spesifik Anda, tim spesifik Anda, produk Anda, cara Anda bekerja, budaya perusahaan Anda ... Itu sebabnya Scrum disebut kerangka kerja sederhana alih-alih metodologi.
Ingin menerapkan metodologi karena seseorang di blog yang Anda sukai membicarakannya sama bodohnya dengan membiarkan masalah terjadi tanpa melakukan apa pun.
sumber
Pertama, saya akan tidak setuju dengan pernyataan Anda:
Interpretasi saya adalah:
Waterfall berkata: Pelanggan tahu apa yang mereka inginkan.
Agile berkata: Pelanggan tidak tahu apa yang mereka inginkan sehingga kami harus membuat beberapa versi berbeda.
Implementasi terbaik "air terjun" yang pernah saya lihat adalah proyek integrasi besar dengan pelanggan finansial yang sangat besar dan ada sekitar 40+ sub proyek yang terlibat. Paket desktop dan situs web yang kami sediakan hanyalah 1 dari 40 sub proyek tersebut. Sementara saya pikir mereka meniup uang orang lain agak berlebihan, mereka memiliki barang-barang mereka bersama dan membuat 40+ kapal yang berbeda semuanya bergerak bersama dalam formasi. Proyek ini ditayangkan pada tanggal target (target bergerak sekali selama proyek) dan sementara saya pikir mereka bisa melakukannya dengan lebih hemat dan gesit, itu dilakukan tepat waktu dan spek. Jadwal go-live night adalah sekitar 100 halaman dan sekitar 40 halaman adalah detail kontak panik darurat dari semua jenis orang yang terlibat. Saya sangat terkesan dengan klien ini.
Atau, Anda bisa melakukan apa yang kita lakukan, yang berlari-lari dan melakukan apa laporan pengaduan / bug terbaru adalah, dan panggilan yang tangkas.
sumber
Anda mulai dengan mengatakan:
Ini salah. Dikotomi ini dibangun oleh komunitas yang gesit untuk menciptakan lawan yang dapat memposisikan diri. Sebelum tangkas dalam mode, orang-orang biasa berbicara tentang berbagai pendekatan berbeda untuk membangun perangkat lunak. Mereka masih ada sampai sekarang, tetapi entah bagaimana mereka sering disatukan menjadi kekacauan besar yang disebut "air terjun" oleh para pendukung lincah.
Saya telah menggunakan OPEN / Metis dan variannya selama lebih dari 10 tahun dengan sukses besar. Jelas tidak gesit, dan jelas bukan air terjun. Ribuan pengembang membuat perangkat lunak yang sangat kompleks untuk pesawat terbang, sistem kritis kehidupan, perbankan, dll. Menggunakan metode yang tidak gesit setiap hari.
Jadi ya, tentu saja ada alternatif untuk gesit.
sumber
Ya, berbagai teknik pengembangan perangkat lunak semuanya layak tergantung pada domain masalah Anda. Ini "Kuda untuk Kursus".
Misalnya, Anda sedang menulis perangkat lunak untuk mengendalikan pembangkit listrik tenaga nuklir atau untuk menggerakkan pesawat ulang-alik NASA. Jenis domain masalah ini mungkin lebih cocok untuk pendekatan air terjun (atau bahkan lebih ketat), Anda ingin menyelesaikan semua masalah di depan jika memungkinkan (atau BOOM!).
Membangun web term marketing 2.0 / 3.0 / buzzy terbaru dari UI? Agile adalah cara yang jauh lebih baik (Anda membutuhkan umpan balik dan perubahan cepat).
Ada apa yang saya sebut prinsip-prinsip pengerjaan perangkat lunak yang masih bisa diterapkan tidak peduli apakah metodologi itu misalnya:
dan lainnya.
Apa pun yang Anda lakukan, jangan dengarkan para fanatik di kedua sisi persamaan, lakukan apa yang tepat untuk Anda, tim Anda, dan domain masalah Anda.
sumber
Masalahnya berasal dari kompleksitas perangkat lunak. Air terjun sangat cocok untuk hal-hal seperti pembangunan jembatan dan pengaspalan karena fisika tidak pernah berubah. Tentu, pada titik tertentu kami akan mengembangkan aspal baru tetapi tidak akan merevolusi cara jalan dibangun. Baja dalam suspensi jembatan adalah ukuran yang tepat, atau tidak. Anda tidak dapat membatalkan atau mematikan proyek konstruksi nyata seperti yang Anda bisa lakukan dengan perangkat lunak.
Perubahan perangkat lunak. Perangkat lunak berubah dengan cepat. Hukum Moore menyatakan bahwa jumlah transistor pada sebuah chip berlipat ganda setiap 18-24 bulan. Secara wajar, jumlah baris kode dalam suatu program juga berlipat ganda. Kompleksitas di antara baris-baris kode karenanya meningkat dengan bigO sesuatu seperti 2 ^ (2t).
Perangkat lunak berubah dengan cepat, dan kompleksitas meningkat secara eksponensial dengannya.
Saat mengendalikan biaya perangkat lunak, Anda ingin mengendalikan faktor eksponensial , bukan hanya multiplikatif atau tambahan. Mengubah kode meningkatkan kompleksitas (dan menjadi kompleks secara eksponensial saat proyek berjalan) dengan cara yang eksponensial.
Perubahan tidak bisa dihindari. Sifat pemrograman memperluas bahasa dengan kelas dan metode kustom, sehingga mengubah bahasa itu sendiri. Anda tidak dapat melakukan itu dalam disiplin teknik apa pun (seperti membangun jalan. Anda tidak menciptakan trotoar baru hanya untuk membuka jalan di kansas di atas california).
Metode agile juga memberi Anda platform untuk menangani rilis dan perbaikan bug di masa mendatang. Anda telah memiliki alat manajemen, proses, karyawan terlatih, untuk mengembangkan perangkat lunak berversi. Dengan metode air terjun, Anda perlu melatih kembali tim Anda untuk menangani perbaikan bug kecil sekalipun.
Lagi pula, 2 sen saya.
sumber
Untuk menjawab pertanyaan, apakah ada alternatif yang layak, untuk perangkat lunak mungkin tidak - atau belum, setidaknya dalam kasus umum. Saya pikir itu turun ke sifat perangkat lunak. Perangkat lunak, sebagai informasi, dapat digandakan secara gratis. Berbeda dengan jembatan atau rumah. Ini berarti, dengan latihan, saya bisa menjadi ahli dalam membangun rumah dan beroperasi dalam domain yang relatif sederhana. Pada titik mana mengapa tidak menggunakan pendekatan sekali pakai?
Tetapi karena perangkat lunak tidak memiliki biaya duplikasi, mengapa Anda melakukan hal yang sama dua kali? Perangkat lunak cenderung menjauh dari manufaktur. Jadi, jika semua perangkat lunak adalah pembuatan produk baru maka kami selalu beroperasi di domain yang kompleks di mana, sampai batas tertentu, kami tidak tahu apa yang kami lakukan. Atau mahal untuk diketahui di muka dan lebih murah untuk mencari tahu dengan melakukan. Dalam domain yang kompleks dan berisiko, saya ingin mencoba eksperimen, peningkatan, dan iterasi.
Pembangkit listrik tenaga nuklir dan sistem fly-by wire sering diberikan sebagai contoh perangkat lunak yang ingin Anda lakukan terjun. Tapi bukankah sistem avionik pesawat ulang-alik dikembangkan secara iteratif? Seperti apakah sistem kontrol lalu lintas udara Kanada dan AS?
Dan jika OPEN / Metis iteratif dan tambahan maka, bagi saya, sepertinya memiliki filosofi lincah bahkan jika itu tidak mengaitkan dirinya dengan praktik lincah umum lainnya.
sumber
Metode Waterfall tentu saja layak dan secara filosofis terdengar seperti pendekatan lain. Ingat bahwa Waterfall telah ada jauh lebih lama daripada Agile, tetapi perhatikan bahwa ini bukan argumen untuk menyatakan apakah satu metodologi lebih baik dari yang lain.
Anda menggunakan metode Waterfall ketika memiliki pemahaman yang sangat jelas tentang seluruh domain masalah dan apa yang ingin dicapai pelanggan dalam paket perangkat lunak. Anda mungkin telah mengutip harga tetap ketika mengambil kontrak, dan pelanggan Anda memahami bahwa mereka tidak dapat menyimpang dari persyaratan yang disepakati. Proses Anda secara ketat adalah proses yang mengalir melalui serangkaian proses sign-off antara berbagai tahap pengembangan, dan sering kali setiap tahap diselesaikan oleh tim yang berbeda - terkadang bahkan perusahaan yang berbeda - yang masing-masing mungkin belum tentu dalam kontak dengan yang lain. Anda sering melihat Air Terjun diterapkan dengan efek yang baik dalam proyek militer dan pemerintah ketika mereka ditenderkan kepada kontraktor luar. Di mana Waterfall dan pendekatan serupa lainnya mendapatkan reputasi buruk adalah ketika pengembang mengalami masalah, seperti estimasi yang buruk, jadwal yang direncanakan tanpa waktu darurat, atau pemahaman domain masalah yang buruk atau tidak lengkap. Masalahnya tidak pernah benar-benar kesalahan metodologi, tetapi dalam penerapannya.
Perbandingan antara Agile dan metodologi apa pun adalah salah. Agile bukanlah metodologi, ini adalah filosofi, atau mungkin akan lebih baik untuk mengatakan bahwa itu adalah istilah umum yang mewakili cara berbeda untuk melihat bagaimana Anda mengembangkan perangkat lunak. Metodologi hanyalah alat, dan karena itu nilainya akan selalu kurang dari individu dan interaksi yang merupakan inti dari apa artinya menjadi Agile .
Setiap peluang untuk meminimalkan perubahan bermanfaat bagi pengembang dan pelanggan. Perubahan dapat menyebabkan jadwal untuk tergelincir, atau fitur yang ditinggalkan untuk memenuhi jadwal. Begitulah cara Anda mengelola efek perubahan yang berdampak pada nilai proyek Anda.
Praktik Anda dapat membantu dalam manajemen perubahan, atau mereka dapat mengabaikan perubahan sepenuhnya. Yang penting adalah kombinasi dari praktik pengembangan Anda, dan pengelolaan hubungan Anda dengan pelanggan Anda, dan apakah hal-hal ini bekerja bersama secara efektif untuk semua pihak yang terlibat.
Kita semua yang untuk semua maksud dan tujuan Agile mengerti bahwa Anda memilih metode yang cocok untuk Anda. Jika Anda menyukai pendekatan tertentu, ikuti itu. Jika tidak sesuai dengan kebutuhan Anda, ubahlah. Bagaimana Anda membuat perangkat lunak benar-benar bermuara pada upaya untuk memanfaatkan sumber daya yang Anda miliki sebaik mungkin, dan meminimalkan praktik-praktik yang dapat mengarahkan proyek Anda menuju kegagalan, dan Anda sering menemukan bahwa Anda perlu mengubah metode Anda agar sesuai dengan proyek tertentu yang sedang dihadapi.
Ini benar-benar satu hal untuk mengatakan "Ok, jadi sekarang kita Agile", dan benar-benar lain untuk benar-benar hidup dan bekerja dengan filosofi Agile. Apakah Anda menggunakan Waterfall, Incremental, Spiral, SCRUM, XP, FDD, atau metode lainnya, pada dasarnya Anda Agile tempat Anda menghargai:
dan di mana Anda membawa alat, metode, dan pengalaman Anda bersama-sama untuk menerapkan nilai-nilai ini dengan sukses.
sumber
Ya, Waterfall, Spiral, Iterative, dan model proses hybrid lainnya semuanya layak, tetapi perubahan tidak bisa dihindari. Proses lebih dari sekedar bagaimana menangani perubahan, dan (saya mengklaim itu) penentu terbesar adalah seberapa baik Anda mengetahui / memahami masalah, dan seberapa akurat Anda dapat merencanakan dan memprediksi.
Menyatakan bahwa "dua metodologi utama pengembangan perangkat lunak adalah air terjun dan lincah" tidak jujur, karena ada spektrum proses pengembangan perangkat lunak, dan banyak perusahaan mensintesis versi mereka sendiri dari model proses, sering berubah untuk proyek tertentu. Ada lebih dari dua pendekatan yang layak untuk pengembangan perangkat lunak. Meskipun Waterfall dan Agile cenderung jatuh pada ujung yang berlawanan dari spektrum "perubahan", masuk akal untuk menentukan metodologi yang bersaing ini sebagai,
Waterfall mengatakan: Perubahan itu mahal, jadi harus diminimalkan.
Agile berkata: Perubahan tidak bisa dihindari, jadi buat perubahan murah.
Tapi itu bukan keseluruhan cerita. Bisnis perlu dapat merencanakan dan memprediksi, tetapi perangkat lunak adalah proses kreatif, dan perkiraan seringkali salah. Ingat segitiga bagus - cepat - murah? Tambahkan dimensi keempat, proses, dan Anda menemukan bahwa upaya mengurangi proses juga dapat menekan jadwal, ketika perkiraan ternyata salah dan proyek berada dalam bahaya keterlambatan. Perangkat lunak adalah proses yang sepadan (dapat berubah), dan Agile, Iterative, Spiral semuanya menawarkan kemampuan untuk memberikan fungsionalitas tambahan dalam interval yang lebih pendek.
Waterfall dan model proses lainnya yang digerakkan oleh persyaratan memiliki kontrol untuk menangani perubahan, sehingga tidak akurat untuk mengatakan bahwa Waterfall meminimalkan perubahan, lebih tepat untuk mengatakan bahwa Waterfall mengenali dan mengelola perubahan, dan mengkomunikasikan dampak dari perubahan itu (karena perubahan menyebabkan dampak jadwal ketika Anda memiliki persyaratan dan desain di muka). Saat Anda sedang membangun produk, atau perlu mendefinisikan persyaratan (fungsionalitas) sepenuhnya, Anda akan diarahkan ke salah satu model hibrid.
Dan ketika perkiraan salah, seringkali proses (kaki keempat dari segitiga besi) dikorbankan untuk memenuhi jadwal.
sumber
Pendekatan tangkas dan air terjun yang matang tidak dapat dibedakan satu sama lain. Asumsi Anda tentang tujuan pendekatan air terjun salah. Mereka berdua memiliki tujuan untuk menghasilkan perangkat lunak yang berkualitas. Ketika Anda tidak memiliki pendekatan pengembangan yang solid untuk perusahaan secara keseluruhan, Anda perlu melihat pendekatan mana yang akan memberikan gesekan paling sedikit untuk adopsi. Pada akhirnya siklus pengembangan singkat, tim QA yang solid, dan bisnis yang mendorong pengembangan adalah apa yang paling penting untuk memproduksi perangkat lunak kedudukan tertinggi.
sumber