Що таке Implementation Plan, або Як планувати реалізацію в розробці

Як Full Stack Engineer у компанії Railsware, я належу до тієї категорії людей, яка вважає, що правильне планування робочого процесу — половина успіху. Тому хочу поділитися способом, який ми використовуємо під час планування роботи над user stories у кожному спринті. Ми називаємо його implementation plan або ж ImPlan.

Що таке Implementation Plan

Отже, implementation plan — це детальний конкретизований план, прописаний у форматі чекліста. Його складають розробники перед початком роботи над кожною user story.

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

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

  1. Уникнути неправильного розуміння вимог до кожного завдання та максимально точно оцінити час на реалізацію.
  2. Продумати задачу, перш ніж фактично почати писати код.

Більш детально про переваги цього підходу розповім наприкінці статті.

У чому суть підходу

Процес виглядає так: спочатку ми визначаємо, які user stories реалізовуватимемо в наступному спринті. Далі завдання інженера — скласти покроковий implementation plan для реалізації кожної з них. Зазвичай він включає:

  • Повний шлях до файлу, який потрібно змінити.
  • Зміни, які потрібно внести у цей файл. Наприклад:

`add ’user_id’ parameter to required params of ’api/shares_controller.rb’`

  • План тестування. Він може містити конкретні файли, які слід покрити тестами, а також набори даних, які потрібно перевірити.

Важливо прописувати всі кроки максимально конкретно: наприклад, запис «написати тести» сам по собі не дасть достатньо інформації.

Для зручності читання і навігації ми структуруємо чекліст за такими блоками:

  • Front-end
  • Backend
  • UI Library
  • Specs

Кілька важливих моментів, які варто враховувати:

  1. У процесі реалізації не завжди обов’язково суворо дотримуватися порядку кроків, зазначених у плані: він може змінюватися під час розробки.
  2. Деталі плану не є статичними — їх можна коригувати в ході реалізації.
  3. Створювати Implementation Plan і безпосередньо виконувати прописані кроки можуть різні люди.

Для створення самого чекліста можна використовувати будь-який зручний сервіс. Зазвичай, ми працюємо з Trello, Smart Checklist для Jira чи Clubhouse.

Наскільки детальним має бути implementation plan

Наша головна мета — структурувати та спростити процес розробки.

В ідеалі потрібно прописати всі зміни, необхідні для реалізації (або ж імплементації) функціональності. Вони мають бути зрозумілими кожному інженерові, який працюватиме над user story, щоб навіть нові учасники процесу могли долучитися без додаткових розʼяснень.

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

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

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

Процес планування на клієнтських проєктах

Перед початком ітерації ми проводимо IPM (Implementation Planning Meeting) — зустріч для планування та оцінки завдань на найближчі два тижні.

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

Ми працюємо за таким підходом уже кілька років, і за цей час він довів свою дієвість:

  1. Заглиблюємося в деталі кожної user story до початку розробки. Це дає змогу побачити загальну картину, з’ясувати всі вимоги, поставити запитання та продумати можливі рішення.
  2. Визначаємо складність кожної user story. Надалі це допомагає точніше оцінити необхідний час і ресурси.
  3. Заздалегідь плануємо деталі реалізації. Це дає змогу мінімізувати кількість додаткових запитань до клієнта або продакт-менеджера під час ітерації.

Особливості складання планів для різних типів завдань

Невеликі та очевидні завдання

Може здаватися, що немає потреби створювати implementation plan для маленьких і простих завдань, коли все й так зрозуміло.

Однак навіть у таких випадках створення чекліста для простої задачі дасть змогу:

  • Передати завдання на розробку іншим інженерам, особливо новим yf проєкті.
  • Продемонструвати продакт-менеджеру всі етапи реалізації та обґрунтувати оцінку.
  • Переконатися, що завдання справді просте та не тягне за собою додаткових залежностей.

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

Завдання з певною невизначеністю

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

Наприклад, можна:

  • виділити трохи часу на написання коду, щоб перевірити ідею;
  • відкрити консоль веб-сервера або бази даних і перевірити основні запити.

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

Повністю не зрозумілі завдання

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

