Scrum команда не дотримується принципу YAGNI


13

Під час зустрічі з SCRUM команда продукту обговорювала функцію в API, яку споживатиме мобільний додаток. У нас був макет, який показав, як повинен виглядати екран і які ключові елементи він повинен містити ("макет").

На підставі цього та обговорення, який я мав із власником продукту, я створив прототип відповіді API (HAL + JSON). Це був дуже простий, сумісний з HAL JSON, який не мав нічого іншого, як представляти речі, що були в макетах. На мене не впливали майбутні ідеї, які були передбачені діловими людьми, оскільки вони мають тенденцію часто змінювати свої ідеї, і я вирішив застосувати мінімалістичний підхід. Мою пропозицію команда відхилила, і я перехитрив 7 - 1.

Команда вирішила використати більш складну, несемантичну абстрактну структуру json, що дозволяє досягти більшої гнучкості в організації компонування. Недоліком цього підходу є те, що ми закінчилися набором рівномірних об'єктів, які можуть мати нульові та порожні властивості за задумом. Вони також подумали, що було б непогано зробити тестування A / B можливим, але це базувалося на їх прогнозах лише тому, що у нас не було такої вимоги.

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

Я та власник продукту - досвідчені програмісти, і подібні проблеми ми спостерігали раніше. Ми намагаємось слідувати принципам YAGNI та KISS . Решта команди трохи менш досвідчені, і хоча вони знають ці принципи, вони, схоже, не розуміють їх.

Ми погодилися з їх вирішенням, оскільки команда в цілому для нас важливіша, і ми не хотіли битися за щось, що не так важливо. Але я боюся, якщо таке може стати прецедентом для спірних, складніших дебатів? Як боротися з такою поведінкою? Чи є щось, що я, як керівник команди, можу зробити краще?

Варто згадати, що продукт є MVP на ранній стадії.


11
I'm afraid if such thing can become a precedence for upcoming, more complicated debates?- Це також порушує YAGNI: турбуватися про майбутнє, яке може не відбутися. Якби ви збиралися стояти на своєму, ви вже повинні були це зробити.
Роберт Харві

@gnat: Схоже, це не обмежується часом.
Роберт Харві

Чи не відповідає вимогам HAL, які не підпадають під дію YAGNI?
Метью

@Matthew все займало один тиждень, і я також підготував ще один прототип, використовуючи звичайний JSON просто для позбавлення від HAL, але він також був відхилений, вважаючи його "недостатньо гнучким". Команда модифікувала його, і ця модифікована версія була остаточно використана. HAL працює для нас як стандарт, набір керівних принципів, і мені простіше застосовувати єдину структуру на всіх кінцевих точках. Попередній API не використовував жодних стандартів, і це не закінчилося добре.
Яцек Кобус

5
Гнучкість додає складності. Поки команда це розуміє, можна рухатися вперед.
Джон Рейнор

Відповіді:


10

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

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

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

  • навчитися жити з цим
  • працюйте з командою протягом одного-двох років, діліться власним досвідом та сподіваюся, що вони з часом дізнаються про цінність YAGNI та KISS
  • працювати над власними навичками "продажу" дизайну чи стратегічних рішень команді
  • спробуйте перейти на іншу (можливо меншу) команду, де ваш власний рівень знань ближче до середнього рівня для всієї команди

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


5
Більшості людей доводиться торкатися печі, щоб дізнатися, що вона гаряча, і не торкатися її. Програмне забезпечення майже те саме. ++
RubberDuck

2
Ведення журналу / щоденника проекту є ключовим для такого роду речей. Після того, як ви записали різні дискусії, що відбулися, вони набагато конкретніше, ніж спогади людей про розмови місяцями чи роками пізніше. Існує хороший питання на практиці тут .
Роббі Ді

@RobbieDee: обов'язково, якщо це допоможе команді дізнатися про YAGNI та KISS.
Док Браун

3
Третя куля (робота над власними навичками "продажу" дизайну) не приділяє достатньої уваги. Ось чому розробникам все-таки потрібно мати (або працювати над) хороші комунікативні навички.
Рандалл Стюарт

