Apakah Scrum masuk akal ketika menerapkan backend kompiler baru?

15

Saya memiliki bahasa yang sudah ada yang perlu saya porting ke platform baru. Saya mungkin akan mencoba ini dengan mengubah backend dari kompiler yang ada.

Ini adalah sejumlah besar pekerjaan untuk menulis ulang backend. Saya tidak bisa melihat cara memecah ini menjadi cerita yang masuk akal tanpa melanggar kriteria INVEST.

Saya tidak dapat melihat bagaimana setiap cerita dapat dinegosiasikan - semuanya diperlukan untuk kompiler yang bekerja. Semua cerita memiliki prioritas yang sama dan tidak masalah urutan apa yang saya berikan. Saya perlu melakukan semuanya.

Ada beberapa bagian dari perangkat lunak yang saya implementasikan yang memiliki prioritas lebih rendah daripada yang lain dan saya dapat melihat bahwa kami dapat memberikannya secara bertahap. Namun, ada inti penting yang Harus Dimiliki .

Saya berencana untuk mencoba mengikuti Scrum, tetapi apakah saya hanya akan bergerak?

Apakah ada praktik yang direkomendasikan untuk proyek semacam ini?

Dave Hillier
sumber
1
@ Klivvz diperbarui lebih masuk akal?
Dave Hillier
1
Sebagai alternatif untuk scrum, lihat kanban. Mereka berdua gesit, tetapi kanaik AFAIK lebih baik untuk jenis pekerjaan yang Anda lakukan, sementara scrum lebih baik untuk pekerjaan yang dapat dibagi menjadi prioritas yang berbeda.
Izkata
@Izkata Kanban masih mengharapkan antrian masukan yang diprioritaskan, baik berdasarkan nilai atau waktu kedatangan. Proposisi nilai semua-atau-tidak sama sekali adalah pemblokir mendasar ketika mempertimbangkan segala jenis model pengembangan berulang.
CodeGnome
@CodeGnome Hm .. Saya akui tidak melakukan kanban, tetapi saya memahaminya baik untuk memiliki banyak hal yang menyeluruh, seperti yang dijelaskan dalam pertanyaan ini: Jika Anda bekerja untuk setiap kartu di cabangnya sendiri maka gabung ke bagasi ketika itu lengkap, itu satu "iterasi" / rilis. Mereka hanya tumpang tindih satu sama lain, tidak seperti lari cepat dalam scrum.
Izkata
2
Persyaratan tidak akan berubah. Anda tidak bisa percaya itu lagi.
JeffO

Jawaban:

22

Ingatlah bahwa alasan utama proses Agile dibuat adalah untuk mengatasi persyaratan pemindahan gigi. Jika persyaratan ditetapkan (persyaratan yang benar-benar ditetapkan jarang terjadi tetapi saya akan menepati janji Anda di sini!) Maka beberapa praktik terbaik untuk menangani perubahan persyaratan - misalnya cerita yang dapat dinegosiasikan - menjadi agak tidak relevan. Yang mengatakan, mengikuti alur kerja Scrum masih memiliki banyak nilai potensial dalam hal penjadwalan dan memberikan hasil. Meskipun kiriman Anda tidak akan menjadi produk yang sepenuhnya dapat digunakan untuk sementara waktu, masih ada sesuatu yang bisa dikatakan untuk bisa menunjukkan kemajuan kepada pelanggan Anda (dan tim!).

Pertimbangkan bahwa semua cerita 'must have' itu terdiri dari sebuah epik tunggal: "Mampu mengkompilasi di platform X". Dalam hal ini keseluruhan epik perlu diselesaikan sebelum nilai apa pun dikirimkan kepada pengguna, tetapi ini sering terjadi pada awal proyek besar. Mulailah dengan cerita untuk menyusun program yang paling sederhana, kemudian buat cerita lebih lanjut untuk mendukung lebih banyak fitur bahasa.

Di atas segalanya, jangan terlalu terpaku pada upaya untuk memaksa setiap situasi agar cocok dengan pendekatan yang sangat umum. Agile seharusnya bekerja untuk Anda, bukan sebaliknya!