Принцип планування для таких завдань той самий: потрібно експериментувати. Відкрити код, подивитися, як він працює, почати писати те чи інше рішення. Скласти чекліст для тих моментів, які вже зрозумілі. Це допоможе внести ясність.

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

У такій ситуації implementation plan допоможе зрозуміти, що деякі завдання дійсно потребують додаткового аналізу, і пояснити, звідки береться невизначеність. Таке планування на підготовчому етапі, до початку розробки, дає змогу спланувати ризики та заощадити час на реалізації.

Як використовувати implementation plans у різних командах

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

Нові інженери

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

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

Команди, які уникають детального планування завдань

Багато хто схильний мінімізувати планування перед реалізацією або зовсім не робити його достатньо детальним.

У таких випадках часто виникають наступні проблеми:

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

Переваги та недоліки implementation plans

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

Підсумуймо.

Переваги підходу — він дозволяє команді:

  • дати точнішу оцінку завданням;
  • розібратися в складнощах і заплутаних моментах;
  • виявити блокери на стадії планування та скоротити технічний борг;
  • покращити процес обміну знаннями.

План реалізації (Implementation Plan) у вигляді чекліста дає чітку структуру етапів реалізації завдання та можливість відстежувати прогрес. Детальний план дій економить час і дозволяє оптимізувати процес розробки завдяки можливості:

  • розглянути різні опції та сценарії, перш ніж почати писати код;
  • уявити повну картину з самого початку роботи;
  • спростити синхронізацію з учасниками команди та зовнішніми експертами;
  • делегувати завдання іншим інженерам.

У будь-якого, навіть найцікавішого та найефективнішого підходу є й інша сторона. Ось кілька проблемних моментів:

  • План реалізації не буває ідеальним, його потрібно покращувати, доопрацьовувати та обговорювати, а це вимагає часу.
  • Якщо ви працюєте на клієнтському проєкті, іноді буває складно переконати замовника в тому, що доцільно один повний день приділити плануванню замість написання коду.
  • Результат може бути непомітний одразу. Зміни в процесах зазвичай вимагають кількох спринтів, щоб зрозуміти ефективність.
  • Є й психологічний момент: потрібно повірити в те, що підхід детального планування себе виправдовує. Іноді варто відкинути впевненість у своїх знаннях проєкту та здібностях оцінювати завдання на око.

Наступні кроки

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

  • Почніть зі складання чеклістів для простих завдань.
  • Покажіть їх іншим розробникам: чи будуть їм зрозумілі ваші пункти? Чи зможуть вони за ними працювати?
  • Спробуйте оцінити завдання, виходячи з зроблених планів.
  • Аналізуйте результати. Наскільки точними виявилися ваші оцінки? Що змінилося в процесі роботи?
  • Шукайте, що можна покращити. Експерементуйте з формою та структурою чеклістів, їх змістом.

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

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному0
LinkedIn



37 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Ниже уже частично затрагивали эту тему, но:

задача инженера — составить пошаговый Implementation Plan

и

нужно прописать все изменения

Так получается это займёт столько же по времени Senior/Lead разработчика сколько заняло бы у этого разработчика реализовать фичу. Наверное это имеет смысл отдавать на разработку только не к новым разработчикам, а, скажем, если реализацию предыдущей фичи разработчик ну очень сильно затянул (x2, x3 estimate) или ну очень сильно не туда завернул — чтоб поставить его на нужные рельсы и с каждой новой таской давать описание всё более и более абстрактно. С целью в идеале вообще убрать из процесса старшего товарища и ставить таск в виде BDD feature/story. Чтоб задачи могли зразу от BA/PO/PM или кто там её ставит попадать напрямую разработчику после planning’а, в котором действительно участвует вся команда, например играя в покер и тем самым утрясая подводные камни кто какие видит.
Когда-то давно слышал легенду что от какого-то не особо крупного немецкого заказчика кому-то пришло такое т.з. Разработчик был рад и счастлив — думать ничего не надо, только взять и по каждой строчке т.з. код написать. Это же деньги на шару. Я тогда подумал: «а зачем такое детальное т.з. ещё кому-то отдавать? Это ж обман клиента получается. Он то по сути сам всю работу сделал. А ему ещё и денег платить кому-то.» А так вы, получается, дважды биллите кастомера. Первый раз за синьёра который опишет

все изменения

