Kerugian dari cerita pengguna vertikal

9

The pendekatan tangkas adalah struktur pekerjaan ke dalam cerita pengguna vertikal dan memberikan sepotong terfokus tapi berfungsi penuh dari aplikasi dari end-to-end . Karena ini adalah pendekatan baru untuk membangun perangkat lunak, saya membaca banyak literatur tentang mengapa ini lebih baik daripada cerita horisontal tetapi saya tidak menemukan banyak tentang kelemahan dari pendekatan ini.

Saya sudah meminum bantuan dingin yang gesit dan saya juga setuju bahwa mengiris kue secara vertikal memiliki banyak keuntungan daripada mengiris horizontal. Berikut adalah daftar singkat kerugian yang bisa saya buat:

  • Pengembang awalnya mungkin lebih lambat dalam mengimplementasikan fitur karena ia harus memahami semua teknologi yang diperlukan untuk mengembangkan cerita (UI + lapisan layanan + akses data + jaringan, dll ...)
  • Desain arsitektur secara keseluruhan (menentukan tulang punggung aplikasi) tidak benar-benar cocok dengan mantra ini (namun beberapa orang mungkin berpendapat bahwa itu adalah bagian dari kisah pengguna untuk mengembangkan / mengubah arsitektur keseluruhan)

Apa lagi kelemahan dari kisah pengguna yang mengiris secara vertikal?

Catatan: Alasan saya mengajukan pertanyaan ini sekarang adalah karena saya akan berusaha meyakinkan tim untuk mulai menulis cerita dengan 'cara vertikal' dan saya ingin dapat mengemukakan kemungkinan trade-off sebelumnya sehingga mereka menang. akan menganggap pendekatan itu gagal ketika mereka dihadapkan dengan kelemahan.

c_maker
sumber
Saya tidak mengerti bagaimana dua poin yang Anda cantumkan adalah kerugian. Anda mengatakan mungkin lambat, tetapi sama-sama mungkin tidak. Apa yang Anda maksud dengan keseluruhan arsitektur tidak sesuai? Sekali lagi mungkin lebih cocok.
Dave Hillier
@DaveHillier: Diucapkan sedemikian rupa di mana itu adalah kerugian. Sebagai contoh, bisnis mungkin berpikir bahwa waktu implementasi yang 'lambat' adalah kerugian.
c_maker
Apakah Anda mencoba mengatakan bahwa bisnis menganggapnya lebih lambat?
Dave Hillier
Apakah "irisan vertikal" pada dasarnya sama dengan "kepedulian lintas sektoral"?
Robert Harvey
1
Ada artikel yang sangat bagus tentang Horizontal dan Vertical User Stories yang menjelaskan secara rinci tentang kelebihan dan kekurangan masing-masing, di sini: deltamatrix.com/...
Robert Harvey

Jawaban:

7

Saya tidak tahu ada kerugian jangka panjang. Dalam jangka pendek, dan bagi tim yang baru dalam pengembangan semacam ini, kelemahan utamanya adalah dibutuhkan beberapa waktu untuk membiasakan diri dan beberapa pembelajaran.

Cara paling efisien untuk bekerja secara vertikal adalah dengan memiliki pengembang penuh: dengan cara ini sebuah cerita biasanya dapat dieksekusi oleh satu orang (atau lebih dari satu tetapi tanpa tugas pipelining ). Jelas ini mensyaratkan bahwa pengembang bekerja secara vertikal di seluruh tumpukan (dari html ke basis data dalam kasus aplikasi web).

Jika tim Anda tidak terbiasa mengerjakan cerita vertikal, maka mereka kemungkinan besar akan melakukan hal yang sebaliknya: setiap orang hanya akan memiliki pengetahuan tentang satu lapis / lapis aplikasi saja. Saat Anda memperkenalkan cerita vertikal, Anda dapat mengharapkan tim untuk membaginya menjadi tugas yang sesuai dengan lapisan dan kemudian mendistribusikan tugas ke orang yang berbeda. Ini akan sangat tidak efisien.

Pendekatan terbaik yang dapat saya berikan mengenai hal ini adalah mentolerir pipelining ini pada awalnya sambil menjelaskan bahwa tujuan jangka panjangnya sama sekali berbeda. Mintalah anggota tim lintas program pasangan lapisan untuk membangun kepercayaan dan pada akhirnya memungkinkan orang untuk benar-benar mandiri.

Saya tidak setuju dengan jawaban lain bahwa pendekatan ini membawa hutang teknis. Itu bisa, tetapi begitu pula pendekatan lain.

