Недоліки вертикальних історій користувачів


9

Спритний підхід полягає в структурі роботи в вертикальні призначених для користувача історії і забезпечує цілеспрямовану , але повністю функціонуючу частина додатки від кінця до кінця . Оскільки це новий підхід до створення програмного забезпечення, я прочитав багато літератури про те, чому це краще, ніж горизонтальні історії, але я не знаю багато про недоліки цього підходу.

Я вже випив спритну круту допомогу, і я теж згоден, що вертикальне нарізання торта має багато переваг перед горизонтальним нарізкою. Ось короткий перелік недоліків, які я міг би придумати:

  • Розробник може спочатку повільніше реалізовувати функцію, оскільки він / він повинен розуміти всі технології, необхідні для розробки історії (користувальницький рівень послуг + доступ до даних + мережа тощо).
  • Загальний дизайн архітектури (створюючи основу програми) насправді не відповідає цій мантрі (проте деякі можуть стверджувати, що розробка / зміна загальної архітектури є частиною історії користувача)

Які ще є недоліки вертикально нарізаних історій користувачів?

Примітка. Причиною, що я задаю це питання зараз, є те, що я намагаюся переконати команду почати писати оповідання «вертикальним шляхом», і я хочу мати можливість випереджати можливі компроміси раніше, щоб вони виграли не вважаю підхід невдалим, коли вони стикаються з недоліками.


Я не розумію, як два пункти, які ви перераховуєте, є недоліками. Ви кажете, що це може бути повільно, але вони однаково не можуть. Що ти означає, що під загальною архітектурою не підходить? Знову це може бути краще.
Дейв Хіллєр

@DaveHillier: Це формулюється таким чином, коли це є недоліком. Наприклад, бізнес може подумати, що «повільний» час впровадження є недоліком.
c_maker

Ви намагаєтесь сказати, що бізнес сприймає це як повільніше?
Дейв Хіллєр

Чи "вертикальний зріз" - це те саме, що і "наскрізний концерн"?
Роберт Харві

1
Тут є дуже хороша стаття про горизонтальні та вертикальні історії користувачів, яка детально описує переваги та недоліки кожного тут: deltamatrix.com/…
Роберт Харві

Відповіді:


7

Я не знаю жодних довгострокових недоліків. За короткий термін, і для команди, яка новачка в такому розвитку, головним недоліком є ​​те, що для цього потрібно звикнути, а трохи навчитися.

Найефективніший спосіб роботи вертикально - це розробники повних стеків: таким чином історію може виконувати одна людина (або більше одного, але без конвеєрних завдань ). Зрозуміло, що це вимагає, щоб розробники працювали вертикально по всій стеці (від html до бази даних у випадку веб-програми).

Якщо ваша команда не звикла працювати над вертикальними сюжетами, то, швидше за все, вони роблять навпаки: кожна людина матиме знання лише про один шар / рівень рівня програми. Вводячи вертикальні історії, ви можете розраховувати, що команда розділить їх на завдання, що відповідають шарам, а потім поширюватиме завдання на різних людей. Це буде дуже неефективно.

Найкращий підхід, який я можу запропонувати щодо цього, - це спочатку терпіти цей конвеєр, даючи зрозуміти, що довгострокова мета зовсім інша. Запропонуйте членам команди програму парувати так, щоб набути довіру і зрештою дати можливість людям бути незалежними.

Я не згоден з іншою відповіддю, що такий підхід приносить технічну заборгованість. Це може, але так може бути і будь-який інший підхід.


Я б спробував парне програмування. Це дасть змогу людям отримати знання про інші необхідні їм домени та допоможе уникнути конвеєрної роботи.
користувач99561

7

Я багато думав над цим точним питанням.

Я думаю, що важливо розрізняти нарізку за окремими обов'язками та нарізка за відповідальністю команди. Я сфокусую цю відповідь головним чином на командах нарізки.

Для деякого передумови: я працював у проектах з повнорозмірними розробниками, однорівневими розробниками, вертикальними (повними стеками) командами, горизонтальними (однорівневими) командами та діагональними командами. Під діагональною командою я маю на увазі, що містять усі рівні, необхідні для історії, але не обов'язково всі рівні в системі, а також, можливо, містять кілька розробників, орієнтованих на один і той же рівень; Іншими словами, вертикальний за духом, але, можливо, дещо горизонтальний за зовнішнім виглядом або деталізацією.

Нещодавно я працював у групі, яка переходила з горизонтальних команд до діагональних (майже вертикальних) команд. Особливо повчальним було бачити, як одна і та ж група людей вирівнювала два різні способи. Це робить деякі переваги та недоліки досить зрозумілими.

Поки я сформулюю свою думку наступним підсумковим порівнянням:

Горизонтальні команди