в плоть до файла/поля что надо изменить и второй раз — за джуна (продажей и его как синьёра не балуетесь? С таким то тз...) который всё закодит. И, если это не инвестиции в развитие джуна чтоб потом получить самостоятельный юнит, а реальный плановый процесс — это ппц. Хотя, если кастомеру это продали...
Касательно

возникают следующие проблемы:
  1. Задачи оцениваются неточно, и в итоге результат сильно отличается от ожидаемого.
  2. Задачи выполняются не самым эффективным образом, либо занимают больше времени, чем предполагалось.
  3. Не рассматриваются потенциально действенные альтернативные варианты решений.
  1. Это точно происходило после общего планнинга (типа покера иже с ними)? Или кто-то подумал и решил что это займёт столько-то?
  2. Наблюдения действительно реальны, не может быть это выдаванием желаемого (то что методика работает) за действительное (методика жрёт столько же или больше платного времени как если бы её не было)?
  3. Сравнивали на реальных примерах? Например дать двум синьёрам, хорошо знакомым с проектом, с одинаковым KPI, максимально близким/схожим по прочим показателям производительности, один и тот же таск, только одному на реализацию сразу, а другому на детальный, построчный, пофайловый план и с реализацией джуном? Реально второй закончит за день и ещё день будет джун возиться и первый все два дня просидит? Чёт слабо верится. Скорее, если второй и выдаст план за 8h то первый спушит за 6h или меньше.
  4. Пробовали сразу дать таск на реализацию и после пуша провести детальное ревью тем инженером что в вашей методике составлял бы план? По платному времени должно быть столько же или меньше.

Спасибо за развернутый комментарий!

Я уже отмечал выше, что время, потраченное на планирование реализации не будет потрачено впустую. Т.к. то же самое время будет потрачено во время реализации фичи, пути реализации которой не были должным образом спланированы.

Мне также кажется, вы слишком сильно разделяете роли на джунов/синиоров во время планирования. Действительно, такой процесс помогает младшим инженерам быстрее освоить проект и технологии. Однако, реальность такова, что даже опытные инженеры часто ошибаются со сроками и путями реализации.

Вам не обязательно прописывать 100% детальное тз. Можно остановиться на этапе, когда вы будете ясно понимать, как задачу реализовать и сколько это времени займет. Если в конце спринта окажется, что вы ошиблись — попробуйте в следующий раз спланировать детальнее.

Это точно происходило после общего планнинга (типа покера иже с ними)? Или кто-то подумал и решил что это займёт столько-то?

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

Наблюдения действительно реальны, не может быть это выдаванием желаемого (то что методика работает) за действительное (методика жрёт столько же или больше платного времени как если бы её не было)?

Мы ограничиваем время на подобное планирование. От 4 до 6 часов в первый день спринта. К примеру спринт начинается в понедельник, планнинг митинг назначен на 7 вечера, время до планнинг митинга посвящается созданию implementation planов для каждой задачи.

Сравнивали на реальных примерах?

Да, конечно. Я описал выше использование процесса в разных командах.
Инженер, составивший план, сделавший реализацию и проревьювавший результат — это могут быть 3 разных человека.

за джуна (продажей и его как синьёра не балуетесь? С таким то тз...)

Мы, в целом, не привыкли раздавать всем тайтлы. Официально все просто «инженеры»

Так получается это займёт столько же по времени Senior/Lead разработчика сколько заняло бы у этого разработчика реализовать фичу

