Перейти к содержимому

Пять из двенадцати ушли за девяносто дней

Константин Потапов
12 мин

2013 год, Екатеринбург, Python. Текучка 42% в первые три месяца. После двух недель с бадди, багами и ментором стало 14%. Что сработало, что нет, и как это ломает удалёнка.

Пять из двенадцати ушли за девяносто дней

Вчера на HR-конференции снова говорили, что молодёжь нигде не держится. Уход в первые три месяца я давно читаю иначе. Человек мог быть нормальный. Система его не поймала.

Искали месяцами, уговорили джуна, через три недели стол пустой, счёт рекрутера уже оплачен. В 2013-м в Екатеринбурге мы нанимали Python и Django. Рынок был узкий, брали тех, кого было на что взять и кто был готов учиться.

За три месяца пришли 12 человек. За первые 90 дней ушли пятеро. 42%.

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

Процесса не было. Вот стол, вот ноутбук, выплывай. Так выплывают самые упрямые. Остальные уносят оффер.

Гипотеза была простая. Понятные первые две недели, ментор, задачи по ступенькам. Текучку хотели ужать ниже 20%, выход на самостоятельную работу ускорить, чтобы человек не сидел месяц в пустой папке.

Первые четырнадцать дней

Раньше день один звучал: настраивайся, если что спроси. Стало иначе.

09:00  руководитель: чем живём, кто клиенты, куда едем
10:00  тимлид: ноутбук, GitLab, Redmine, почта, Slack, инструкция
12:00  обед с командой
14:00  карта кода: где что лежит, какие правила
16:00  бадди на бытовое (не ментор): столовая, пропуск

К вечеру у новичка есть стол, доступы и два имени, кому писать. Он не герой онбординга. Он просто не брошен.

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

Неделя 2: маленькая фича на 4-8 часов, несколько модулей, мягкий срок. Первый день два-три часа рядом с ментором. В конце дня пятнадцать минут: где застрял. Ревью по каждому коммиту, не стопкой в пятницу. К концу второй недели в проде лежит его первая законченная вещь. Две недели без коммита и без имени, к кому идти, почти всегда кончаются разговором «не моё».

Три месяца по ступенькам

Понедельник, полчаса: живой инцидент прошлой недели, что сломалось, как чинили. Среда, час: два-три чужих пул-реквеста, учим смотреть код, не только писать. Пятница, 45 минут: кто-то из мидлов или сеньоров разбирает ORM, индексы, декораторы. База растёт внутри, не в курсе на стороне.

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

Месяц 1: баги, мелкий интерфейс, короткий рефакторинг, понятный край. Месяц 2: фича на день-два, правка готового API, тесты на старый код. Месяц 3: фича на 3-5 дней, эндпоинт с нуля, ускорение под присмотром. К концу квартала человек сам берёт задачу из бэклога и доводит до прода.

Что изменилось в цифрах

Через полгода после запуска.

Без программы
С программой
Ушли за 0-90 дней
42%
14%
67%
Остались через 6 месяцев
58%
86%
48%
Остались через год
50%
86%
72%

Ранний уход сжался втрое. Кто пережил первые три месяца, почти всегда доживал год. Повторный поиск стал реже. До программы самостоятельная работа занимала 4-5 месяцев, после 2-3.

Опрос через квартал, шкала до пяти. «Меня ждали в первый день»: 3.2 стало 4.7. «Понимал, чего ждут»: 2.8 стало 4.5. «Было к кому идти»: 3.0 стало 4.8. «Вижу свой рост»: 3.1 стало 4.6. Среднее 3.0 стало 4.7.

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

Что не сработало

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

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

Ежедневный стендап для новичков демотивировал: «я опять ничего не сделал». Им нужно время писать, не отчитываться. Хватает еженедельного разговора. Каждый день только если человек уже крутится на месте.

Что изменилось к 2025-му

Инструменты другие, человек тот же. Нужны край, имя и видимый шаг.

В 2024-м джун попросил у модели Django view. Код прошёл тесты и принёс function-based view в проект, где давно живут классы. Работает, ломает договорённость. Правило простое: моделью можно учить устройство middleware и генерить каркас теста. Копировать кусок, не понимая, куда он садится, нельзя. Такой код на ревью разбираем вслух: почему так, почему не так.

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

В 2013-м мы считали «ушёл / остался». Сейчас смотрю ещё несколько клеток. Время до первого коммита: хочу меньше четырёх часов. До первого осмысленного пул-реквеста: меньше пяти дней. Оценка ментора раз в неделю: от четырёх из пяти. Доля закрытых задач за 90 дней: выше 80%. Кругов ревью на первый код: меньше трёх. Если на второй неделе коммита нет, это флаг. Вмешиваться надо до заявления, не после.

Что стоит час до прихода

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

В первый день: короткое «рады, вот куда едем», час на доступы, обед, карта кода, представление бадди, один баг до вечера.

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

Ментор 2-3 часа в неделю, столько же на общие разборы. Рекрутер на замену это 3-4 недели плюс пустой первый месяц плюс дыра в команде. Сжатие раннего ухода с 42% до 14% отбивает эти часы в первом квартале.

На удалёнке первые три дня я расписываю жёстче, чем в офисе. Иначе человек остаётся один с Notion и стесняется писать в слак.

День 1-3, всё вживую:
09:00  знакомство с руководителем и командой
10:00  настройка с шарингом экрана
12:00  обед в камере, не «пойди поешь»
14:00  проход по коду, можно перебивать
16:00  бадди + короткий пинг

День 4-14: две-три живые сессии в неделю, ментор в тех же часах.
Месяц 1-3: обязательный созвон раз в неделю, остальное асинхронно.

Обратный порядок, async сразу с понедельника, у нас сжигал людей. Вопрос, написанный в 11:00, к 16:00 уже не про тот код. К концу второй недели человек решает, что он лишний.

Документация здесь вторична. Человек остаётся, если за две недели сделал коммит, знает два имени и видит следующую ступеньку. В 2013-м это были питонисты в Екатеринбурге. Схема та же у дизайнера на удалёнке, если первые дни его не оставляют одного с инструкцией на пятьдесят страниц.