Переваги:

  • Сприяє гарному розділенню проблем та слабко пов'язаному рівням
  • Набагато простіше управління розподілом робочого навантаження
  • Легке для спеціаліста технічне керівництво
  • Виховує внутрішньорівневу співпрацю, кращі практики, гордість та культуру досконалості
  • Вирівнюється з природними / виникаючими моделями спілкування

Недоліки:

  • Може призвести до ізоляції ярусів і, таким чином, перешкоджати міжрівневому спілкуванню
  • Увімкнює культуру рівня "міхур", якщо не пом'якшується
  • Складно скористатися генералістським керівництвом
  • Заважає генералістам

Вертикальні / Діагональні команди

Переваги:

  • Усі частини історії користувача в одній команді ("одноповерховий магазин")
  • Спеціально допомагає надавати n-ярусні історії в одному спринті (хоча це вам справді потрібно?)
  • Сприяє міжрівневій співпраці та зростанню загальнонаціональних навичок
  • Підтримує генералістів

Недоліки:

  • Набагато складніше управління розподілом навантаження
  • Дозволяє погано розділяти проблеми та щільно зв'язані рівні
  • Перешкоджає спеціалізації шляхом зменшення внутрішньорівневого спілкування; важко зрозуміти, як культура передового досвіду могла виникнути з цієї структури, не додаючи пом'якшуючих горизонтальних / спеціалізованих поведінок

Я не думаю, що членство в команді має рішення, яке не відповідає всім розмірам. Однак здається, що вертикальна команда краще складається для організацій, які потребують узагальнення. Якщо ваші інженери є генералістами і люблять працювати з повним стеком, це досить вагомий привід розглянути вертикальні команди. Горизонтальна група краще складається для організацій, які потребують фахівців. Якщо ваші інженери - спеціалісти, це досить вагомий привід розглянути горизонтальні команди.

Як уже згадували інші, вторинні структури / поведінки, які нарізають інший напрямок, можуть допомогти зменшити недоліки будь-якої системи. Одним із цікавих пом'якшуючих факторів є тривалість спринту. Короткі спринти роблять деякі недоліки горизонтальних команд більш допустимими. Якщо ви можете створити бекенд на цьому тижні та на наступному тижні, це може бути досить швидко?

Щоб застосувати деякі з цих запропонованих принципів до реальної проблеми ... Я скажу, що горизонтальні зрізи досить добре працювали для дуже реальної команди розробників SaaS, над якою я працював, вирішував дуже складні технічні проблеми в кожному рівні ( де спеціалізація була, на мій погляд, неймовірно важливою), де частота доставки (та надійність при високій деталізації / частоті) були вирішальними для успіху бізнесу. Зверніть увагу, що цей висновок стосується дуже конкретної команди реального світу, а не загального твердження про перевагу горизонтального нарізання.

Одне застереження: я, мабуть, упереджено вважаю, що будь-яка людина у сучасному світі розробки програмного забезпечення вважає твердження про загальні здібності без вагомих доказів, хоча я знаю кількох рідкісних виняткових загальних фахівців. Я відчуваю, що загальність є справді високим (вертикальним?) Порядком, особливо, коли кожен рівень зростає у складності та з поширенням альтернативних мов / платформ / фреймворків / розгортань, кожен задовольняючи різні потреби. Особливо в ці дні, джек з усіх торгів може бути легко господарем. Також, анекдотично, я вважаю, що більшість людей хочуть трохи спеціалізуватися, знову ж таки, за деякими винятками.


Ваш аналіз тут чудовий і відповідає тому, що я пережив. Я трохи не погоджуюся з тим, що горизонтальні команди можуть «перешкоджати спілкуванню міжрівневих залежностей»: я б сказав, що горизонтальне розмежування робить необхідність чіткого контракту між ярусами чітким і очевидним. На протилежній стороні ви зазначаєте, що вертикальні команди можуть призвести до щільно зв'язаних ярусів. Нарешті, я погоджуюся з тим, що претензії на здібності генераліста майже завжди перебільшені (побачивши багато по-справжньому жахливих задніх дизайнів, зроблених "генералістами", які дійсно повинні дотримуватися передового досвіду).
SebTHU

Хороший момент, @SebTHU. Формулювання мого першого пункту про недоліки Горизонтальних команд щодо "перешкоджання комунікації ..." було незрозумілим. Я мав намір зазначити, що горизонтальні команди потенційно можуть призвести до ізоляції між рівнями і, таким чином, перешкоджати міжрівневому спілкуванню. Однак, на ваш погляд, він може яскраво освітлити необхідність чітких контрактів і дійсно є примусовою функцією для отримання належних уточнень контрактів. Я оновив цю частину своєї відповіді, щоб уточнити свій намір.
Буде

@ Чи буде "Набагато складніше управління розподілом навантаження" на основі чого? Один хлопець, який витягує одну історію, і з'єднує всі шматки, здається мені справді простим та ефективним. "Дозволяє погано розділяти проблеми та щільно зв'язані рівні", хто каже, що це швидше у вертикальній команді проти хоз? Якщо ваша команда дисциплінована (що, напевно, потрібно вимагати від обох типів команд), це не повинно бути проблемою.
cottsak