Да, но есть «но», как всегда :)
В данном случае наиболее важное «но» — эта штука должна помочь уменьшить усилия по интеграции и верификации.
Если процесс построен таким образом, что разработчик полностью имплементировал фичу сам (без разделение на backend и frontend, к примеру), сам её покрыл всеми необходимыми тестами (не только unit, но ещё и integration + system как минимум), сам их прогнал, убедился, что фича на 100% работает и вылил на прод, после чего к этому коду больше никогда не вернулся — никаких проблем, ему этот план не нужен, он только тратит своё время на его написание.
Теперь несколько других моментов:
1. Интеграция. Особенно вкусен момент, когда интегрируемся с другой командой, которые не совсем в курсе наших задач. Во-первых, наличие такого плана значительно сократит 2-й команде время на интеграцию: куда проще интегрироваться, если описано, что поменялось vs реверс-инжиниринга или копания в чужих сорцах. На крайняк, когда разрабу с той стороны надоест копаться в чужой репе, он подойдёт к автору изменений и потратит своё время и его на уточнение, что же было сделано. В принципе, тот же кейс можно применить к frontend-разрабу с упором на JavaScript и его попыткам понять, что же там в Java backend разрабы накодили.
2. Тестирование. Не вдаваясь в детали, могу просто сказать, что такая штука, во-первых, улучшит качество тестов, а, значит, и качество проекта (проще написать тест, когда знаешь, что и как было сделано), а, во-вторых, уменьшит количество «closed by design» багов, сэкономив время как тестировщиков на открытие таких багов, так и разработчиков на их вычитку.

Если процесс построен таким образом, что разработчик полностью имплементировал фичу сам (без разделение на backend и frontend, к примеру), сам её покрыл всеми необходимыми тестами (не только unit, но ещё и integration + system как минимум), сам их прогнал, убедился, что фича на 100% работает и вылил на прод, после чего к этому коду больше никогда не вернулся — никаких проблем, ему этот план не нужен, он только тратит своё время на его написание.

справедливости ради это не совсем так причём настолько что сам «разработчик полностью сам» чисто технически полностью абстрактен просто потому либо настолько гениален что полностью держит в уме «несоставленный план» и следует ему в каждый любой момент своей работы либо и сам настолько глубоко не заинтересован в её результатах что ему вообще всё равно... ))

Просто потому что первая функция которая есть у всяких «приложений нотатников» это чеклисты по которым можно соотв. сперва составить список а потом проставлять галочки «ок это сделано» и это и есть тот самый план.

В более же ж реальном мире как только в результатах работы этого разработчика заинтересован кто-либо включая его самого так сразу же ж появляется «план» как форма отчётности и оценки «а где мы вообще делаем и когда планируем закончить и что вообще происходит?»

В этом месте основная борьба уже с уровнями детализации как стремлением к микроменджменту с одной стороны так и уровнями недетализации как стремлением к тому самому «непланированию как неспособности как-либо оценить и предсказать что вообще получится».

Государь не любил уступать иностранцам и верил в своих русских мастеров. Он приказал Платову отвезти блоху в Тулу и показать её тульским мастерам. Платов взял блоху и поехал в Тулу. Оружейники посмотрели блоху и обещали что-нибудь придумать. Три самых лучших мастера, один из них косой левша, две недели работали в полном секрете. Приехал Платов, спросил «Готово?» «Всё, — отвечают. — Готово.» Платов открыл шкатулку, а там лежит английская блоха как и была раньше. «Что же вы ничего не сделали! Я вам голову сниму!» А тульские мастера отвечают: «Мы вам секрета нашей работы сейчас не скажем. Везите нас к государю.» Схватил Платов левшу и повёз его в Петербург.

Вопрос именно в том что в промышленном производстве такой подход не работает одно дело гвоздики 2 недели выковать чтобы блоху подковать а другое дело запустить завод по выковке гвоздиков и к нему фабрику по подковке блох и к нему сервисную службу поддержки чтобы иметь эту блоху каждый дурак мог даёшь 100 рублей и на тебе айфон мериканский блоха английкая.

Вот об этом в основном история и умалчивает.

настолько глубоко не заинтересован в её результатах что ему вообще всё равно... ))
как только в результатах работы этого разработчика заинтересован кто-либо включая его самого так сразу же ж появляется «план»

Так вот об этом же и речь! )))
Если интеграции нет как факта — то никакой план не нужен. Если же появляется потребность в интеграции — с другими программерами, с тестировщиками, да даже с пользователями, в конце концов — сразу же появляются вопросы «а что же было сделано?», «как нам понять, что новая фича работает?» или хотя бы «покажи, на что ты потратил неделю своего времени, за которую тебе заплатили».

1. Интеграция. ... vs реверс-инжиниринга или копания в чужих сорцах.

а это уже снова об другом история это уже история об стандартизации и контрактах года болт м4 он имеет конкретные допуски и никакой «процент брака» чисто технически недопустим.

