05 сент. 2024 г.·7 мин чтения

Внешний CTO после пропущенных релизов: как вернуть доверие команды

Внешний CTO после пропущенных релизов может перезапустить scope, прояснить полномочия на релиз и исправить привычки, из-за которых команда постоянно срывает сроки.

Внешний CTO после пропущенных релизов: как вернуть доверие команды

Почему доверие ломается после трех пропущенных релизов

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

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

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

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

Когда внешний CTO приходит в такую команду, первая проблема обычно не в таланте. Проблема в вере. Люди больше не доверяют пути от запланированной работы к выпущенной. Хорошие инженеры принимают плохие решения по релизу, если считают, что дата все равно сдвинется.

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

Что проверить сначала

Начните с фактов, а не с мнений. Люди по-разному помнят одни и те же встречи. Планы релизов, задачи, changelog и заметки поддержки обычно показывают более ясную картину.

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

Потом проследите, что менялось после начала работы. Именно здесь доверие часто начинает трещать. Основатель просит добавить еще одну функцию. Продажи проталкивают запрос клиента. Инженер встраивает техническое исправление, которого не было в плане. Каждая просьба звучит мелко. Вместе они сдвигают финишную черту.

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

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

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

Поставьте жесткие границы scope

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

У релиза должна быть фиксированная цель до начала разработки. Запишите ее одним простым предложением. Если команда не может объяснить релиз именно так, scope все еще слишком размытый.

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

Большие обещания тоже нужно уменьшать. «Новый биллинг» — слишком крупная задача для одного релиза. «Клиент может обновить карту без обращения в поддержку» — это уже реальный кусок релиза. Меньшие куски снижают риск и дают команде честный шанс уложиться в срок.

Опциональная работа должна жить отдельно. Не оставляйте ее внутри текущего релиза с мягкой пометкой вроде «если останется время». Команды читают это как «все равно попробуем». Перенесите такую задачу в следующий релиз или в backlog. Если через неделю она все еще важна, она никуда не денется.

Один принцип быстро меняет поведение: после заморозки только один названный человек может одобрить изменение scope. И если что-то новое попадает в релиз, что-то сопоставимого размера должно из него выйти. Это заставляет делать реальные выборы. Люди перестают добавлять случайные просьбы, когда им нужно сразу сказать, что будет вырезано.

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

Передайте полномочия на релиз одной роли

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

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

Общая ответственность обычно означает, что ответственности нет. Если основатель, продуктовый менеджер, руководитель продаж и engineering manager могут каждый раз заново открывать scope, команда начинает понимать, что план не настоящий. Он превращается в рекомендацию.

Продукт должен защищать поздние идеи до заморозки, а не после. Когда заморозка уже началась, ответ по умолчанию — «нет», если только кто-то не убирает что-то сопоставимого размера. У инженерии тоже должно быть реальное право остановить релиз, если есть проблемы с качеством. Если сборка нестабильна, данные могут пострадать или неясно, как делать rollback, инженерия должна иметь право поставить релиз на паузу без разрешения sales или product.

Запишите эти полномочия простым языком и сделайте их короткими:

  • Владелец релиза решает, выходит релиз или нет.
  • Технический лидер может остановить релиз из-за качества, безопасности или отсутствия шагов для rollback.
  • Дежурный инженер может немедленно сделать rollback, если пострадали пользователи.
  • После заморозки изменение scope — это замена, а не добавление.

Небольшая SaaS-команда может работать по этой схеме с одной страницей и одной еженедельной привычкой. Продукт приносит последние запросы до заморозки. Владелец релиза фиксирует scope в согласованный день. После этого команда работает по плану. Когда люди знают, кто может сказать «да», кто может сказать «нет» и кто может откатить неудачный запуск, споров становится меньше, а даты снова начинают что-то значить.

Первые 30 дней

Исправьте следующий релиз
Получите короткий внешний разбор объема работ, ответственности и переноса, пока не сорвался следующий срок.

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

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

Задавайте простые вопросы и записывайте ответы обычными словами. Что сдвинулось? Кто добавил это? Кто одобрил? Если никто не может ответить, это часть проблемы. Скрытая работа — это все равно работа, и именно она чаще всего объясняет, почему дедлайны продолжают двигаться.

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

Третья неделя — это место, где команды часто ошибаются. Они пытаются вернуть доверие большим релизом. Вместо этого выпустите что-то меньшее и в срок. Исправление логина, сломанный отчет или одна ошибка в биллинге могут оказаться достаточными, если пользователи увидят улучшение, а дата будет соблюдена. Такой небольшой успех важнее длинного списка обещаний. Он учит команду, что закончить сейчас лучше, чем еще раз все планировать.

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

Маленькие исправления, которые меняют поведение

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

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

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

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

