Как разработчик и продакт политики безопасности на даче настраивали. Сказ о сложности планирования

Как разработчик и продакт политики безопасности на даче настраивали. Сказ о сложности планирования - 1

Привет, Хабр! Меня зовут Владимир Казаков, я руковожу продуктом «Обучение» в МТС Линк. В его основе — решение для вебинаров, с которого мы начали 16 лет назад как самостоятельный продукт. Сейчас наша платформа для обучения решает более широкий круг задач, к ней добавились и новые продукты (Курсы, Формы). Растет ответственность, число вовлеченных команд, но кое-что остается неизменным — сложность с проставлением дедлайнов.

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

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

Действующие лица:
П — жена в роли Продакта.
Р — я в роли Разработчика.

День первый

11:00

П: Приоритетная таска! Нужно сделать замок в калитке, а то от старых хозяев навесной замок остался, неудобно ходить. Когда будет готово?

Р: Нужен ресерч, так что хз, но вроде недолго. Справлюсь за два часа.

Первоначальная оценка закоммичена в задачу «замок в калитке». Разработчик берет рулетку, линейку, листок в клеточку, идет измерять ширину профиля, толщину, расстояние до ригеля.

Р: Тут такое дело: профиль тонкий (5 см), нужно искать либы и компоненты, готовые для узкопрофильного замка. Могу ехать в магазин?

П: Ты че, куда? Потом сгоняешь. У нас еще задача «домашка сына» не в релизе. Помоги разблокировать.

Таким образом принято продуктовое решение снизить приоритет задачи «замок в калитке» для поддержки junior-разработчика с его эпиком по английскому языку.

Разработчик спустя какое-то время все-таки оказывается в магазине, достает фотку листочка в клеточку, приобретает нужные модули и платные компоненты (замок, ручки, прочие полезности).

День второй

11:00

Утренний стендап с кормлением детей прошел, пора браться за задачи по приоритетам.

П: Ну что, как там?
Продакт кивает на калитку. Разработчик тихо бурчит, что с таски холд не сняли, а уже спрашивают.

Р: Все ок, платные компоненты залиты на верстак, сейчас приступаю.

П: Когда будет готово?

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

Р: Часа два, к 13:00 выкачу на прод.

День второй

11:30

Р: Такая фигня: сверло есть только на 8, но надо на 10. Лучше на 12, но это тогда еще дрель покупать. Думаю, на 10 норм. Могу сгонять в магазин?

К счастью ехать всего 5 минут.

П: Погоди, давай тогда еще сделаем по пути задачу «подготовка к ужину». Пойдем, посмотрим, что надо купить там рядом.

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

Разработчик едет в магазин. В одном очередь, в другом кончилась баранина, в автомат с водой приехал кто-то с целым багажником баклажек…

Как разработчик и продакт политики безопасности на даче настраивали. Сказ о сложности планирования - 2

12:50

До срока коммита осталось 10 минут. Чистого времени работы: полчаса, которые частично пересекаются с эпиком «Поездка в магазин».

Р: Привет, я вернулся. Вот продукты. Я пошел, доделаю.

П: Стоять! А как же таска «обед»? Без него увеличивается риск «профессиональное выгорание». Давай детей кормить, затем возьми задачи «уложить дочку» и «домашка с сыном». Калитку доделаешь после них.

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

16:00

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

П: Ну что, как там?

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

П: Ничего непонятно, но очень интересно, держи в курсе.

16:10

Р: Тут еще фигня. Замок на проде, все зашибись и работает, но при ресерче не учли ширину декоративных накладок на ручки и замочную скважину. Если их приделать, то теперь ответная планка мешает, и калитка не будет открываться и закрываться.

П: Ну, убери нафиг планку.

Разработчик объясняет, что без нее створка будет болтаться, и по-другому нельзя. Вот совсем никак.

П: Когда готово-то будет? Обещал еще два часа назад!

Р: Сейчас поресерчу, что можно сделать.

16:30

Р: Ну смотри. Могу ручку на веревочку привязать, тогда, когда надо открыть, ты ее берешь, вставляешь, потом вот так убираешь, а то…

П: Не, нафиг, тестирование не пройдено. UX плохой, переделывай.

Разработчик смотрит на свою болгарку, с которой все в этом мире становится гораздо проще.

Р: Согласен. Тогда могу эти накладки декоративные тоже пилой фигануть. В акцептанс-критериях нет ограничения по внешнему виду с торца двери, колхозный легаси потом замажем чем-нибудь. Техдолг небольшой. Могут быть слайды с прочностью конструкции, но по нагрузочному тестированию в акцептанс-критериях тоже нет ничего. Устроит?

П: Иди нафиг со своей болгаркой. Давай нормально.