Sklivvz
sumber
Saya akan mencoba memasangkan pemrograman. Ini akan memungkinkan orang untuk mendapatkan pengetahuan tentang domain lain yang mereka butuhkan dan membantu menghindari pipelining.
user99561
7

Saya sudah memikirkan pertanyaan yang tepat ini.

Saya pikir penting untuk membedakan antara mengiris berdasarkan tanggung jawab individu vs mengiris tanggung jawab tim. Saya akan memfokuskan jawaban ini terutama pada mengiris tim.

Untuk beberapa latar belakang: Saya telah bekerja dalam proyek-proyek dengan pengembang tumpukan penuh, pengembang lapis tunggal, tim vertikal (tumpukan penuh), tim horisontal (lapis tunggal), dan tim diagonal. Maksud saya dengan tim diagonal yang memuat semua tingkatan yang diperlukan untuk sebuah cerita tetapi tidak harus semua tingkatan dalam sistem, dan juga mungkin berisi beberapa pengembang yang berfokus pada tingkatan yang sama; dengan kata lain vertikal dalam roh tetapi mungkin agak horizontal dalam penampilan atau detail implementasi.

Baru-baru ini saya telah bekerja dalam kelompok yang beralih dari tim horisontal ke tim diagonal (hampir vertikal). Sangat instruksional untuk melihat kelompok orang yang sama menyelaraskan dua cara yang berbeda. Itu membuat beberapa kelebihan dan kekurangan cukup jelas.

Saya akan mengumpulkan pendapat saya sejauh ini dengan perbandingan ringkasan berikut:

Tim Horisontal

Keuntungan:

  • Memupuk pemisahan kekhawatiran yang baik dan tingkatan yang longgar
  • Manajemen distribusi beban kerja yang jauh lebih mudah
  • Mudah untuk memimpin teknis spesialis untuk dikelola
  • Memupuk kolaborasi intra-tier, praktik terbaik, kebanggaan, dan budaya keunggulan
  • Sejalan dengan pola komunikasi alami / muncul

Kekurangan:

  • Dapat menyebabkan isolasi tingkat dan dengan demikian menghambat komunikasi antar tingkat
  • Mengaktifkan budaya "gelembung" tingkat jika tidak dikurangi
  • Sulit mengambil keuntungan dari kepemimpinan generalis
  • Hinders generalis

Tim Vertikal / Diagonal

Keuntungan:

  • Semua bagian dari kisah pengguna dalam satu tim ("one stop shop")
  • Secara khusus membantu menyampaikan cerita n-tier dalam satu sprint (walaupun Anda benar-benar membutuhkannya?)
  • Memupuk kolaborasi inter-tier dan pertumbuhan keterampilan generalis
  • Mendukung generalis

Kekurangan:

  • Manajemen distribusi beban kerja yang jauh lebih sulit
  • Memungkinkan pemisahan keprihatinan yang buruk dan tingkatan yang sangat erat
  • Menghindari spesialisasi dengan membatasi komunikasi intra-tier; sulit untuk melihat bagaimana budaya keunggulan dapat muncul dari struktur ini tanpa menambahkan perilaku horizontal / spesialis yang meringankan

Saya tidak berpikir keanggotaan tim memiliki solusi satu ukuran untuk semua. Tampaknya cukup mudah, bahwa tim vertikal berbaris lebih baik untuk organisasi yang membutuhkan generalisasi. Jika insinyur Anda adalah generalis dan suka bekerja dengan tumpukan penuh, itu alasan yang cukup bagus untuk mempertimbangkan tim vertikal. Tim horizontal berbaris lebih baik untuk organisasi yang membutuhkan spesialis. Jika insinyur Anda adalah spesialis, itu alasan yang cukup bagus untuk mempertimbangkan tim horizontal.

Seperti yang disebutkan orang lain, struktur / perilaku sekunder yang mengiris arah lain dapat membantu mengurangi kelemahan dari kedua sistem. Salah satu faktor mitigasi yang menarik adalah durasi sprint. Sprint pendek membuat beberapa kelemahan tim horisontal lebih dapat ditoleransi. Jika Anda dapat membuat backend minggu ini dan frontend minggu depan, itu mungkin cukup cepat?