... бают историю что в советское время заказали у японцев поставку чего-то там и в контракте соотв. указали «процент брака не выше условных 5 штук на 1000» на что бережливые японцы работающие по всяким там заумным методологиям канбан и прочия заказ выполнили но «бракованные детали» прислали отдельно сопроводив письмом что они конечно не очень хорошо понимают зачем товарищам заказчикам бракованные детали но поскольку контракт есть контракт то они специально изготовили строго оговоренное количество и соотв. включили в поставку и обязательно обращайтесь ещё!

В принципе, тот же кейс можно применить к frontend-разрабу с упором на JavaScript и его попыткам понять, что же там в Java backend разрабы накодили.

причём вот именно про это же ж и речь! ))

Стандартизация — это прекрасно, но если разраб Вася — спец по фронтенду с каким-нить Node.js, а разраб Петя наваял микросервисную архитектуру, о которой Вася знает только в теории, и то в рамках полустраницы на хабре, то как ему за пару минут копания в коде, который он видит 1-й раз в жизни, понять, какие там изменения сделал Вася и, главное, как они повлияют на то, с чем ему надо интегрироваться?
Разумеется, потратив день-другой, Петя будет способен понять, что там написал Вася — но за день-другой ему надо было эту таску закрыть и приступить к следующей :)

понять, какие там изменения сделал Вася и, главное, как они повлияют на то, с чем ему надо интегрироваться?

эм... специфицировать интерфейсы протоколы вот это всё?

ЗЫ: чёртова классика актуальная наши дни #внезапно ))

Англичане встретили левшу как равного, по плечу похлопали, за руку поздоровались и сказали: «Камрад — хороший мастер.» Спросили его, где и чему он учился, знает ли арифметику. Левша ответил, что учился он по Псалтырю, а арифметику не знает. «Жаль, — говорят англичане, — если бы ты арифметику знал, то сообразил бы, что в каждой машине точный расчет силы есть, и машина в блохе точно рассчитана, и подков нести не может, поэтому она теперь не танцует. Левша согласился: «Мы науки не изучали.»

а вы пробовали в декомпозицию на подзадачи? ну, частично похоже на ваш подход, но без [излишней, как по мне] детализации — что именно и где именно менять.

Цікава методика, схожа на написання псевдокоду. А не було бажання спробувати щось на подобі event storming для деталізації вимог та покращення розуміння домену?

Да, у нас это зовется Inception.
Описанный здесь процесс подходит скорее, для регулярного планирования и оценивания атомарных задач с более менее понятными требованиями и доменной областью.

Столкнулся на новом проекте с подобным подходом (план не просто пишется, а проходит ревью, возможно с коррекциями). За полгода впечатления неоднозначные с точки зрения разработчика (веб фуллстэк).

С одной стороны, при детальном планировании минимизируются шансы, что на код-ревью большой кусок кода будет зареджекчен с мотировкой типа «это вообще на бэке(или фронте, или хранимкой) надо делать». Это, конечно, плюс.

Минусы:
— при задаче, относящейся к типу с которым ещё не сталкивался, это «планирование» плавно перетекает в написание и отладку половины, и то и больше необходимого кода, а итоговый план выглядит как «доработать в ветке UI и обработку ошибок за пару часов», когда «планирование» заняло часов 50 (утрирую, но не сильно)
— на простых (которые сразу понятно как делать) задачах влом сильно расписывать, в том числе писать полные пути и упоминать все файлы, особенно инфраструктуры типа роутингов, переводов, навигации и прочего, не относящегося к бизнес-логике. Но потом краткий подход автоматом переносится и на более сложные задачи, что часто даёт неадекватный результат на код-ревью
— использовать планы в качестве документации к задаче не получается потому что они позиционируются именно как планы, от которых можно отступить в случае необходимости без необходимости их актуализировать. В результате бывает, что ищешь задачу аналогичную своей, копипастишь и адаптируешь её план, начинаешь делать, что-то идёт не так, лезешь в код и видишь что не соответствует плану.

В целом я бы предпочёл иметь набор функциональных и(или) интеграционных тестов до начала работы над задачей, написать и пройти код-ревью набор юнит- тестов, а потом приступать к имплементации, чем писать «бумажные» планы.

Или предпочёл бы просто иметь возможность спокойно разбить задачи на подзадачи.