Принято продуктовое решение о дополнении акцептанс-критериев внешним видом с торца, прохождении UX и нагрузочных тестов.

Р: Тогда нужны другие ручки. Более узкие, чем эти. Могу ехать в магазин?

Тут ближайшим не обойтись, нужно ехать полчаса до нормального, где есть выбор.

П: Стоять! А как же сделать таску «шашлык на ужин»? Клиент в лице тещи уже едет, готово должно быть в 19:00, в магазин уже не успеешь.

Р: Ну, шашлык так шашлык — время есть еще.

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

22:00.

Разработчик успешно сдал таски «шашлык на ужин», «овощи и картошка в казане на гарнир», «покорми детей» и «уложи детей».

П: (с интонациями скрам-мастера на ретро) Ну вот, опять за спринт ничего не сделали. Даже таску с калиткой не зарелизили, хотя ты коммитился к 13:00 успеть!

Р:

Замок не на проде, показать на демо нечего, спринт провален.

Как разработчик и продакт политики безопасности на даче настраивали. Сказ о сложности планирования - 3

День третий

14:00

Р: Привет! Я заскочил в магазин — теперь есть новые ручки. Остается прикрутить.

П: А обещал еще неделю назад! Задачу поставили, обсудили, декомпозировали, а ты только теперь купил все, что нужно…

Р:

Метрика time-to-market выросла в десять раз из-за последовательности продуктовых решений и нескольких технических просчетов, связанных с недостатком профильной экспертизы и специфичным легаси от прошлого владельца. При этом чистое время работы и сторипоинты не менялись на протяжении выполнения таски.

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

  • Убрать задачу «обед» и работать с повышенным риском «профессиональное выгорание».

  • Принять сопутствующие риски и доверить самостоятельное выполнение задач «укладывание» и «домашку» junior-разработчикам.

  • Не совмещать подзадачу «купить замок» с задачей «закупка продуктов».

Тогда задача могла бы быть выполнена если не к 13:00, то к 14:00 шестого дня, что даже не привело бы к сдвигу важного эпика «шашлык на ужин», и спринт можно было бы считать успешным, оценку трудоемкости — приемлемо точной, а сдвиг сроков — не критичным.

 14:30

Р: Я закончил работу, готов браться за следующую важную задачу.

П: Отлично! У дивана как раз сломался подъемный механизм.

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

Как разработчик и продакт политики безопасности на даче настраивали. Сказ о сложности планирования - 4

Да, планирование — это сложно

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

Есть ли готовые решения для таких дилемм? Навскидку я вижу только два варианта и они, блин, противоречат друг другу.

Спустить дедлайн сверху

Ключевая задача планирования — ответы на вопросы «когда будет готово?» и «что для этого нужно?». В моем примере выше задача «шашлык на ужин» должна быть сделана к определенному часу, не раньше и не позже. При этом есть альтернативные варианты — заказать пиццу — и эта задача уже будет не нужна.

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

Спросить трудоемкость у самих разработчиков

И поставить эту цифру в план с каким-то дополнительным таймингом. Но что есть у нас для оценки сроков? Тоже не очень много.

«Гибко-жесткое» планирование

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

Казалось бы, что может быть проще? Вот тебе люди, задачи и оценки — сиди и рисуй свои диаграммы Ганта. Но управлять этим — та еще морока. Небольшая накладка, которая сдвигает одну задачу на час, может перенести ее на неделю. Не успел отдать таску в тестирование — коллеги закрыли набор фичей в текущий релиз, а следующий планируется только через неделю. Знакомо?

Да, бывают ситуации, в которых все задачи легко прогнозировать. Но есть обратный случай, когда «хрен его знает, надо ресерчить». Как правило, срок исследования вообще не предсказуем, а после него останутся только минимальные усилия, чтобы результат оказался на проде. Часто такие исследования по сути являются перебором вариантов. Когда решение найдено — все становится очень простым. Я такие задачи сравниваю с поиском грибов в лесу: можно выйти на опушку и набрать полную корзинку за 5 минут, а можно весь день ходить и ничего не найти.

Расчет по «средним показателям»

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

Предположим, за прошлое лето я собрал 5 кг грибов за пять заходов в лес. В среднем это по 1 кг за раз. Но на самом деле я 3 раза я вернулся ни с чем, один раз принес 1 кг, и один раз — сразу 4кг. Прогнозировать в таких случаях исходя из средних — нельзя, о чем нам говорит теория статистики. Более живой пример — средний километраж поездок в вашей машине. Он совершенно точно не говорит о том, что завтра вы проедете именно 30 или 50 км, даже если средний показатель за прошлый месяц именно такой. Может вы вообще за руль не сядете.

Что имеем в сухом остатке? Нужно уметь договариваться!

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

Автор: vmkazakoff

Источник

Оставить комментарий