Untuk menerapkan beberapa prinsip yang diusulkan ini ke masalah dunia nyata ... Saya akan mengatakan bahwa irisan horizontal telah bekerja dengan sangat baik untuk tim pengembangan SaaS yang sangat nyata yang telah saya kerjakan yang memecahkan masalah teknis yang sangat menantang di setiap tingkatan ( di mana spesialisasi menurut saya sangat penting), di mana frekuensi pengiriman (dan keandalan pada granularitas / frekuensi tinggi) sangat penting untuk keberhasilan bisnis. Harap dicatat bahwa kesimpulan ini adalah untuk tim dunia nyata yang sangat khusus, bukan pernyataan umum tentang keunggulan pengirisan horizontal.

Satu peringatan: Saya mungkin bias terhadap keyakinan memercayai kemampuan generalis oleh individu mana pun di dunia pengembangan perangkat lunak modern tanpa bukti signifikan, meskipun saya telah mengenal beberapa generalis langka yang luar biasa. Saya merasa bahwa generalitas adalah tatanan yang tinggi (vertikal?) Memang, terutama karena setiap tingkat tumbuh dalam kompleksitas dan dengan proliferasi bahasa / platform / kerangka / penyebaran alternatif, masing-masing memenuhi kebutuhan yang berbeda. Hari-hari ini terutama, jack dari semua perdagangan dapat dengan mudah menjadi master of none. Juga, secara anekdot, saya menemukan sebagian besar individu ingin mengkhususkan diri sedikit, sekali lagi dengan beberapa pengecualian.

Akan
sumber
Analisis Anda di sini hebat, dan sesuai dengan apa yang saya alami. Saya sedikit tidak setuju bahwa tim horisontal dapat "menghalangi komunikasi dari ketergantungan antar-tingkat": Saya akan mengatakan bahwa pemisahan horisontal membuat kebutuhan untuk kontrak yang jelas antara tingkatan menjadi jelas dan jelas. Anda mencatat di sisi yang berlawanan bahwa tim vertikal dapat mengarah ke tingkatan yang sangat erat. Akhirnya, saya setuju bahwa klaim kemampuan generalis hampir selalu dibesar-besarkan (setelah melihat banyak desain back-end yang benar-benar mengerikan yang dibuat oleh "generalis" yang benar-benar harus berpegang pada front-end).
SebTHU
Poin bagus, @SebTHU. Kata-kata dari peluru pertama saya tentang kerugian Tim Horisontal pada "komunikasi yang menghalangi ..." tidak jelas. Saya bermaksud menunjukkan bahwa Tim Horisontal berpotensi menyebabkan isolasi antara tingkatan dan dengan demikian menghambat komunikasi antar tingkat. Namun untuk titik Anda, itu dapat bersinar terang pada kebutuhan kontrak yang jelas dan memang menjadi fungsi pemaksaan untuk mendapatkan kontrak yang ditentukan dengan benar. Saya telah memperbarui bagian dari jawaban saya untuk menjelaskan maksud saya.
Will
@Apakah "Manajemen distribusi beban kerja yang jauh lebih sulit" berdasarkan apa? Seorang lelaki menarik satu cerita dan memasang semua potongan tampaknya sangat mudah dan efisien bagi saya. "Memungkinkan pemisahan keprihatinan yang buruk dan tingkatan yang sangat erat" yang mengatakan ini lebih mungkin di tim vertikal vs yang hoz? Jika tim Anda disiplin (yang menurut saya diperlukan dari kedua jenis tim) maka ini seharusnya tidak menjadi masalah.
cottsak
6

Kelemahan besar yang saya temukan adalah sulitnya bagi tim untuk membangun aplikasi mengikuti pendekatan arsitektur terpadu.

Pada tahap awal proyek, semua orang akan menulis layer mereka sendiri. Cerita-cerita (dan lapisan yang terlibat) akan bekerja, tetapi ketika melihat kembali produk yang disampaikan di sprint-end, akan mudah untuk melihat sedikit perbedaan antara ide-ide arsitektur masing-masing pengembang.

Hal semacam ini tidak bisa dihindari, tetapi bukan penghalang. Saya sudah mencoba untuk melawan ini dengan dua cara:

  1. Lakukan diskusi desain yang panjang dengan tim sebelum mengimplementasikan setiap cerita
    • Ini cepat melelahkan. Sering kali terlalu dini bagi siapa pun untuk mengambil keputusan yang tepat dan Anda akhirnya hanya berdebat tentang hal-hal yang harus diubah.
  2. Maju dan berkembang dalam isolasi relatif, dengan mengingat bahwa Anda sedang membangun hutang teknis .
    • Kuncinya di sini adalah mencatat utang teknis (arsitektur) sebagai masalah. Ini adalah sesuatu yang perlu dibayar kembali.
    • Setelah beberapa sprint, akan lebih mudah untuk memutuskan arsitektur yang koheren dan terpadu. Ini adalah saat Anda harus meminta sprint pengerasan untuk mengembalikan sebagian hutang teknis Anda (refactor kode yang ada). Atau, Anda dapat membayarnya sedikit demi sedikit selama iterasi proyek berikutnya.

