«У нас горят сроки, инвесторы требуют релиз как можно быстрее. Давайте наймем еще пятерых разработчиков и успеем к концу месяца?»
Если вы работаете с продуктами в ИТ, наверняка похожие ситуации происходили в вашей жизни. В понедельник клиент был абсолютно уверен: пять дополнительных программистов, и мы точно успеем. Во вторник в календаре не осталось свободных слотов — бесконечные синки и ни минуты на поработать. А к пятнице вместо того, чтобы писать код, опытные ребята объясняли новеньким, где что лежит и как всё устроено.
Классическая история. Кажется: два человека — в два раза быстрее сдадим проект, десять человек — в десять раз быстрее. Логично же?
Ну, на самом деле нет. С каждым новым участником команды появляется всё больше точек, где нужно согласовывать решения и синхронизировать изменения. А критические вещи — спроектировать архитектуру, продумать структуру базы, настроить интеграции, согласовать бизнес-логику — всё равно остаются последовательными этапами. Их просто не получится делать одновременно, даже если вы соберёте сотню программистов.
Почему добавление людей только замедляет проект с горящими сроками
В чём корень проблемы? Вот типичная логика: чем больше людей в команде, тем проще распределить между ними задачи. Значит, всё сделается настолько быстрее, насколько больше исполнителей мы привлекли. Так обычно рассуждают те, кто никогда не создавал цифровые продукты своими руками.
А теперь как есть на самом деле. Представьте, что вы строите дом (возьмем метафору чуть менее избитую, чем про беременную женщину). Процесс долгий, и да, некоторые операции реально можно распараллелить. Позовите десять маляров — они покрасят все комнаты за два дня, а не за неделю, если бы один человек ходил из комнаты в комнату.
Но попробуйте одновременно залить фундамент и проложить коммуникации. Или расставить мебель, пока кладёте плитку на том же самом полу. Не получится физически. И здесь хоть триста специалистов зовите — быстрее заселиться не получится.
И это ещё полбеды. Реальная проблема в том, что с каждым новым человеком резко вырастают затраты времени на координацию. Это закон Брукса, который гласит: если в проект, у которого уже проблемы со сроками, добавить людей, сроки только растянутся.
Новичков нужно вводить в курс дела. Опытные разработчики отвлекаются от своих задач, чтобы объяснить новеньким, как всё устроено. Недели три-четыре производительность падает у всех — и у тех, кто объясняет, и у тех, кто разбирается.
Координация съедает время. Появляется больше созвонов, больше проверок кода, больше согласований. Кто‑то ждёт, пока коллега допишет свой кусок. Другой ждёт результатов тестирования. Третий не может двигаться дальше, пока не получит фидбек по своей правке.
Также созвоны, которые для маленькой команды занимали небольшое количество времени, могут нелинейно растянуться.
Ключевые этапы всё равно идут по очереди. Архитектуру нельзя проектировать параллельно — это последовательное принятие решений. Модель данных тоже. Интеграции настраиваются одна за другой. Релизы выходят по очереди. Скорость здесь определяется качеством решений, а не количеством рук.
Технический долг будет только расти. Новые люди, которые ещё не до конца разобрались в проекте, чаще делают ошибки. И на их исправление опять уходит дополнительное время.
Проджекту и тимлиду становится сложнее выбрать разработчика, на которого назначить задачу. С командой старичков любую задачу можно назначать на любого человека: нужно учитывать только текущую занятость. Если набираем новичков, то становится все сложнее распределять ответственность.
Насколько можно ускорить релиз через найм
Окей, допустим, мы всё равно хотим сделать тот же объём работы быстрее просто за счёт увеличения команды. Можно хотя бы посчитать, на что рассчитывать? Для этого обратимся к закону Амдала. Он показывает теоретический потолок ускорения. Помним: часть работы можно делать параллельно, а часть — только последовательно.
Если доля параллелизуемых задач — p, а людей у нас N, то максимальное ускорение S:
S(N) = 1 / ((1 - p) + p / N)
А реальное время T при N людях:
T(N) = T(1) × ((1 - p) + p / N)
Это идеальные условия, когда нет вообще никаких накладных расходов на синхронизацию. В жизни будет только хуже.
Давайте посчитаем на примере. Допустим, 70% задач можно распараллелить (p = 0,7), и один разработчик делает весь объём работы за 9 месяцев. Мы наняли девятерых, думая, что уложимся в месяц. Что получается:
S(9) = 1 / ((1 - 0,7) + 0,7/9) ≈ 2,65
T(9) ≈ 9 мес / 2,65 ≈ 3,4 мес
То есть даже в идеальном мире, где нет затрат на координацию по Бруксу, мы получим максимум 3,4 месяца. А не один.
Чтобы уложиться в месяц при исходных девяти, нужно ускорение в 9 раз. По формуле 1/((1 - p) + p/9) = 9 получаем, что p должно быть равно 1. То есть нужна стопроцентная параллелизация всех задач. Что в реальности невозможно.
Вывод банальный: чтобы реально ускориться, нужно менять сами задачи и их организацию, а не просто кидать в проект больше людей
Как реально ускорить разработку: практические шаги вместо увеличения штата
Парадокс, но всё, о чём сейчас пойдёт речь, тоже требует времени на внедрение. Однако это та самая инвестиция, которая окупится не только на текущем проекте, но и на всех следующих. Однажды настроенные процессы становятся вашим универсальным ускорителем.
Шаг ноль: сначала поймите, что на самом деле тормозит
Львиная доля задержек релизов происходит вообще не из‑за нехватки рук.
Бывает, в разработку просто нечего отдавать, потому что дизайн и аналитика не поспевают. Или ситуация противоположная: материалов вагон, но они постоянно меняются и дополняются. Это называется feature creep, и добавить людей в такой проект — всё равно что подливать бензин в костёр.
Потратьте несколько часов и проверьте четыре момента:
Есть что разрабатывать? На две‑три недели вперёд должен быть запас задач с нормальным описанием и готовыми макетами. Если нет — проблема не в разработке, а в дизайне или аналитике.
Можно быстро развернуть тестовую версию? Любой разработчик должен самостоятельно поднять проект и задеплоить свои изменения на тестовый стенд минут за 10-15. Если это не так — у вас проблемы с окружением разработки и DevOps-практиками.
Сколько задач просто висит в ожидании? Если больше половины задач ждут макета, доступов или каких‑то решений — новые разработчики вам не помогут. Вообще.
Сколько времени уходит на проверку? Код-ревью — пару часов максимум. Автотесты — меньше часа. Ручное тестирование — рабочий день. Если всё это дольше — у вас узкое горлышко, которое расширение команды только усугубит.
Первый шаг: используйте готовые решения
Это реально сокращает объём критических последовательных задач и увеличивает долю независимых, которые можно делать параллельно.
И ещё момент: унифицируйте повторяющиеся вещи в том, что уже написали. Если у вас на сайте три типа контента — не делайте три разных редактора. Сделайте один с настраиваемыми полями или переиспользуйте существующий. Меньше кода — проще жить. Проще тестировать, проще вносить изменения, проще поддерживать.
Второй шаг: зафиксируйте правила игры
Контракты между компонентами системы. Идея простая: сделать обмен данными предсказуемым, даже если в проекте куча неопределённости (а ее всегда куча). Не нужно расписывать всё до мелочей на века вперёд. Зафиксируйте минимально необходимые правила, которые дают команде свободу действий и снимают лишнюю головную боль.
Для каждой точки обмена данными (клиент–сервер, сервис–сервис, ваш бэкенд–внешние системы) проговорите и запишите: кто инициирует запрос, кто отвечает, какие поля туда-сюда передаются. Сразу задокументируйте это и положите туда, где увидят разработка, тестирование и эксплуатация.
Контракты внутри команды. Ещё один способ снизить когнитивную нагрузку — определения готовности задач. Definition of Ready отвечает на вопрос «когда задачу можно брать в работу». Definition of Done — «когда её можно считать законченной и закрыть».
Всё это, кстати, сильно упрощает жизнь и новым людям. Приходит человек на проект и сразу видит, как описаны интерфейсы, где что лежит, как принято работать. Он просто следует понятным шаблонам, а не пытается по крупицам собрать картину из чатов. И ему работать приятнее.
Главное — не перегнуть палку. Если вы начнёте плодить горы документов, их версии, сложные процедуры согласования, то поддержка всего этого хозяйства станет дороже самой разработки. Признак того, что вы переборщили: люди боятся трогать описание, потому что там все адски сложно, и любое изменение требует половины рабочего дня на совещания.
Третий шаг: режьте функциональность вертикально
«Вертикальный срез» — это небольшой пользовательский сценарий, который проходит через все нужные части системы и даёт законченный результат. Его можно показать реальному пользователю и получить живую обратную связь.
В отличие от подхода «сначала вся логика, потом вся вёрстка, потом все интеграции», вертикальный срез не требует ждать, пока «дозреет» соседний слой. Он уже готов, его можно потрогать.
Если поделить весь продукт на такие срезы, вы сможете гибко управлять объёмом работ в каждом из них. Время поджимает? Другая фича стала важнее? Не проблема — режем скоуп конкретного среза, не трогая остальное. Подробнее о том, как это делать, мы писали в статье про FFF.
Как превратить кучу фич в срезы? Возьмите большой блок («оплата», «личный кабинет» или «каталог») и разверните его на 3-5 минимальных путей пользователя. Вот пример с оплатой:
- первый срез — «оплата картой без сохранения и без промокодов» (самое базовое)
- второй — «оплата с промокодом»
- третий — «оплата с сохранением карты для будущих покупок»
- четвёртый — «оплата подарочным сертификатом»
Каждый срез содержит ровно столько UI, логики и интеграций, сколько нужно, чтобы пройти путь от начала до конца.
Для управления срезами заранее договоритесь: что входит в минимальную версию и чем можно пожертвовать ради раннего запуска. Пусть один человек принимает быстрые решения об упрощениях и следит, чтобы срез не раздулся.
Четвёртый шаг: уберите избыточную координацию
Об этом все говорят, но многие понимают буквально: «удалить встречи из календаря». Но прям так не надо.
Да, стоит сократить регулярные созвоны до разумного минимума. Но параллельно нужно перевести договорённости в письменные каналы. Чтобы это работало, организуйте единую понятную структуру: тема, решение, ссылка на конкретный артефакт. Так вам не придётся записывать встречи и потом рыться в расшифровках — все решения уже зафиксированы в одном месте.
Если на проекте делаете код-ревью — оптимизируйте этот процесс. Сделайте его максимально предсказуемым: чёткий чек-лист критериев, понятные SLA по времени проверки, короткие очереди.
Если смотреть ещё шире: дело не только во встречах как таковых. Правильнее убрать сами обсуждения, дав людям право самостоятельно принимать решения в продукте, опираясь на ключевые сценарии из предыдущего пункта.
Важно донести до команды простую мысль: важнее сделать продукт, а не обсудить, какого цвета должна быть кнопка. Кнопку всегда можно перекрасить за пять минут. Мы готовы смириться с минорными косяками, которые легко поправить потом.
Когда расширение команды реально имеет смысл
Безболезненно увеличить команду и ускорить работу можно только тогда, когда у вас уже есть понятные правила игры и подготовлены независимые блоки задач, которые можно делать параллельно.
Вот простой тест: можете ли вы прямо сейчас выдать новому человеку план работы на две недели вперёд без оговорок типа «зависит от того, что сделают другие»? Если да — отлично, тогда расширение команды действительно ускорит работу, а не создаст новые проблемы. Давайте подробнее.
Эффективный онбординг разработчиков: опоры и предсказуемая первая неделя
Тут говорим про вообще любого человека, который только пришёл на проект. Неважно, какие у него специализация или грейд — описанные ниже правила работают для всех.
Выберите зоны для новичков. Нужны участки, где задачи повторяются и мало зависят от решений других людей. Например:
- вёрстка на готовой дизайн-системе
- перенос контента по шаблону
- написание автотестов по уже описанным сценариям
- небольшие сервисы на одном и том же каркасе
На входе в каждую такую зону у нового человека должны быть четыре опоры:
- Ссылка на действующий контракт или спецификацию
- Примеры данных для работы
- Инструкция для запуска окружения
- Понятные критерии того, что считается готовым результатом
Человек должен сразу видеть, как работать и что значит «выполнено».
Сделайте онбординг коротким и предсказуемым. Подготовка проекта к адаптации новых людей и удобный developer experience должны быть в приоритете.
В идеале у каждого разработчика в голове должна сложиться такая картина:
- Я понимаю архитектуру приложения и принципы написания кода — они нормально описаны
- Я знаю, как проверить и задеплоить свои изменения без ошибок, есть тестовые данные и готовые тесты
- Я понимаю функциональность продукта и то, над чем буду работать, вся информация в одном понятном месте
- Проверка кода максимально автоматизирована — линтеры, кодстайл, SAST, AI-помощники уже настроены
| Вот как может выглядеть первая неделя: | |
| День 1 | Новичок поднимает окружение по инструкции и прогоняет готовый сценарий от начала до конца |
| День 2 | Отправляет первую небольшую правку под фичефлагом и проходит ревью по чек-листу |
| К концу недели | Закрывает небольшой пользовательский сценарий целиком |
Начальные задачи выбирайте так, чтобы они опирались на уже готовые шаблоны, а не требовали разбираться в уникальных хитростях вашего проекта.
Установите ограничители. Чётко разделите, какие решения новый участник принимает сам, какие согласует с ответственным за архитектуру, а какие вообще трогать нельзя.
Договоритесь о сроках код-ревью и реально их держите. Если очередь на проверку растёт, сразу смещайте приоритет на её разбор. Иначе вся выгода от расширения команды испарится уже через неделю.
Дальше масштабируйтесь осторожно
Добавляйте людей ограниченно и только туда, где предыдущая порция уже окупилась. Признаки окупаемости:
- релизы стали чаще
- среднее время код-ревью сократилось
- задачи закрываются без дополнительных встреч и согласований
Если после добавления двух новых разработчиков среднее время прохождения типовой задачи не изменилось — ставить третьего в ту же зону бессмысленно.
Помните о качестве, а не только о количестве. На практике замена нескольких мидлов и джунов на пару сильных сеньоров на критических участках даёт кратный эффект.
Разница не только в опыте. Разница в подходе к работе. «Добросовестный исполнитель» в срочном и неопределённом проекте теряет темп — он избегает риска, ждёт чётких инструкций, боится ошибиться.
А вот люди с мышлением решателя проблем ведут себя иначе. Они быстро находят опорные решения, берут ответственность, координируют коллег и двигают проект вперёд без лишней суматохи.
Как распознать «решателя»? Смотрите на конкретные маркеры в работе и на собеседовании:
- Человек быстро формулирует план из нескольких шагов, даже если данных неполные
- Уточняет границы задачи и сам предлагает, что можно отложить, чтобы не тормозить релиз
- Фиксирует договорённости (не надеется на память)
- Не боится принимать обратимые решения и вовремя эскалирует необратимые
- Держит прозрачность в коммуникации, коллеги всегда знают, на каком он этапе
Мы на своих проектах убедились: такие ребята на вес золота. Поэтому стараемся растить их внутри команды.
Измеряйте результат
Для каждого расширения команды определите метрики успеха. Договоритесь о них заранее, особенно если усиление короткое — на пару-тройку спринтов.
Для долгосрочных усилений обычно смотрят на:
- Throughput — поток выпускаемых задач
- Lead time — время от начала работы над изменением до его выкатки
- Частоту релизов — как часто выходят версии
- Качество — количество и критичность багов в продакшене
Если все показатели улучшаются вместе — расширение работает. Если два из них стоят на месте или ухудшаются — откатитесь назад: стабилизируйте правила, упростите сценарии, доработайте окружение. И только потом снова пробуйте масштабировать.
Запомните простую вещь: людей имеет смысл добавлять только тогда, когда вы убрали лишние зависимости между задачами, подготовили независимые участки работы и сделали процессы предсказуемыми.
Масштабируйтесь аккуратно. Измеряйте успех скоростью выполнения задач, а не количеством людей в команде.
Тогда каждый новый специалист действительно приблизит релиз, а не добавит ещё одну причину для задержки.
7 шагов от идеи продукта до запуска
Гайд
Гайд из 7 шагов, с которыми путь от идеи до запуска становится яснее. Чёткая последовательность, понятные объяснения, рабочие шаблоны. То, что мы сами кладём в рюкзак перед стартом
получить гайд