Misalkan Anda harus menulis ulang seluruh aplikasi menggunakan metodologi Agile, bagaimana Anda melakukannya?
Saya kira Anda bisa menulis banyak cerita pengguna berdasarkan perilaku sistem Anda saat ini. Dan kemudian menerapkannya dalam iterasi kecil. Tetapi ini tidak berarti bahwa kita memiliki persyaratan UP FRONT ??
Juga, kapan Anda akan mulai merilis? Agile mengatakan kita harus merilis lebih awal dan sering, tetapi tidak masuk akal untuk melepaskannya sebelum penulisan ulang selesai.
Jawaban:
Hancurkan menjadi epos tingkat tinggi. Ambil setiap area fungsional aplikasi, satu langkah pada satu waktu.
Hancurkan satu epik ke dalam sekelompok cerita (potongan yang dapat digunakan - apa pun yang meningkatkan aplikasi) dan kelola seperti yang Anda lakukan jika Anda tidak memiliki aplikasi yang ada, dengan satu pengecualian: Jika memungkinkan, buatlah sedemikian rupa sehingga Anda dapat dapat mengimplementasikan satu fungsi tersebut sebagai bagian dari, atau bersama, aplikasi asli.
Ketika Agilis mengatakan "rilis lebih awal dan sering", itu tidak berarti produksi. Jika Anda akan mengganti aplikasi yang sudah ada, Anda harus menggunakan area pementasan untuk sering melepaskan, dan pastikan pengguna Anda menguji sistem di sana. Ini masih akan memberi mereka ruang untuk memprioritaskan pekerjaan berikutnya dan untuk memastikan bahwa tidak ada yang Anda lepaskan untuk produksi akan menurunkan nilai produk.
Setelah Anda merilis satu komponen ke produksi, pindah ke yang berikutnya.
sumber
kami baru saja melalui pengalaman seperti itu (saya sebagai pemilik produk scrum). Kami butuh dua tahun untuk mencapai sesuatu yang bisa dirilis. Namun tetap saja, gesit membawa banyak manfaat bagi kami.
Pertama: Menulis ulang total pada dasarnya tidak gesit sama sekali. Sebagai gantinya Anda harus mempertimbangkan refactoring sepotong produk yang ada demi sepotong. Itu telah dibahas dalam pertanyaan lain. Jadi mari kita asumsikan itu harus ditulis ulang.
Kemudian memang, Anda mulai dengan log balik yang mencakup semua kasus penggunaan yang relevan dari produk yang ada. Tapi tolong jangan mendekatinya sebagai spesifikasi penulisan. Itu terlalu detail. Itu harus lengkap (jika tidak, Anda tidak dapat melakukan perencanaan rilis). Dan seharusnya tidak terlalu rumit (jika tidak, Anda sedang menulis spesifikasi di muka). Inilah cara kami mendekati itu:
mengkategorikan pengguna produk lama. Identifikasi pengguna yang hanya membutuhkan sebagian kecil dari produk lama dan masih mendapatkan sesuatu yang bermanfaat darinya. Mereka menentukan epos pertama Anda.
Kemudian tambahkan epos yang memungkinkan kategori pengguna lain pindah ke produk baru. Dll hingga Anda memiliki log balik yang mencakup semua pengguna.
kemungkinan besar, epos-epos ini perlu dipecah lebih lanjut. Jika memungkinkan, cobalah untuk membagi sehingga setiap bagian masih memiliki beberapa nilai. Jika itu tidak layak, maka setidaknya pastikan setiap bagian dapat diperagakan.
ketika Anda memiliki 20-50 epos, mintalah tim memperkirakannya.
pisahkan epos paling top ke dalam User Stories yang menurut tim layak dilakukan dalam sprint. Jangan lakukan itu untuk semua epos, hanya yang ada di atas. Anda akan punya banyak waktu untuk membagi sisanya.
Kapan akan dirilis secara eksternal! Itu adalah keputusan bisnis. Setidaknya pendekatan ini memberi Anda kesempatan untuk merilis lebih awal ke kategori pengguna tertentu. Itu bisa berguna jika manajemen merasa gugup tentang proyek yang tampaknya tidak pernah berakhir ini.
sumber
A total rewrite is by nature not agile at all. You should instead consider refactoring the existing product piece by piece.
Kata yang lebih benar tidak pernah diucapkan.Lepaskan Sekarang Jika Anda Bisa
Pertanyaan Anda tentang kapan Anda mulai mengeluarkan kode itu adalah pertanyaan yang hebat. Saya pikir dua ketentuan berlaku. Pertama, bahwa Anda memiliki "kualitas yang cukup baik", dan kedua bahwa Anda memenuhi persyaratan untuk MVP (produk minimum yang layak).
Roma (dan Agile) Tidak Dibangun dalam Sehari
Mungkin Anda siap dengan tim tangkas turnkey untuk mengambil alih pada hari pertama. Bagi sebagian besar organisasi, ada pekerjaan dan biaya pelatihan, retooling, dan pembentukan biasa, menyerbu, menormalkan, melakukan siklus membangun tim. Jadilah yang terdepan tentang risiko dan biaya, berhati-hatilah untuk menetapkan harapan yang realistis, dan siap dan siap untuk mengadvokasi pendekatan Anda.
Menjadi Bootstrapper Reuse
Seperti kekuatan fusi, penggunaan kembali kode adalah dan akan selalu menjadi solusi masa depan untuk masalah ekonomi kita. Perasaan saya adalah bahwa pengembang sering mengatakan mereka percaya pada penggunaan kembali, tetapi hanya jenis penggunaan kembali yang dimulai setelah mereka membangun kerangka kerja baru, daripada jenis di mana mereka membangun apa yang telah dilakukan orang lain. Bagaimana itu bisa bekerja sampai seseorang mau memilih untuk membangun di atas fondasi orang lain? Paling-paling, itu berarti menulis ulang setiap beberapa tahun ketika kepemimpinan tim berubah.
Mengapa Melepaskan Dini Dan Sering?
Melepaskan lebih awal dan sering kali merupakan mantra karena berbagai alasan. Ini memberi kehidupan pada diskusi kita tentang apa yang harus menjadi produk, itu membuat nyata di mana kita berada, dan itu memberi kita dasar untuk perubahan iteratif / tambahan. Kecepatan rilis cukup invarian untuk gesit, dengan perbedaannya adalah siapa yang menerima rilis (pelanggan pengganti atau pengguna akhir). Sebelum gesit, pemeliharaan diperkirakan mencapai 60% dari biaya sistem perangkat lunak. Ini adalah sumber banyak kekhawatiran bagi para manajer dan lainnya, beberapa yang merasa rilis produk adalah tempat perangkat lunak mati. Bagi mereka, semuanya setelah rilis adalah pengerjaan ulang dan pembayaran untuk memperbaiki produk yang sudah mereka bayar sekali.
Pra-rilis tidak alami
Kent Beck menulis bahwa pra-rilis adalah keadaan yang tidak wajar untuk produk perangkat lunak. Ini tentu saja merupakan waktu yang tidak nyaman karena ini adalah saat ketika Anda tidak memiliki pelanggan dan Anda membayar untuk produk daripada produk yang membayar untuk Anda.
Jangan Mengkritik Tim Sebelumnya
Meskipun mungkin mengatur pengembang yang mengambil alih penulisan ulang sebagai pahlawan dan penyelamatan proyek, saya pikir ada biaya untuk mengkritik prestasi tim sebelumnya.
sumber
Diminta oleh komentar oleh @Chuck dan referensi ke Netscape pada dasarnya mengatakan jangan menulis ulang, dan tanggapan yang sah menjawab bahwa dia OP tidak menanyakan apakah dia harus. - Siklus pengembangan perangkat lunak yang benar-benar gesit mencegah penulisan ulang. Menulis ulang hampir selalu mematahkan banyak prinsip di balik Agile. Menggunakan perangkat lunak saat ini sebagai garis dasar prinsip-prinsip Agile ini (dari Agile Manifesto ) tidak dapat dipenuhi dengan penulisan ulang.
Pertanyaannya didasarkan pada premis yang salah - Bahwa penulisan ulang dapat dianggap Agile.
sumber
Pertimbangkan apakah Anda dapat merilis aplikasi yang ditulis ulang sedikit demi sedikit, dan memilikinya di sisi produksi bersisian dengan yang lama.
Untuk aplikasi web khususnya, mungkin cukup mudah untuk memindahkan satu bagian dari aplikasi ke platform baru, dan meminta permintaan rute penyeimbang beban Anda ke sistem yang sesuai. Kemudian, tulis cerita yang memungkinkan Anda menghasilkan halaman pertama, dan mengirimkannya dengan gesit.
Aplikasi desktop bisa jadi lebih rumit, tetapi seringkali akan mungkin.
Anda sedang mencari jahitan - tempat di mana dimungkinkan bagi sistem lama untuk mengambil alih tanggung jawabnya dengan yang baru, tanpa perlu menulis ulang sepenuhnya.
Mungkin ada beberapa logika bisnis mandiri yang dapat dipindahkan ke layanan web atau kerangka kerja baru, dan aplikasi lama dapat dimodifikasi menggunakannya daripada kode lama. Teruslah mengukir potongan di jahitan sampai apa yang tersisa dapat dikelola semua dalam satu gigitan.
Jika Anda tidak dapat menemukan jahitan apa pun, maka Anda mungkin perlu mencari jenis pendekatan big bang yang disarankan dalam beberapa jawaban lain. Tetapi bersiaplah untuk perjalanan panjang sebelum Anda mencapai tujuan Anda, terutama jika Anda diharapkan untuk terus mengembangkan sistem lama secara paralel ...
sumber
Sebenarnya, IMHO ini adalah titik kunci - semakin awal Anda mendapatkan bagian dari aplikasi yang ditulis ulang dalam produksi (dan idealnya menggantikan fungsi dari sistem lama), semakin besar kemungkinan proyek Anda akan berhasil. Jika Anda pikir ini tidak masuk akal, pikirkan lebih keras - hampir selalu ada kemungkinan untuk melepaskan komponen.
Ini mungkin berarti seseorang harus mengubah sesuatu di aplikasi lama, misalnya, menambahkan beberapa antarmuka baru untuk berinteraksi dengan aplikasi yang ditulis ulang selama waktu penulisan ulang tidak selesai. Tetapi menurut pengalaman saya, pekerjaan tambahan seperti itu selalu bermanfaat untuk dirinya sendiri.
Setelah bagian pertama dari aplikasi baru diproduksi, pendekatan yang gesit dan iteratif akan menjadi jelas. Persyaratan akan berubah, cerita pengguna Anda akan berubah atau mendapatkan prioritas baru, dan mudah-mudahan Anda akan mengganti lebih banyak fungsi dari sistem lama dalam langkah-langkah kecil.
sumber