спасибо за развернутый список. действительно, перечисленные вами минусы имеют место быть. но и их можно контролировать. я в статье указывал способы планирования к разным типам задач.

>

при задаче, относящейся к типу с которым ещё не сталкивался, это «планирование» плавно перетекает в написание и отладку половины, и то и больше необходимого кода, а итоговый план выглядит как «доработать в ветке UI и обработку ошибок за пару часов», когда «планирование» заняло часов 50 (утрирую, но не сильно)

Мы в таких случаях говорим, что нужно выделить время на tech spike для дополнительного исследования или экспериментов. spike всегда заранее лимитируется временем, от 4х часов до 2х дней, в зависимости от сложности и размера задачи. в конце спайка всегда проще увидеть, что можно разбить на подзадачи, как дальше продолжать.
временный лимит позволяет не закопаться в задачу слишком глубоко без необходимости.
в то же время, тот код, который вы напишете во время spike, скорее всего пригодится вам и для конечной реализации. то есть время не будет потрачено впустую.

>

Но потом краткий подход автоматом переносится и на более сложные задачи, что часто даёт неадекватный результат на код-ревью

Так и есть, согласен. Еще часто бывают ситуации, когда простые на первый взгляд задачи, оказываются гораздо запутаннее на практике. Поэтому, в идеале, хорошо бы уделять по 30 минут на планирование каждой простой истории.

>

использовать планы в качестве документации к задаче не получается потому что они позиционируются именно как планы, от которых можно отступить в случае необходимости без необходимости их актуализировать.

Я скорее имел ввиду, что написав implementation plan к задаче, вы после можете передать задачу на разработку другому инженеру. для него ваш план отчасти будет выступать документацией. это иногда помогает новым людям быстрее вникнуть в проект или технологии.

временный лимит позволяет не закопаться в задачу слишком глубоко без необходимости.

Вот такие фразы меня всегда смущали по отношению к обычным, не исследовательским в целом задачам. Есть задача — её надо сделать, если она уже появилась, то есть необходимость. Пускай для знающего предметную область, систему, инфраструктуру и т. п. человека реализация займёт пару дней, а для новичка — пару недель. За пару дней на рисерч он или набросает высокоуровневый план, полный неопределенностей, либо сделает 20% задачи, не представляя как дальше делать. В обоих случаях почти нет разницы в итоге.

Как по мне, то жёстких лимитов на незнакомые задачи быть не должно, вместо дедлайнов -контроль прогресса, а если выходит за разумные рамки, то или помощь, или переназначение задачи, или отмена задачи.

вы после можете передать задачу на разработку другому инженеру

Такие сценарии не рассматривал, но как мне кажется между инженерами они в редких случаях применимы (вхождение в проект в основном, и то лучше, по-моему будет, как у нас — новичок сам составляет план, а кто-то его ревьювит). Как по мне это больше от инженера к техникам («кодерам») или от архитектора/техлида к инженерам. В последнем случае план скорее высокоуровневый без имен файлов, классов и методов обычно, максимум публичный API описан детально. Выдавать детальный план инженеру — сводить его роль от инженера к технику, убивать творческую составляющую инженерного труда. Может кому-то и понравится такая роль, но многим это убъёт (или должно убить :) ) мотивацию.

Кстати, и после составления детального плана желание собственно код писать может пропасть: задача уже решена и в бизнес, и в технических терминах, осталось только рутинно закодить\, имплементировать. Спасибо, что навели на эту мысль, понял почему не люблю детальные планы писать :)

Как по мне, то жёстких лимитов на незнакомые задачи быть не должно

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

Кстати, и после составления детального плана желание собственно код писать может пропасть: задача уже решена и в бизнес, и в технических терминах, осталось только рутинно закодить\, имплементировать.

Интересная мысль. Вы можете не планировать все максимально детально, оставить себе пространство для творчества и экспериментов.
Суть в том, чтобы ваша работа вписывалась в планы продукта и бизнеса. Часто будет достаточно дойди в написании планов до этапа, когда вы сможете оценить время на полную реализацию задачи и быть уверенным, что не выйдете за рамки своей оценки.

