{"id":14285,"url":"\/distributions\/14285\/click?bit=1&hash=346f3dd5dee2d88930b559bfe049bf63f032c3f6597a81b363a99361cc92d37d","title":"\u0421\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f","buttonText":"","imageUuid":""}

По 300 релизов в месяц: как мы выстроили процессы и до сих пор не выгорели

Привет, это Миша Шпаков из Timeweb Cloud. Вообще я управляю отделом разработки, но отдел маркетинга по-дружески попросил написать статью на VC.

Рассказываю об устройстве команды из 25 фулстек-разработчиков, которые каждый месяц делают сотни релизов.

Но для начала дисклеймер.

Каждая IT-компания по-своему трактует понятие «релиз». Мы называем релизом изменение в продукте, которое становится доступным нашим пользователям. Оно может быть продуктовым — то есть видимым, — когда что-то меняется в интерфейсе, или техническим, когда меняется стабильность и скорость сервиса.

Два года работы в трех шагах

Timeweb Cloud — облачная платформа, появившаяся в конце 2021 года. Она принадлежит группе компаний, создавшей одноименный хостинг.

Предоставляя облачные решения, мы помогаем клиентам по всему миру в создании, управлении и масштабировании IT-инфраструктуры. Обеспечиваем защищенное хранение данных, а также предлагаем управляемые сервисы Kubernetes, DBaaS и другие продукты как для бизнеса, так и для частных лиц.

В конце 2021 года Cloud стал развиваться как отдельное направление. На тот момент не было ничего: ни команды, ни дорожных карт, ни организованных внутренних процессов. Сейчас наша команда состоит из более, чем 30 человек — это фулстек-разработчики и продакты, которые, несмотря на общепринятые правила в IT, выпускают релизы даже по пятницам.

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

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

Шаг №1. Потратили время на вижн и планирование релизов

Первым делом мы поставили глобальные цели на 3-5 лет вперед, согласовали их с инвесторами и фаундерами. Далее сформировались итерации на полгода или год.

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

Дорожная карта

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

Таск-трекер

Шаг №2 Сформировали команду

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

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

Когда мы выстроили все процессы в офлайне и возникла необходимость в масштабировании команды, мы снова решились на работу с удаленными сотрудниками. Пока это проходит больше в формате эксперимента — все-таки намного удобнее работать всем вместе в нашем офисе в Петербурге.

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

Команда во время синка

Все разработчики Timeweb Cloud — фулстек. Говоря простым языком, эти ребята могут все: и красивый интерфейс сверстать (frontend), и архитектуру сделать (backend). Прежде чем прийти к такой схеме, мы пробовали набирать команду с классическим делением: front и back отдельно.

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

Команда фулстек-разработчиков дает нам максимальную скорость: мы можем брать ASAP-задачи, работать с трендами и менять вектор. Тем не менее часть команды стабильно закреплена за важными для бизнеса проектами — они занимаются конкретным продуктом и не двигаются из релиза в релиз.

Шаг №3 Проработали алгоритм для ASAP-задач

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

Например, когда тренд с нейросетями был на пике популярности, мы внедрили TimewebGPT на базе GPT 3.5 в службу поддержки Timeweb Cloud. Искусственный интеллект стал отвечать на вопросы пользователей. Из-за оперативного внедрения проекта в роадмап, часть разработчиков поставила на «стоп» текущие задачи и перешла работать с новым продуктом. Так у нас появился TimewebGPT в короткие сроки.

Как работать с ASAP-задачами

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

1. Получение и анализ ТЗ от продактов

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

Артефакт — это то, что объясняет работу системы: например, схемы, текстовое описание, набросок структуры API.

2. Разработка решения и доставка кода

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

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

3. Постревью

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

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

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

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

Что мы получили бонусом

Такая скорость выпуска релизов дала нам пару корпоративных традиций.

Пятничные «Демо». Из-за сжатых временных рамок и формата дейликов мы создали традицию пятничных встреч.

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

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

Демо-встреча

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

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

Внутренний чат

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

Телеграм-канал Timeweb Cloud

Так, локальный чат вырос в новостной канал, в котором мы собрали активное комьюнити IT-специалистов, наших клиентов и тех, кому интересна тема облачных технологий.

Кстати, подписаться на него можно по ссылке.

В общем: главные мысли

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

* * *

Такой путь нам пришлось пройти за два года, чтобы сейчас уверенно держать темп в 300 релизов каждый месяц, продолжать расширять команду и не расстраивать инвесторов и фаундеров 🙂

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