vaughandroid
sumber
1
Persyaratan selalu berubah dan berpikir mereka tidak akan sampai kode ditulis dan disetujui (dengan asumsi mereka yang bertanggung jawab mengikuti aturan) baru saja dalam denile.
JeffO
@ Jeff JF Saya setuju: mengubah persyaratan adalah fitur lincah yang dicari , misalnya itu sebabnya kami memiliki demo.
Sklivvz
1
@ JeffO Jika Anda ingin nitpick, persyaratan tidak selalu berubah, mereka hampir selalu melakukannya. Saya akan mengubah kata-kata saya.
vaughandroid
1
Saya menemukan jawaban ini tidak menyenangkan. "Mulailah dengan sebuah cerita untuk menyusun program sesederhana mungkin, kemudian buat cerita lebih lanjut untuk mendukung lebih banyak fitur bahasa." Tetapi mungkin membutuhkan 6 bulan kerja untuk membangun kerangka kerja bahkan sebelum program terkecil dapat dibangun! Ini bukan jawaban realistis yang menggambarkan penggunaan pendekatan gesit untuk sistem backend.
Dan Nissenbaum
10

Tentu saja Scrum bermanfaat. Ini adalah metodologi yang melakukan dua hal untuk Anda:

  1. Ini memungkinkan proyek Anda untuk beradaptasi dengan perubahan dan
  2. Ini memungkinkan Anda untuk melacak kemajuan, dan mendapatkan ide kapan itu akan selesai

Jadi, ada beberapa nilai dalam menggunakannya.

Saya pikir beberapa prasyarat Anda tidak benar dan di situlah Anda tersesat.

Saya tidak dapat melihat bagaimana setiap cerita dapat dinegosiasikan - semuanya diperlukan untuk kompiler yang bekerja

Ini tidak benar. Anda dapat mendukung subset bahasa dan masih memiliki kompiler yang berfungsi dalam kondisi tertentu. Tentunya kurang berharga dibandingkan kompiler penuh, tetapi tetap bernilai.

Selain itu, Anda salah memahami apa yang dimaksud dengan "Negosiasi": itu tidak selalu berarti "Opsional" dan tidak ada persyaratan bahwa cerita adalah opsional dalam INVEST. Sebuah cerita adalah tujuan yang berharga dan negosiasi tentang bagaimana mencapai tujuan itu. Tentunya akan ada lebih dari cara menerapkan backend dari setiap fitur bahasa. Di situlah Anda membutuhkan negosiasi.

Semua cerita memiliki prioritas yang sama dan tidak masalah urutan apa yang saya berikan.

Ini tidak benar, seperti yang Anda katakan di bawah ini bahwa beberapa cerita tidak "harus dimiliki", jadi tentu saja ada yang kurang berharga. Tetapi bahkan dalam kategori "harus memiliki": beberapa fitur bahasa jauh lebih mendasar daripada yang lain, dan terukur demikian.

Salah satu cara untuk mengukur ini adalah "berapa banyak lagi baris kode yang dapat kita kompilasi pada basis kode yang ada" atau "berapa banyak tes yang lulus" jika Anda memiliki serangkaian tes yang telah ditentukan.

Ada juga opsi lain. Jika Anda mengkompilasi bahasa mirip-C, secara tegas Anda hanya perlu a ifdan gotoloop untuk memiliki (hampir) bahasa fungsional dan Anda dapat mengimplementasikan while, fordan repeatsebagai makro. Dengan asumsi cukup mudah untuk menulis menggunakan precompiler, Anda dapat memiliki solusi sementara murah (hei, apakah kita sedang bernegosiasi? :-)

Mengenai, kemampuan beradaptasi, mendukung bahasa adalah serangkaian persyaratan yang cukup statis, tetapi bahasa juga berubah dan juga pengetahuan Anda tentang perubahan kebutuhan Anda . Apakah Anda perlu mengimplementasikan semuanya? Adakah hal-hal yang tidak Anda butuhkan secara spesifik untuk tujuan Anda? Salah satu penyewa dasar tangkas adalah pengetahuan memiliki pengetahuan yang tidak lengkap, dapatkah Anda memanfaatkannya?

Sebagai kesimpulan, untuk menjawab pertanyaan Anda secara lebih langsung: apakah Anda membutuhkan proses yang gesit ketika persyaratan Anda tidak dapat diubah? Tentu saja tidak! Apakah bisa digunakan? Mungkin iya! Apakah mereka sepadan dengan waktu Anda? Mungkin tidak - tetapi apakah kebutuhan Anda tidak dapat diubah? Dalam pengalaman saya sebelumnya, "persyaratan yang tidak dapat diubah" => "pemilik produk yang malas" - bukan suatu peraturan, tetapi perlu diingat.