У нас примерно такой же процесс, только называем мы его Implementation Roadmap.
В зависимости от изначальной сложности user story, разработчик либо дальше требует декомпозиции (если слишком сложно), либо сам выписывает roadmap. Кстати выписывать его должно именно тот, кому собственно и делать — если например выписал/оценил один, а затем таск попал другому, то последний соответственно имеет право переписать roadmap согласно своему видению и дать оценку.

Implementation plan/roadmap очень хорош в связке работы senior/junior. Но даже если на проекте работает два разработчика примерно одинакового уровня, то хорошей практикой является cross-check — взаимная проверка правильности понимания истории и как её стоит делать.

Согласен с вами.
Вы также можете передавать истории с написанным Implementation Roadmap другому инженеру просто для knowledge sharing. К примеру, если в команде есть два опытных инженера, каждый из которых хорошо знает одну часть системы, но имеет плохое понимание остальных.

Даже часть потом может пойти в документацию при правильном оформлении.

Эффективней и в плане решения задачи, и в плане шаринга знаний будет, по-моему, совместное составление плана с активной ролью у менее опытного в этой части системы, а у более опытного — ролью модератора, корректирующего ошибки.

В первую очередь мы определяем, какие из user stories реализуем в следующем спринте. Далее задача инженера — составить пошаговый Implementation Plan для реализации каждой из них.

А как вы определяете что реализовывать в следующем спринте до того как у вас есть план? Без плана оцениваете и потом вносите изменения если после составления плана выснилось что нужно больше времени на задачу?

У нас есть написанные продакт менеджером или инженерами user story с описанием задачи внутри. Выстраиваем список таких историй, например, в колонке Next Up — это потенциальные кандидаты на следующую итерацию.
Затем, во время планнинг митинга, не без помощи implementation planов оцениваем истории из Next Up. И в замисимости от средней velocity команды и текущих приоритетов проекта, выбираем окончательные истории на следующую 2х недельную итерацию.

Спасибо.
Глобально подход нормальный. Разбивать на задачи каждую US.
Вот меня смущает один момент, детальное разбиение задач. Для этого должна быть хорошая экспертиза. А если проект только начался и там больше 4 разработчиков и все меняется?
Из статьи слабо понятно комплексное решение, надо слушать и общаться :)

думаю, не обязательно иметь хорошую экспертизу. она поможет быть максимально детальным, но можно начать и с не самого подробного планирования и разбиения.
иногда достаточно на верхнем уровне представить как вы будете задачу реализовывать, какая у вас будет последовательность действий. так часто можно сразу заметить возможность для разбиения и пареллелизации одной большой задачи на несколько мелких.

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

реализация планируется обычно за день до IPM. смысл в том, чтобы во время самого IPM было понятно как и что реализовать, сколько это времени займет.
тикеты для планирования, можно поделить между командой. однако, не обязательно самой реализацией будет заниматься тот же человек, который помогал с планированием.

Это именно то, что раньше называли Waterfall

Не совсем так. Вы видимо не работали не проектах по методологии Waterfall. Тут ребята планируют задачи под конкретной юзер стори для того, чтобы понимать загрузку по каждому и по команде на целый спринт.
Waterfall решает совершенно другие задачи и там целые этапы жизненного цикла разработки вынесены в месяца или кварталы.
Почитайте.

Суть атерфола именно в таком детальном планировании. Я работал по ватерфолу много лет и знаю о чем говорю.

Суть ватерфолла не в детальном планировании как таковом, а долгосрочном детальном планировании строго до начала любой разработки.

Просто не нужно слушать некоторых «ортодоксальных» Agile-коучей, у которых вотерфолл — это всё, что не укладывается в их личное понимание аджайла.

я скорее описал планирование в рамках одной задачи (user story). предполагается, что каждая отдельная user story не должна занимать больше 2х дней на реализацию.
к тому изменения плана в процессе реализации — абсолютно нормальная ситуация.

Тогда этот план превратится не в план, а в отчёт о реализации?

изначальная цель — иметь план действий, но конечный чеклист с отмеченными пунктами можно конечно рассматривать и как отчет.

У меня вызывает глубокие сомнения, что план нужно актуализировать, если видишь что придерживаться его не получается и(или) не имеет смысла. По крайней мере если речь о планах в пределах пары дней.

Підписатись на коментарі