Еще одно полезное правило — не открывать заново уже завершенную работу, если только пользователи не столкнулись с реальной проблемой. Если кто-то передумал по поводу текста, макета или мелкого edge case, верните это в backlog как новую задачу. Когда «готовое» открывают снова, все привыкают к мысли, что ничего не заканчивается. Как только такая привычка закрепляется, оценки перестают много значить, релизы начинают плыть, а люди защищаются запасом в сроках.

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

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

Простой пример на небольшой SaaS-команде

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

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

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

Перезапуск начался с того, что обещание сократили до реальных возможностей команды. Почти все убрали. Остались только два пункта: исправить ошибки в инвойсах, с которыми клиенты сталкивались каждый день, и починить один сломанный CSV-экспорт, который был нужен финансовым командам.

Кому-то такой scope показался слишком маленьким. Эта реакция оказалась полезной. Она показала, насколько далеко команда ушла от того, что реально могла закончить за две недели.

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

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

Именно тогда доверие начало возвращаться. Не потому, что команда работала больше. Не потому, что план стал крупнее. А потому, что следующее обещание стало меньше, понятнее и правдивее.

Ошибки, из-за которых перезапуск не работает

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

Первая ошибка — менять цель после начала разработки. Команда договаривается выпустить пять вещей, а потом кто-то добавляет еще две, потому что этого попросил клиент, что-то пообещали продажи или у основателя появилась новая идея. Дата остается прежней. В итоге команда выглядит медленной, хотя план поменяли уже в середине пути. Если scope растет, дата релиза или список того, что вырезаем, должны меняться открыто.

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

Скрывать баги тоже ломает перезапуск. Команды делают это, чтобы роадмап выглядел аккуратно. Они убирают дефекты в личные заметки, расплывчатые задачи backlog или боковые чаты. В итоге доска статуса показывает «зеленый», а поддержка получает от пользователей злые сообщения. Грязная доска с реальными багами намного лучше, чем чистая, но лживая.

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

Лучше работает жесткая карточка показателей:

  • Что вышло на этой неделе
  • Что сдвинулось
  • Что сломалось после релиза
  • Что прямо сейчас заблокировано

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

Представьте простой случай. Основатель говорит клиенту: «Мы можем выпустить это в пятницу», не спросив команду. В среду QA находит два бага, продукт добавляет еще одну просьбу, и никто не обновляет дату. Наступает пятница, релиз сдвигается, и все делают вид, что удивлены. Это не проблема поставки. Это проблема правил.

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

Еженедельная проверка, которая делает релизы честными

Привлеките Fractional CTO
Используйте опытную поддержку CTO, чтобы перезапустить правила релизов без лишнего процесса.

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

На встрече нужно ответить на четыре вопроса. Совпадает ли запланированный релиз с scope, который был заморожен на прошлой неделе? Добавил ли кто-то работу, даже если она казалась мелкой? Может ли владелец релиза за одну минуту сказать, что должно быть правдой, чтобы релиз вышел? Если клиенты спросят сегодня, назовут ли support и продажи одну и ту же дату?

Если хоть один ответ расплывчатый, релиз уже сошел с курса.

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

Очень помогает одна привычка: сравнивать релизную карточку этой недели с замороженной версией прошлой недели строчка за строчкой. Команды обычно ломают доверие маленькими шагами. Дизайнер просит еще одну правку. Инженер добавляет задачу на уборку. Продуктовый менеджер говорит: «Раз уж мы здесь, давайте добавим еще и это». Ничего из этого не звучит драматично. Вместе это снова сдвигает дату.

Сделайте проверку практичной. Разбирайте только те пункты, которые отмечены для этого релиза. У каждой добавленной задачи фиксируйте человека, который ее одобрил. Просите владельца релиза вслух назвать критерии выпуска. Завершайте встречу одной датой, которую support и продажи смогут повторить. Небольшая SaaS-команда может делать это в одном и том же звонке каждый вторник.

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

Что делать дальше

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

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

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

Если нужна внешняя помощь, попросите короткий разбор трех вещей: правил scope, полномочий на релиз и переноса. Такой разбор не требует месяцев. Во многих небольших командах свежий взгляд замечает проблему уже через несколько встреч. Иногда слабое планирование. Иногда никто не умеет сказать «нет». Иногда старая работа снова и снова тянется вперед и называется прогрессом.

Хорошее внешнее руководство обычно сначала делает процесс строже, и только потом — сложнее. Это правильный порядок. Если вам нужна опытная поддержка, Oleg Sotnikov на oleg.is работает как Fractional CTO и советник для стартапов. Он помогает стартапам и небольшим командам с архитектурой продукта, инфраструктурой и практичной разработкой с упором на AI, не добавляя больше процесса, чем команда может выдержать.

Доверие возвращается, когда команда выпускает что-то маленькое, вовремя и под понятным управлением. Потом делает это снова.