Сказ о том, как мы процессы разработки в GRI меняли. Часть 1

Сказ о том, как мы процессы разработки в GRI меняли. Часть 1 - 1

Привет! Меня зовут Игорь Федорчук, я руковожу разработкой в направлении «Монобренды» в GRI.

За последний год компания заметно выросла: команд стало больше, изменений и интеграций — тоже. А процессы в разработке долго оставались такими же, какими были пару лет назад. В какой-то момент это перестало «склеиваться» само собой: ответственность размылась, централизованной точки входа в команды не было, а коммуникация стала слишком неэффективной.

Это первая статья о том, как мы пересобирали процесс разработки в GRI — от получения запроса от заказчиков до выкатки в прод. В этой части я разберу роли (тимлиды, техлиды, TPM), зоны ответственности и общий флоу. Во второй части покажем, как мы приземлили это в Jira и метрики, а в третьей — как масштабировали поставку: релизы, код-ревью и инциденты.

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

Как было устроено «до»

Организационно мы жили в логике функциональных направлений. CTO репортили лиды функций (техлиды): бэкенд, фронтенд, мобильная разработка, DevOps. Руководителю мобильной разработки репортили функциональные лиды iOS и Android.

При этом продуктовые команды, которые непосредственно пилили фичи, были кроссфункциональными: бэкендеры, мобильщики, тестировщики и так далее. Внутри таких команд не было выделенного человека, который нёс бы  ответственность за результат со стороны разработки.

Проблемы, которые проявились при росте

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

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

  • Нет человека, который агрегирует статус, даёт оценки, снимает блокеры и управляет обработкой багов.

  • Коммуникации начинают ломать доставку. За задачами разработчиков фактически следили продакты и проджекты. Это плохо работало: возникали проблемы взаимодействия, в результате никто со стороны разработки системно не управлял реализацией, и это приводило к срыву сроков и снижению качества.

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

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

Внедрение изменений

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

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

Мы решили сделать структуру проще и прямее:

  • тимлид — непосредственный руководитель и владелец команды (статусы, риски, помехи, организация работы, техническая проработка фич, верхнеуровневые оценки для бизнеса);

  • техлид — отвечает за технические решения и качество, но не руководит людьми.

Подробное описание ролей

Тимлид кроссфункциональной команды

Цель роли: обеспечивает эффективную работу кроссфункциональной команды (бэкендеры, фронтендеры, iOS- и Android-разработчики, QA, технический менеджер, продукт-менеджер) для своевременной и качественной поставки бизнес-ценности, соблюдая принципы прозрачности, предсказуемости и командного взаимодействия.

Основные обязанности:

1. Организация и содействие командным процессам:

  • Настраивает и поддерживать церемонии: ежедневные стендапы (daily stand-up), груминг, планирование спринта, ретроспективы.

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

  • Ведёт календарь командных мероприятий и сохраняет в Confluence ссылки и записи.

2. Планирование и управление загрузкой:

  • Определяет продуктивность команды на спринт с учётом отпусков, занятости и внешних факторов.

  • Фиксирует методику расчёта и использует её на планировании.

  • Следит за балансом загрузки участников команды.

3. Управление бэклогом команды:

  • Совместно с продактом и техническим менеджером структурирует и приоритизирует задачи.

  • Обеспечивает у каждой задачи наличие чёткой цели, критериев приёмки, ссылок на ТЗ, дизайн, макеты.

  • Актуализирует баг-лист и техдолг, следит за выставлением приоритетов.

  • Управляет и следит за техническим долгом команды.

4. Зоны ответственности команды: формализует и документирует в Confluence область ответственности команды в продукте, зависимости от других команд и внешних систем, контактных лиц по ключевым зонам.

5. Документирование и техническая ясность

  • Для ключевых фич оформляет технический паспорт, включающий в себя: цель и контекст, требования, архитектурные схемы, зависимости и риски, метрики успеха, план развёртывания и отката.

  • Обеспечивает прохождение документации через рецензирование инженеров, PM и QA, и сохраняет её в Confluence.

6. Координация и коммуникация:

  • Выстраивает прозрачную коммуникацию внутри команды и с внешними заинтересованными лицами.

  • Своевременно предупреждает о помехах и рисках.

  • Поддерживает культуру взаимопомощи и обмена знаниями.

7. Найм и развитие команды:

  • Участвует в формировании состава команды: готовит требований к вакансии, участвует в интервью, оценивает кандидатов.

  • Обеспечивает быструю адаптацию новых сотрудников, знакомит с процессами, назначает наставников.

  • Оценивает потребности в ресурсах и при необходимости инициирует найм.

8. Планирование преемственности:

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

  • Передаёт необходимый контекст, документацию и доступы выбранному заместителю.

  • Обеспечивает понятное документирование процессов и артефактов команды, чтобы их мог кто-то подхватить.

Ожидания от тимлида:

  • Предсказуемость: команда планирует и выполняет задачи с минимальными отклонениями.

  • Прозрачность: информация о задачах, приоритетах и прогрессе доступна всем заинтересованным сторонам.

  • Эффективность: минимизация простоев и неэффективных встреч.

  • Качество: задачи передаются в тестирование и на прод с соблюдением критериев готовности.