0
26 комментариев
Написать комментарий...
Jaroslav Baker

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

Ответить
Развернуть ветку
Timeweb Cloud
Автор

Действительно не работает 🤔 Закинули ребятам из команды хостинга 👌

Ответить
Развернуть ветку
Вася Пражкин

Ваши 300 релизов в месяц тестеры успевают посмотреть, хоть одним глазком?

Ответить
Развернуть ветку
Михаил Шпаков

У нас нет ручных тестировщиков, зато есть настроенный процесс и инструменты автоматизации, который позволяют минимизировать количество багов при релизе нового функционала, как раз писали об этом в статье

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

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

И пока этот подход в реалиях нашего бизнеса себя полностью оправдывает 😇

Ответить
Развернуть ветку
Вася Пражкин

Если все так красиво, как пишите, то как такие простые баги, как описанные выше, проходят на прод? Менюшка должна быть протестирована вдоль и поперек и не один раз.

Ответить
Развернуть ветку
Василий Наумкин

Заметка от команды Timeweb.Cloud, а картинка с багом от обычного Timeweb.com.

Это разные проекты с разными командами.

Ответить
Развернуть ветку
Михаил Шпаков

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

Ответить
Развернуть ветку
Абырвалг Абырвалг

Да явно какой-то удаленщик сделал и протестировал

Ответить
Развернуть ветку
Nikolay

интересно а кто тогда пишет e2e автотесты например если таковые есть?

Ответить
Развернуть ветку
Михаил Шпаков

У нас есть qa в команде, которые занимаются тестами (тесты, кстати, тоже на ts/js)

Сейчас все тесты делятся на несколько типов:
- скриншотные тесты: проверяем панель и сайт клауда
- тесты api для проверки dto в публичных и приватных методах
- e2e тесты функционала панели и сайта
- тесты инфры, когда мы не просто создаем сущности, например, сервер или базу данных, но и выполняем к ним подключения для проверки корректности работы после создания
- тесты скорости работы api
- тесты скорости и seo метрики в работе пу и сайта на основе лайтхауса

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

И есть далеко идущие планы по расширению количества и типов тестов 🤟

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

Ответить
Развернуть ветку
Nikolay

Спасибо за ответ

Ответить
Развернуть ветку
Андрей Шмиг

300 / 30 = 10 / 8 = 1.25 часа на релиз… а 1 релиз мб = 1 фиче / фиксе :)

Ответить
Развернуть ветку
Антон

Опа

Ответить
Развернуть ветку
Вадим Д.

Не, ну тут без стимуляторов явно не обходится 😉

Ответить
Развернуть ветку
Стакан чая

За сколько разраб таймвеба сможет накопить на трешку у мкада?

Ответить
Развернуть ветку
Keira Ayrapetova

Вы для себя спрашиваете? У нас есть вакансии, по ЗП договоримся 😏

Ответить
Развернуть ветку
Стакан чая

Не спасибо , веслать не мое

Ответить
Развернуть ветку
Keira Ayrapetova

И не наше, у нас не галеры 💆🏻

Ответить
Развернуть ветку
Стакан чая

Чуть по лучше да

Ответить
Развернуть ветку
Антон Кузьмин

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

Ответить
Развернуть ветку
Михаил Шпаков

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

На фронтенде у нас nuxt на сайте и react в панели управления, а для разработки всех новых микросервисов на бэкенде мы используем nestjs и python, есть какое-то количество сервисов, написанных на других языках, но это то, что досталось нам в наследство и от чего мы потихоньку избавляемся 👨‍🔧

Ответить
Развернуть ветку
Вася Пражкин
Мы называем релизом изменение в продукте, которое становится доступным нашим пользователям.

А-ха-ха. Хотя на бумаге звучит красиво - по 300 релизов в месяц. Прям как в том анекдоте - "Вот и Вы тоже говорите..". Ребят, главное не количество, а качество.

Ответить
Развернуть ветку
Андрей Шмиг

Про количество не соглашусь с вами — оно тоже имеет значение.

Ответить
Развернуть ветку
Вася Пражкин

Количество релизов никогда не переходит в качество.

Ответить
Развернуть ветку
Timeweb Cloud
Автор

У нас переходит… Аномалия получается 🤔

Ответить
Развернуть ветку
Вася Пражкин

Да нет, просто в розовых очках так видится )

Ответить
Развернуть ветку
23 комментария
Раскрывать всегда