Sklivvz
sumber
3
+1 untuk " Ini tidak benar. Anda dapat mendukung subset bahasa dan masih memiliki kompiler yang berfungsi dalam kondisi tertentu. Tentunya kurang berharga daripada kompiler penuh, tetapi masih berharga. " Karena itu menciptakan unit yang dapat diuji dan dapat digunakan sebelumnya akhir pembangunan.
Ross Patterson
2
Dan juga "Satu cara untuk mengukur ini adalah" berapa banyak lagi baris kode yang dapat kita kompilasi pada basis kode yang ada "atau" berapa banyak tes yang lulus "jika Anda memiliki serangkaian tes yang telah ditentukan." - Saya pikir ini penting untuk dapat menunjukkan kemajuan.
Dave Hillier
+1, meskipun satu hal yang saya lewatkan di sini adalah persyaratan untuk kompiler juga dapat dipotong "secara horizontal" alih-alih dengan "mendukung fitur bahasa X". Kompiler mungkin perlu mengoptimalkan hal-hal (persyaratan sendiri), dapat menampilkan informasi debug (persyaratan sendiri), dapat memenuhi beberapa persyaratan kinerja, dan sebagainya.
Doc Brown
Persyaratan @DocBrown tentu saja bisa horisontal, tetapi cerita harus vertikal.
Sklivvz
"Sebagai pengguna kompiler, saya ingin masuk DavesCompiler -O9 program.c, dan hasilnya harus berupa versi program yang sangat dioptimalkan. C (definisi yang lebih formal tentang apa yang dimaksud dengan sangat dioptimalkan)" - terdengar seperti kisah pengguna yang masuk akal bagi saya.
Doc Brown
4

TL; DR

Semua kontrol manajemen proyek menambah biaya tambahan. Jangan tambahkan overhead yang tidak Anda butuhkan.

Scrum Adalah Palu yang Salah Di Sini (Don't Be a Nail)

Scrum adalah kerangka kerja manajemen proyek daripada serangkaian praktik pengembangan yang cocok untuk pengembang individu. Kecuali Anda melakukan manajemen proyek, Scrum mungkin merupakan pilihan yang salah.

Selain itu, saat Anda mengatakan:

Semua cerita memiliki prioritas yang sama dan tidak masalah urutan apa yang saya berikan. Saya perlu melakukan semuanya.

Anda menyiratkan beberapa hal:

  1. Proyek ini memiliki nilai nol kecuali semua cerita 100% selesai.
  2. Kisah-kisah itu tidak saling bergantung satu sama lain.

Jika kedua pernyataan ini benar, maka benar-benar tidak ada gunanya menggunakan kerangka kerja atau praktik yang dirancang untuk memprioritaskan pekerjaan berdasarkan nilai atau urutan ketergantungan.

Alternatif yang Disarankan

Setiap proyek pengembangan berpotensi mendapat manfaat dari beberapa praktik tangkas. Secara khusus, dalam kasus spesifik Anda, saya akan merekomendasikan:

  1. Pastikan semua cerita Anda memiliki "definisi selesai" yang mencakup pengujian unit dan penerimaan.
  2. Integrasikan dan sering refactor; jangan tinggalkan diri Anda dengan tugas integrasi raksasa di akhir proyek.

Selain itu, bahkan jika produk Anda benar-benar memiliki nilai nol kecuali semua cerita selesai, saya akan meluangkan waktu mengelompokkan cerita ke dalam tema yang dapat Anda perlakukan sebagai tonggak yang sudah selesai. Mampu mengatakan "Saya telah menyelesaikan fitur foo" seringkali lebih berguna daripada mengatakan "Saya telah menyelesaikan 23/117 cerita acak." YMMV.

CodeGnome
sumber
1
Saya tidak mengklaim sebagai pengembang individu.
Dave Hillier
@ DaveHillier "Saya memiliki bahasa yang ada ... Saya mungkin akan mencoba ini ... Saya berencana mencoba mengikuti Scrum." Tidak ada yang mengatakan apa pun tentang tim, orang lain, atau kebutuhan untuk manajemen proyek formal. Bahkan jika ada 347 dari Anda yang mengerjakan proyek, jawabannya masih valid jika premis Anda valid. Jika tidak, perbarui pertanyaan Anda dan saya akan melakukan yang terbaik untuk memperbarui jawaban yang sesuai.
CodeGnome
1
Tidak ada orang lain yang membuat asumsi seperti itu. Saya setuju dengan sebagian dari apa yang telah Anda tulis.
Dave Hillier
4
@DaveHillier Saya membaca pertanyaan Anda dengan cara yang sama dengan CodeGnome, bahwa Anda akan menjadi pengembang solo di proyek ini. Penggunaan yang berlebihan Ialih - alih Wemungkin adalah alasannya.
Izkata
Alat yang salah, tidak salah palu. Palu adalah palu, tidak semua masalah adalah paku :-)
Sklivvz
2