Развитие команды: наставничество, помощь в росте компетенций участников.

Техлид направления

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

Основные обязанности:

1. Люди и развитие:

  • Формирует и ведёт ИПР (индивидуальные планы развития) сотрудников своего направления.

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

  • Понимает мотивацию и карьерные ожидания каждого сотрудника.

  • Проводит регулярные индивидуальные встречи.

  • Отвечает за техническое наставничество и тренинг сотрудников.

2. Найм и адаптация:

  • Участвует в формировании профилей вакансий и требований к специалистам.

  • Проводит технические интервью, в том числе по системному проектированию и архитектуре).

  • Обеспечивает качество набираемых в своё направление сотрудников.

  • Настраивает и контролирует адаптацию новых сотрудников, закрепляет наставников.

3. Качество и релизы:

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

  • Отвечает за готовность релизов по своему направлению: актуальность тестов, корректность технических решений, устранение системных ошибок.

  • Проводит ретроспективу релизов, формулирует улучшения процессов.

4. Техническое развитие направления:

  • Определяет техническую стратегию развития: новые фреймворки, миграции, переходы.

  • Ведёт архитектурные инициативы и защищает их перед организацией.

  • Контролирует работу с техдолгом в направлении: формирование, приоритизация, контроль исполнения.

  • Внедряет и поддерживает метрики производительности и качества: дашборды, мониторинги, оповещения.

5. Взаимодействие с другими лид-ролями:

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

  • Консультирует PM и продуктовых лидов по техническим возможностям и ограничениям.

  • Выступает как носитель экспертизы направления при планировании дорожных карт и стратегических инициатив.

6. Планирование преемственности:

  • Готовит сотрудников в своём направлении, которые могут временно или постоянно заменить его в случае отпуска, болезни, увольнения.

  • Передаёт контекст: обеспечивает доступность документации, артефактов, решений и договорённостей.

  • Организует делегирование: распределяет зоны ответственности так, чтобы процессы не зависели от одного человека.

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

  • Формирует кадровый резерв: отслеживает сотрудников с потенциалом роста до роли лида, помогает развивать необходимые компетенции.

Как оценивается работа техлида направления:

  • Развитие сотрудников: ИПР составлены и актуальны, прогресс прозрачен, карьерные диалоги регулярны.

  • Найм: закрытие позиций, качество входящих сотрудников, успешность адаптации.

  • Качество и релизы: релизы предсказуемы, ошибки минимизированы, по проблемам проведены ретро, проконтролировано написание постмортема.

  • Техническое развитие: инициированы и реализованы архитектурные улучшения, снижен техдолг.

  • Состояние направления: есть прозрачные метрики (дашборды, отчёты), понятное видение развития.

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

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

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

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

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

Мы хотели сделать команды устойчивее и уменьшить зависимость от конкретный ролей. Поэтому сдвинули контур «описания и ведения» задач ближе к командам: объединили часть функций аналитика и проджект-менеджера в одну и назвали её TPM (Technical Project Manager). Этот человек не принимает продуктовых решений, но обеспечивает их качественную реализацию.

Далее мы выстроили процесс перехода к новой роли:

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

Подробное описание роли

Технический проектный менеджер (ТПМ)

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

Основные зоны ответственности

1. Анализ и постановка: подготавливает эпик и историю вместе с ПМ.

2. Координация:

  • Отслеживает кросскомандные зависимости.

  • Ведёт статусы, проводит встречи с другими ТПМ/EM.

  • Координирует релизы с учётом всех команд.

3. Операционное управление:

  • Следит за метриками (velocity, cycle time).

  • Помогает в планировании спринтов.

  • Участвует в груминге как технический аналитик.

4. Документация и знания:

  • Ведёт в Confluence документы, чек-листы релиза, историю изменений.

  • Размечает задачи по доменам для аналитики.

5. Тестирование и релиз:

  • Проводит эксплуатационное тестирование с доступом к «боевым» данным.

  • Проверяет соответствие фичи требованиям перед релизом.

  • Доносит до ПМ изменения в сроках или объёме.

6. Поддержка команды:

  • Разгружает EM на технических встречах.

  • Закрывает операционные вопросы в его отсутствие.

  • Следит за соблюдением процессов (playbook).

  • Определили несколько траекторий: кто-то из текущих коллег перешёл в роль TPM, кто-то остался в своей специализации, но перешёл на другой проект, а недостающие компетенции закрыли наймом.

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

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

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

Третье изменение: зафиксировали правила игры: роли, RACI и жизненный цикл инициативы. Когда в командах появились тимлиды и TPM, следующий логичный шаг — сделать ожидания и ответственность явными, иначе система продолжает ехать по старым рельсам: всё держится на личных договорённостях, только теперь между новыми ролями.

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

Поэтому мы вместе с руководителями разработки, СТО и руководителем TPM зафиксировали в документации базовые договорённости. Начали с простого: кто и за что отвечает. Затем разложили зоны ответственности по ролям (тимлид, TPM и другие), описали матрицу RACI (Responsible, Accountable, Consulted, Informed) и жизненный цикл инициативы — как она появляется, чем должна быть наполнена и в какой момент считается готовой к следующему шагу.

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

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

Выводы

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

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

Автор: IgorFedorchuk

Источник

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