Те, що ви описуєте, - принаймні, на мій досвід - досить поширена модель команд, які намагаються "бути спритними". Він відкритий для дебатів, якщо це насправді частина самого Agile або звичайна неправильна його реалізація, є проти спритного маніфесту / принципів чи властивого йому наслідку тощо. Як раз з емпіричної точки зору, і лише на основі мого власного невеликого набору досвіду (і людей, з якими я розмовляю), якщо команда спритна, то, схоже, є більший за середній шанс наткнутися на цю схему. Давайте просто залишимо це на цьому і зосередимося на вашому конкретному прикладі.
До того, що ви описуєте, є два окремих аспекти :
- Відсутнє загальне розуміння / бачення і тому не є ефективним
- Як виміряти успіх / прогрес і загальну вартість
Спускатися неправильним шляхом або бігати по колах
На мій досвід, головна причина цього трапляється в тому, що , намагаючись швидко створити код, команди активно відхиляють випадки використання або вимоги, про які вони вже знають або про які можна легко дізнатися. Подумайте про це так: 10-20 років тому люди намагалися написати гігантські характеристики і продумати все заздалегідь і часто не вдалося. Вони або зайняли занадто довго, або щось пропустили. Одне з наукових досліджень минулого полягає в тому, що в розробці програмного забезпечення є речі, які ви не можете знати, і речі сильно змінюються, отже, ідея швидко повторюватись і швидко отримувати певний розумний вихід. Це дуже хороший принцип. Але сьогодні ми перебуваємо на іншій крайності: "Мені це не байдуже, тому що це частина наступного спринту" або "Я не подаю цю помилку, я маю справу з нею, коли вона з’явиться знову".
- Зберіть усі випадки використання , вимоги, залежності та обмеження на високому рівні , які ви можете знайти. Помістіть це у вікі, щоб усі учасники та розробники могли їх бачити. Додайте до них, коли з’явиться щось нове. Поговоріть зі своїми акціонерами та користувачами. Використовуйте це як контрольний список під час розробки, щоб запобігти впровадженню речей, які не сприяють кінцевому продукту або є способом вирішення однієї проблеми, але викликають три нові.
- Сформулюйте концепцію високого рівня . Я не говорю про проектування інтерфейсів або класів, а натомість грубо окреслив проблемну область. Які основні елементи, механізм та взаємодія в кінцевому рішенні? У вашому випадку це повинно зробити це очевидним, коли використання методу jquery-вирішення допомагає як проміжний крок і коли це викликає лише додаткову роботу.
- Підтвердьте свою концепцію за допомогою зібраного вами списку. Чи є в ньому явні проблеми? Чи має сенс? Чи існують більш ефективні способи досягнення тієї самої вартості користувача, не викликаючи довгого технічного боргу?
Не перестарайтеся. Вам просто потрібно щось, щоб усі в колективі (включаючи не-розробників) мали спільне розуміння, який найкращий шлях до вашого MVP. Усі повинні погодитись, що очевидних недоліків немає і це може насправді спрацювати. Це, як правило, допомагає запобігти схудненню або переробленню однієї і тієї ж речі кілька разів. Agile може допомогти вам краще впоратися з несподіваним, це не аргумент ігнорувати те, що відомо.
Будьте в курсі невдалої помилки : якщо ви почнете з одного типу архітектури чи бази даних, більшість людей вагаються, щоб змінити її середнього проекту. Тож корисно вкласти якийсь час у створення «найкращого здогадки про освіту», перш ніж розпочати впровадження матеріалів. Devs мають тенденцію швидко писати код. Але часто, маючи пару макетів, живих прототипів, скріншотів, каркасних передач тощо, можна зробити навіть більш швидку ітерацію, ніж написання коду. Просто пам’ятайте, що кожен рядок написаного коду або навіть одиничні тести ускладнюють знову змінити загальну концепцію.
Вимірювання успіху
Зовсім окремий аспект - це те, як ви вимірюєте прогрес. Скажімо, мета вашого проекту - побудувати вежу висотою 1 м, використовуючи речі, що лежать навколо. Побудова будинку з карток може бути цілком правильним рішенням, якщо, наприклад, час на ринок важливіший, ніж стабільність. Якщо ваша мета - побудувати щось, що триває, використання Лего було б краще. Справа в тому, що вважається злом і яке елегантне рішення повністю залежить від того, як вимірюється успіх проекту .
Ваш приклад "завантаження" досить непоганий. У мене були такі речі в минулому, коли всі (включаючи продажі, PO, користувачів) погоджувались, що це дратує. Але це не впливало на успіх продукту і не викликало довгострокової заборгованості. Тож ми її відкинули, бо з dev-ресурсами були ще цінні речі.
Моя порада тут:
- Зберігайте все, навіть невеликі помилки, як квитки у вашій системі квитків . Приймайте активне рішення, що знаходиться в межах проекту, а що ні. Створіть основні віхи або відфільтруйте їхні відставання, щоб у вас завжди був "повний" список всього, що ще потрібно зробити.
- Майте суворий порядок важливості та чітку межу, де проект можна вважати успішним. Який рівень стабільності / якості коду / документації насправді потрібен кінцевий продукт? Постарайтеся провести кожен день роботи якнайкраще, вибираючи зверху. Працюючи над одним квитком, спробуйте вирішити його повністю, не вводячи нові квитки (якщо тільки немає сенсу відкладати речі через нижчий пріоритет). Кожне зобов'язання повинно приводити вас вперед до своєї кінцевої мети, а не збоку чи назад. Але підкреслимо це ще раз: іноді хак, який надасть додаткову роботу пізніше, все ще може бути чистим позитивом для проекту!
- Використовуйте свій PO / користувачів, щоб визначити цінність користувача, але також попросіть своїх розробників визначити вартість техніки . Зазвичай нерозробники не можуть судити про те, яка справжня довгострокова вартість (не лише вартість впровадження!), Тому допоможіть їм. Будьте в курсі проблеми з киплячою жабою: багато маленьких, нерелевантних проблем можуть з часом привести команду до місця. Спробуйте кількісно оцінити, наскільки ефективно може працювати ваша команда.
- Слідкуйте за загальною метою / витратами. Замість того, щоб думати від спринту до спринту, скоріше дотримуйтесь думки про те, "чи можемо ми як команда зробити все необхідне до кінця проекту" . Спринти - це лише спосіб розбити речі та встановити контрольно-пропускні пункти.
- Замість того, щоб хотіти щось показати рано, побудуйте свій курс на найшвидшому шляху до мінімально можливого продукту, який можна надати користувачеві. Тим не менш, ваша загальна стратегія повинна передбачати перевірені результати між ними.
Тож, коли хтось робить щось, що не входить у вашу остаточну мету реалізації, в ідеалі не вважайте виконану історію. Якщо вигідно закрити історію (наприклад, щоб отримати відгуки від клієнтів), негайно відкрийте нову історію / помилку, щоб вирішити короткі результати. Зробіть прозорим, що використання ярликів не зменшує витрат, він просто їх приховує або затримує!
Хитрість тут полягає в тому, щоб сперечатися із загальною вартістю проекту: якщо, наприклад, PO вимагає приймати ярлики, щоб скласти крайній термін, кількісно визначте обсяг роботи, який необхідно виконати після того, щоб вважати виконаний проект!
Також остерігайтесь оптимізації на основі критеріїв : якщо ваша команда оцінюється кількістю оповідань, які вони можуть показати на спринтерському огляді, найкращий спосіб досягти хорошого «бала» - розрізати кожну історію на десять крихітних. Якщо вона вимірюється кількістю написаних одиниць тестів, вона, як правило, записує багато непотрібних. Не рахуйте історії, скоріше оцініть, наскільки працює необхідна функціональність користувачів, наскільки великою є вартість заборгованості за техніку, яку необхідно вирішити в межах проекту тощо.
Підсумок
Щоб зварити його: Швидкий та мінімальний шлях - це хороший підхід. T він проблема полягає в інтерпретації «швидкої» і «мінімальний». Завжди слід враховувати довгострокову вартість (якщо тільки у вас немає проекту, де це не має значення). Використання ярлика, який займає лише 1 день, але створює технічну заборгованість у 1 місяць після дати доставки, коштує вашій компанії більше, ніж рішення, яке зайняло 1 тиждень. Негайно почати писати тести здається швидко, але не, якщо у вас концепція недосконала, і вони зафіксували неправильний підхід.
І майте на увазі, що означає "тривалий термін" у вашому випадку: я знаю більше однієї компанії, яка розрушилася, намагаючись написати чудовий код і тому надсилалася занадто пізно. Хороша архітектура чи чистий код - з точки зору компанії - цінні лише тоді, коли витрати на його досягнення менші, ніж витрати на його відсутність.
Сподіваюся, що це допомагає!