Satu-satunya masalah lain yang bisa saya pikirkan selain itu adalah bahwa biasanya ada banyak kode boilerplate untuk ditambahkan pada awal proyek. Menulis cerita irisan vertikal berarti kecepatan tim pada beberapa cerita pertama akan secara artifisial rendah karena pelat baja prasyarat ini ... tetapi selama semua orang menyadari bahwa ini hanya akan mempengaruhi beberapa sprint pertama maka semuanya baik-baik saja.

MetaFight
sumber
2
Bagaimana setelah bekerja secara mandiri Anda membangun utang teknis? Sepertinya tidak harus demikian
Sklivvz
Ini belum tentu demikian, tetapi hal itu meningkatkan kemungkinannya. Ambil duplikasi kode misalnya. Jika beberapa istilah domain teknis tidak dipadatkan, namun dua pengembang mungkin menulis fungsionalitas yang sama di dua kelas terpisah. Satu-satunya perbedaan adalah bahwa satu dev menyebutnya WobbleAdapterdan yang lainnya a WibbleConverter.
MetaFight
3
Anda tidak menjelaskan mengapa masalah ini lebih mungkin terjadi ketika membagi pekerjaan berlapis-lapis atau vertikal. Dan mengapa Anda harus menulis banyak boilerplate di iterasi pertama? Kedengarannya seperti YAGNI
Dave Hillier
Maaf, kurasa boilerplate adalah istilah yang salah. Yang saya maksudkan adalah karena sebagian besar kelas infrastruktur proyek perlu dibuat dalam beberapa sprint pertama, ada satu overhead yang terlibat.
MetaFight
1
Dan membagi pekerjaan dalam irisan vertikal berarti setiap cerita menyentuh lebih banyak lapisan. Ini meningkatkan kemungkinan dua pengembang mengkode bagian-bagian dari lapisan yang sama dalam isolasi relatif. Yang bisa mengarah pada pendekatan implementasi yang tidak cocok. ... ini terasa sangat abstrak ... Saya bersedia menyetujui apa yang saya sarankan bisa relatif tidak mungkin!
MetaFight
4

Saya juga tidak tahu kerugiannya, namun cerita vertikal dapat diimplementasikan dengan buruk.

Ketika saya pertama kali memulai karir saya, saya bergabung dengan tim yang ingin melakukan XP tetapi mereka tidak memiliki pengalaman dengan itu. Kami membuat sejumlah kesalahan saat menggunakan cerita pengguna vertikal.

Salah satu masalah yang kami temui ketika melakukan pekerjaan horizontal adalah fitur tidak terintegrasi dengan baik di seluruh lapisan. API seringkali tidak sesuai dengan spesifikasi, fitur yang hilang dan banyak masalah lainnya. Seringkali karena pengembang telah pindah ke sesuatu yang lain, Anda harus menunggu atau melakukannya sendiri.

Beralih ke melakukan Cerita Vertikal menyelesaikan masalah ini dan mengurangi / menghilangkan pemborosan bekerja kembali untuk diintegrasikan.

Ada sejumlah praktik XP yang mendukung cara kerja ini. Siapa pun harus dapat bekerja di area mana pun dan setiap orang diharapkan dapat memperbaiki bug yang mereka temukan ( kepemilikan Kode Kolektif ).

Saat Anda mengubah cerita vertikal, mungkin sulit untuk bekerja di area yang tidak Anda kenal. Pemrograman Pasangan dapat membantu, jika Anda tidak percaya diri menangkap seseorang dalam tim yang berpasangan dengan mereka. Saya telah menemukan pemrograman pasangan menjadi cara tercepat untuk mendapatkan kecepatan dengan basis kode baru.

Tanpa pemilik yang kuat atas lapisan kami menemukan, bahwa ada beberapa duplikasi yang muncul. Meskipun ini bukan masalah besar, kami perlu memastikan bahwa kami mempraktikkan Refactor tanpa ampun (dengan tes yang sesuai untuk mendukung).

Meskipun saya menyebutkan sejumlah masalah, saya tidak berpikir Kisah Pengguna Vertikal adalah penyebabnya. Bahkan, itu membuat masalah lebih jelas. Setelah kami beralih, masalah tidak lagi dikaburkan di seluruh tim atau lapisan aplikasi.

Dave Hillier
sumber