Saya memahami kekhawatiran Anda, tetapi saya yakin masih ada nilai bagi Anda dalam menggunakan scrum.

Memang, cerita pengguna jauh lebih pasti daripada dalam aplikasi yang dihadapi konsumen. Sehingga aspek scrum akan memberikan nilai lebih sedikit.

Di mana saya pikir Anda akan mendapatkan nilai adalah dari rilis berulang dan sering . Memiliki produk yang berpotensi dirilis di akhir setiap sprint memaksa Anda untuk menjaga kualitas kode tinggi dan utang teknis rendah. Ini juga merupakan cara yang bagus untuk menemukan cacat sejak dini.

Saya pikir Anda juga akan mendapat manfaat dari mengetahui kecepatan Anda . Setelah beberapa sprint, Anda dapat melihat berapa banyak poin upaya tim Anda menyelesaikan setiap sprint. Ini memberi Anda metrik objektif untuk membantu menentukan tanggal pengiriman Anda.

Yang terpenting, ingat bahwa lincah adalah kata sifat . Pada akhir setiap sprint, Anda harus mengadakan pertemuan retrospektif dan kemudian menyesuaikan proses Anda dengan kebutuhan Anda. Jika ada bagian dari proses scrum yang tidak berlaku untuk pengembangan kompiler, hapus. Jika ada beberapa elemen proses lain yang akan menguntungkan Anda, tambahkan saja. Bagian terpenting dari gesit menurut saya adalah untuk menyadari proses Anda dan terus-menerus memperbaiki situasi spesifik Anda.

(Harap dicatat, saya tidak pernah melakukan scrum pada proyek penyusun; ikuti saran saya dengan sebutir garam.)

epotter
sumber
0

Ya, tentu saja, selama Anda ingat bahwa Scrum bukanlah seperangkat aturan ketat yang harus diikuti. Anda dapat menyesuaikannya dengan proyek Anda. Sprint, standup, scrum mingguan masih akan berguna untuk menumbuhkan komunikasi yang lebih baik antara anggota tim dan memastikan proyek berlanjut ke arah yang dimaksudkan.

Semua cerita mungkin memiliki prioritas yang sama, tetapi Anda harus memperhitungkan kesulitan relatif untuk mengimplementasikannya. Anda tidak ingin menyimpan barang tersulit Anda sampai akhir proyek. Anda akan ingin mulai mengerjakannya sesegera mungkin.

Mchl
sumber
Scrum is not a set of strict rules to follow- Saya pikir itu persis sebaliknya. Bukankah itu hanya memiliki beberapa aturan, tetapi Anda harus menaatinya (misalnya Standup Harian, Definisi Selesai, Story Points)?
Uooo
Apakah Anda menganjurkan ScrumBut ?
Dave Hillier
@ Uooo hanya yang pertama dari tiga yang Anda sebutkan adalah Scrum, sisanya hanya praktik yang baik, tetapi tidak sepenuhnya mendasar.
Sklivvz
@ Klivvz Apakah ini mengapa banyak manajer proyek berpikir "kami melakukan standup harian, jadi kami melakukan scrum" ? Scrum lebih dari sekedar standup harian.
Uooo
1
@ Klivvz oke, sekarang saya mendapatkan apa yang Anda maksud dengan itu :-) Saya pikir Anda maksud hanya melakukan standup sudah scrum.
Uooo