@RandallStewart: абсолютно. Але навіть з найкращими навичками спілкування може бути важко продати YAGNI людям, які самі не пережили певного досвіду, або переплутати його з "швидким і брудним", або отримали освіту, що "абстракція (завжди) хороша", і тому спробуйте абстрагувати речі заради абстракції, а не для спрощення. Для спілкування потрібні дві сторони - той, хто вміє добре пояснювати речі, і той, хто готовий слухати і розуміти.
Док Браун

8

Сумісність вперед - це законна проблема

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

Як і інші вимоги, вам потрібні критерії прийняття

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

Це не повинно бути викликом судового рішення

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


1
Де у запитанні ви читаєте, що команда ОП пішла з шляху ЯГНІ через вимогу сумісності вперед?
Док Браун

Сумісність вперед - те, про що йдеться в Content-Typeзаголовку
Джек

2
Я готовий назвати це чимось іншим, якщо хочете, можливо, розширенням. Справа однакова; це все-таки NFR.
Джон Ву

1
Є два способи зробити систему розширюваною. Перший спосіб намагається передбачити велику кількість потенційних змін і зробити речі важко налаштованими "на всякий випадок". Я впевнений, що можна винайти безліч тестів на прийняття такого розширення. Або зберігати речі максимально просто, тому база коду залишається невеликою, її легко зрозуміти, а точки розширення або абстракції можуть бути додані пізніше, коли вони справді потрібні. Останнє - це нічого, для чого не можна (або потрібно) писати тести. Тому я не думаю, що це можна легко вирішити, "записуючи невимовлені НФР" ...
Док Браун,

... тому мова йде більше про те, як утримати команду, можливо, творчих розробників, щоб не робити припущень щодо НФР та вигадувати деякі.
Док Браун

3

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

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


3
+1 передбачати та планувати зміни - це не те саме, що йти повним космонавтом архітектури та створювати внутрішню платформу . Трохи основи прямо зараз можуть завадити багато роботи в майбутньому. Хоча команда ОП, можливо, занадто сильно схиляється в бік гіпотетики, фундаменталістський підхід YAGNI, безумовно, неоптимальний.
амон

4
Звучить більше, ви б із задоволенням перехитрили ОП і зробили ті ж помилки, плануючи "що робити, якщо маркетинг у майбутньому буде ..", ніж решта команди. Коли люди починають будувати рамки замість прикладного програмного забезпечення, коли завданням є створення прикладного програмного забезпечення, вони майже завжди роблять це неправильно.
Док Браун

@DocBrown Технічно я погодився б. Однак цей вигляд стосується готовності сприяти, а не вимагати особистої поваги. Бути "правильним" з одного боку, порівняно бути корисним або корисним з іншого. Що я читаю між рядками, це те, що ОП втрачає позицію і вирішує накачати своє его, підкреслюючи свій досвід інтернет-аудиторії, а не сприяючи в оточенні, в якому він більше не відчуває себе комфортно. Ця динаміка характерна для введення scrum.
Мартін Мейт

@MartinMaat Мене трохи розчарувало те, що вони не погодилися зі мною. Я не зрозумів, чому це сталося. Під час повсякденної роботи я допомагаю їм у перегляді кодів тощо. Ми часто заперечуємо, але мені це подобається, тому що кінцевий результат кращий; Я знаю, що вони поважають мою думку; Я завжди намагаюся використовувати вірні аргументи, які підтримують мої теорії. Зрештою, вони вибирають найкращий варіант, а також беруть на себе відповідальність за нього. Команда зробила те, що мала зробити - вони вирішили проблему. Це була моя помилка та власник продукту, що справа була занадто широкою та погано описаною з самого початку.
Яцек Кобус

2

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

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

Зрештою, ваша відповідальність вища, ніж перед іншими людьми. Це не тільки писати код, але й орієнтувати людей.


3
Демократія, мабуть, є причиною проблеми тут, але не бути демократичним - це ІМХО не є рішенням, оскільки це може легко запровадити більші проблеми, ніж описані в питанні - це може насправді зруйнувати команду.
Док Браун