6

Великий недолік, який я знайшов, полягає в тому, що команді важко створювати додаток за єдиним архітектурним підходом.

На ранніх етапах проекту кожен пише свої шари ізольовано. Історії (і задіяні шари) спрацюють, але, озирнувшись на поставлений продукт у спринтерському кінці, можна буде легко побачити невеликі відмінності між архітектурними ідеями кожного розробника.

Такі речі неминучі, але не є блокаторами. Я намагався боротися з цим двома способами:

  1. Проводьте тривалі дизайнерські дискусії з командою перед реалізацією кожної історії
    • Це стає швидко втомлюючим. Часто занадто рано приймати обгрунтоване рішення, і тоді ви просто в кінці сперечаєтесь про речі, які, безумовно, доведеться все-таки змінити.
  2. Ідіть і розвивайтесь у відносній ізоляції, маючи на увазі, що ви нарощуєте технічну заборгованість .
    • Тут важливо записати технічну (архітектурну) заборгованість як проблему. Це те, за що потрібно буде повернути гроші.
    • Після декількох спринтів буде легше визначитися з цілісною і єдиною архітектурою. Це тоді, коли вам потрібно подати запит на загартовуючий спринт, щоб повернути частину свого технічного боргу (рефактор існуючого коду). Крім того, ви можете повернути її частиною за наступні ітерації проекту.

Єдиною іншою проблемою, яку я не можу придумати, є те, що зазвичай є багато кодового коду, який потрібно додати на початку проекту. Написання історій з вертикальним фрагментом означає, що швидкість команди на перших кількох історіях буде штучно низькою завдяки цій необхідній умовному шаблону ... але поки всі усвідомлюють, що це має впливати лише на перші пару спринтів, тоді все нормально.


2
Як випливає, що, працюючи незалежно, ви нарощуєте технічну заборгованість? Здається, це не обов'язково
Sklivvz

Це не обов'язково , але це збільшує його ймовірність. Візьмемо, наприклад, дублювання коду. Якщо деякі технічні доменні терміни не затверджені, ще два розробника можуть записати одну і ту ж функціональність у двох окремих класах. Різниця лише в тому, що один розробник назвав це a, WobbleAdapterа інший a WibbleConverter.
MetaFight

3
Ви не пояснюєте, чому ці проблеми, швидше за все, виникають при розділенні роботи на шари або вертикально. І чому б вам довелося писати багато котлів у перших ітераціях? Звучить як YAGNI
Dave Hillier

Вибачте, я вважаю, що котельня - це неправильний термін. Я маю на увазі, що оскільки більшість класів інфраструктури проекту потрібно буде створити в перших кількох спринтах, є одноразова накладні витрати.
MetaFight

1
А поділ роботи на вертикальні фрагменти означає, що кожна історія торкається більшої кількості шарів. Це збільшує шанс двох розробників кодувати частини одного шару у відносній ізоляції. Що може призвести до невідповідних підходів до реалізації. ... це відчувається дуже абстрактно ... Я готовий погодитися з тим, що я припускаю, що це може бути порівняно малоймовірним!
MetaFight

4

Я також не знаю жодних недоліків, проте вертикальні історії можуть бути реалізовані погано.

Коли я вперше розпочав свою кар'єру, я приєднався до команди, яка хотіла займатися XP, але у них не було досвіду. Ми допустили ряд помилок, використовуючи вертикальні історії користувачів.

Однією з проблем, з якою ми стикалися при виконанні горизонтальних робіт, було те, що особливості не були добре інтегровані між шарами. API часто не відповідають специфікаціям, особливостям, де їх немає, та численним проблемам. Часто через те, що розробник перейшов на щось інше, вам доведеться або почекати їх, або зробити це самостійно.

Перехід на створення вертикальних історій вирішив ці проблеми та зменшив / усунув відходи повторної роботи для інтеграції.

Існує ряд практик XP, які підтримують такий спосіб роботи. Кожен повинен мати можливість працювати в будь-якій області, і всі очікують, що вони виправлять виявлені помилки ( Колективне право власності ).

Коли ви вносите зміни до вертикальних історій, працювати в місцях, з якими ви не знайомі, може бути складно. Парне програмування може допомогти, якщо ви не впевнені вхопити когось із команди, яка з ними пара. Я знайшов парне програмування як найшвидший спосіб швидкої роботи з новою базою коду.

Без сильних власників над шарами ми виявили, що виникає певне дублювання. Хоча це і не було великою проблемою, нам потрібно було переконатися, що ми практикували Refactor нещадно (з відповідними тестами для підтримки).

Хоча я згадую про низку проблем, я не вважаю, що причиною цього були вертикальні історії користувачів. Насправді це зробило проблеми більш очевидними. Після того, як ми перейшли до перемикання, проблеми більше не були затуманені в командах чи на рівні програм.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.