@DocBrown Ви просто суперечили собі в тому самому реченні. ІМО деякі рішення люди не вирішують. Те, що пояснило ОП, є одним із них. Цитувати Армстронга для людей, які не вживають YAGNI: Ви хотіли банана, але у вас виникла горила, яка тримала банан і цілі джунглі
BЈовић

2
Ні, це не суперечність (можливо, я добре не висловив свою точку зору). Речі просто не завжди "чорно-білі". Тільки тому, що демократія не працює добре в деяких ситуаціях, не бути демократичним - це не гарантія покращення ситуації та покращення ситуації. Часто це не так просто.
Док Браун

1
З демократією ви не обов'язково отримуєте "правильну" річ, ви отримуєте річ, з якою згодні більшість людей. І це може бути хибним. І часто «правильна» річ має проблеми із соціальним сприйняттям. YAGNI не повинні бути наручниками, які будуть перешкоджати введенню правильних абстракцій, які дозволять вам легко додати "горилу" або "цілі джунглі", якщо потрібно.
oopexpert

@oopexpert Проблема в тому, що вони вам можуть знадобитися. YAGNI виступає проти інженерії. Правильні абстракції - це одне, а додавання матеріалів, які можуть вам не знадобитися, - це різні питання.
BЈович

2

Думаємо, що в ЯГНІ є невелика плутанина.

Часто розробники думають, що вони слідують за YAGNI, коли вони опускають абстракції, які будуть тримати систему "закритою для модифікації та відкритою для розширення".

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

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


2

Проблема YAGNI AND KISS полягає в тому, що вони абсолютно суб'єктивні та розпливчасті.

json ?? ЯГНІ! просто надішліть рядок csv!

об’єкти ?? KISSTUPID !!! просто використовуйте gotos !!

Роль "Лідера команди" недостатньо визначена, але я б радив відмовитися від висловлення суб'єктивних думок щодо технічного вибору вашої команди. Навіть якщо ви відчуваєте, що вони помиляються. Дотримуйтесь короткого списку чітко визначених вимог.

  • одиничні тести на код
  • інтеграційні тести для apis
  • автоматизовані тести користувальницького інтерфейсу для кінцевого продукту
  • вимоги до продуктивності та масштабування

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

Після цього його просто натискання робити те саме, але швидше


1

Усі в колективі повинні погодитися з визначенням зробленого . Без цього ви схильні до величезної кількості повзучості сфери, точок зору та базісності основних вимог.

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

Щодо пріоритетів, метод MoSCoW завжди нам добре служив - YMMV.


1

Перша моя думка з цього приводу - це ... Чому команду турбують зміни? Чи мають вони історичне розуміння Власника продукту, що змушує їх відчувати, що їм потрібно створити перше рішення, щоб бути трохи більш налаштованим, щоб полегшити майбутні вдосконалення? Якщо ваше рішення зайняло б 2 дні, а їх 5 днів, так, це більше вдвічі. Але якщо зміна вашого плану займе 2 дні кожен раз, але покращення їх зайняло б 1 день, їх план здається більш ефективним протягом тривалого перевезення. Я не думаю, що в цьому питанні є ПРАВИЛЬНЕ чи НЕправильне рішення. Це залежить від інших факторів, ІМХО. Однак ви справедливі щодо цього мислення, якщо в інших рішеннях вони подвоюють ЛОЕ, не маючи прямих вказівок на це (деякі докази того, що додаткова складність необхідна для масштабованості, надійності тощо). Моя пропозиція полягатиме в тому, щоб залучити власника продукту до цих розмов, оскільки їм потрібно допомогти у визначенні пріоритетності. Якщо ваше рішення налічує 5 балів, і воно би задовольнило потребу зараз, але для того, що вони хочуть зробити, потрібно 50 балів і два спринти або більше, PO може сказати: "Тримайся, ми запланували випуск цього MVP, запланованого і не можу витратити 2 тижні на розробку функціональних можливостей, яких немає в дорожній карті! "

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