Всем привет! Меня зовут Алексей Половинкин, я руковожу отделом Python в AGIMA. Последние пару лет мы набираем в команду больше стажеров. Это был наш эксперимент — хотели посмотреть, что из этого выйдет. Результат впечатлил: мы поняли, что нам нравится с ними работать. В этой статье я попробую разрушить несколько стереотипов о стажировках и объяснить, в чем плюсы работы с неопытными специалистами.
Предпосылки
Наша компания на рынке уже больше 15 лет. Мы занимаемся аутсорс-разработкой для крупных бизнесов и за это время реализовали огромное количество сложных проектов. Вместе с тем мы плотно работаем с подрядчиками, постоянно ищем людей как к себе в штат, так и в штат клиентов. Для примера, за прошлый год я провел больше 100 собеседований. В этом году уже 50.
Собеседований очень много: из 10 кандидатов мы берем 1. Большая часть из них не проходит по навыкам. Встречались разработчики, у которых 8–10 лет опыта, но которые практически не разбираются во внутренностях фреймворков, никогда не занимались оптимизацией ORM, плохо знакомы с SQL и т. п. Кандидаты просят высокую зарплату, но не дотягивают даже до Middle-грейда нашей компании.
И это, честно говоря, удручает. Зачастую поиски адекватного разработчика затягиваются на месяцы. В условиях нашего бизнеса это очень долго.
Подобная тенденция привела нас к мысли, что нужно все-таки открывать программу стажировки. Зачем? Мы решили, что уровень Junior+/Middle- вполне досягаем за полгода плотной работы над реальными проектами под менторством наших тимлидов.
В прошлом году мы взяли несколько стажеров «на пробу». Взяли активных ребят, с хорошим базовым пониманием Python, но без особого опыта в реальной разработке. Все они были разных возрастов — от 20 до 30 лет. Уровень навыков у них был «прошел курсы и работаю с Pet-проектами». Затем дали им несколько небольших внутренних проектов, чтобы посмотреть на скорость их обучения и навыки. После этого подключили их к реальным проектам и дали возможность расти.
Результаты нас очень удивили. Из пятерых стажеров четверых мы пригласили в компанию. Все они показывали уровень качества не ниже, чем наши подрядчики. Поэтому в этом году мы решили подойти к стажировкам серьезнее: систематизировать программу обучения и дать ребятам более прозрачный Roadmap по стажировке.
Зачем же нужны стажеры?
В нашей компании качество на первом месте. Мы строим свою культуру разработки, ищем лучшие решения из нашего опыта, дорабатываем и переиспользуем их. У нас есть определенные требования к качеству ТЗ, реализованного кода, автотестам и безопасности. Эти требования и принципы приняты далеко не везде.
Когда срочно требуются ресурсы, найти их на рынке зачастую невозможно. Тогда мы запрашиваем их у наших партнеров. Но важным фактором работы с подрядчиками является текучка мозгов. Работая над сложными проектами, мы, по сути, качаем внешние ресурсы, что не приводит к накоплению экспертизы в компании.
И мы сделали ставку на долгосрочный актив в виде стажировок.
Наша задача — найти хорошего начинающего разработчика, дать ему задачи и ментора и привить нашу культуру.
Культура разработки — одна из основных наших целей как компании. Мы хотим, чтобы за код, который мы передаем нашему клиенту, было не стыдно. А такая культура невозможна без «благотворительности». Ей нужно делиться — только так мы увидим, где мы ошибаемся, где есть недочеты. Стажеры помогают обкатывать наши процессы, помогают выявить недостаточность информации, а зачастую преподносят что-то новое.
Как оказалось, если найти адекватного сотрудника, пусть и без богатого опыта в разработке, то его прокачка занимает не так уж много времени. Мы сделали ставку на три месяца по стажировке, чтобы определить, кто на что способен. После этого мы в течение еще трех месяцев оттачиваем навыки сотрудника и ожидаем, что он дорастет до уровня Middle. При грамотном подходе к процессам это вполне достижимо.
Еще один хороший повод завести стажера (да простят они меня) — это прокачивание навыков коммуникации у наших Senior и тимлидов. Процесс обучения требует определенных навыков: терпения, структуризации знаний, декомпозиции сложного на простое, умения объяснять. Эти навыки полезны во многих аспектах работы тимлида. И процесс обучения стажеров поможет прокачать или развить эти навыки.
Работаем мы и над тем, чтобы стажер, даже если он не пройдет стажировку или решит уйти в другую компанию, обладал теми качествами, которые мы видим в хорошем разработчике: внимательность, дотошность к мелочам, умение гуглить и решать сложные задачи, писать грамотный код, покрытый тестами, использовать линтеры, учитывать пограничные значения и неявное поведение.
Где искать стажеров
1. Мы достаточно плотно работаем с обучающими платформами: SkillBox, SkillFactory, Coursera и др. Были даже кандидаты, которые проходили наши курсы на Нетологии и GeekBrains — они узнавали меня на собеседовании. На многих платформах дают неплохой теоретический материал, который стараются подтвердить практикой. И по опыту, люди, которые выходят с курсов, обладают достаточным набором навыков, чтобы быстро дойти до позиции Junior-разработчика.
2. Иногда берем людей и без курсов. Один из наших стажеров пришел в компанию в возрасте 30 лет из юридической области. Он плотно читал книги, пробовал онлайн-платформы с задачами по Python, делал свои небольшие приложения. В конце прошлого года он успешно прошел стажировку и до сих пор активно растет в нашей компании.
3. Я общался с некоторыми компаниями, которые ищут стажеров в университетах. У них этот подход систематизирован, и людей они ищут сразу после ЕГЭ. Стажеры проходят стажировку напрямую в подразделениях компании и с очень большой вероятностью остаются в компании на годы после завершения обучения.
При этом отбор студентов жесткий. Компании стараются вкладываться в студентов с высокими оценками по профильным предметам, отбирают студентов определенных университетов и тратят на это много ресурсов. Это достаточно большой и сложный путь. К тому же, на мой взгляд, весьма рискованный. Мы, возможно, пойдем по нему, но не сегодня :)
Главное в поисках стажера — отсечь тех, кому неинтересно программирование. Мы ищем именно горящие глаза, ребят, которые готовы посвятить всё свободное время развитию.При этом мы не занимаемся обучением стажеров. Мы лишь даем им возможность расти и обучаться самостоятельно. Как говорили мои учителя, невозможно научить, можно научиться. Мы стараемся дать стажерам возможности для роста: задачи, теоретический материал, — подсказать правильный путь, рассказать про подводные камни, помочь с ошибкой, чтобы стажер не тратил неделю на ее поиски.
Как работаем со стажерами
Как и говорил, мы не обучаем стажеров, а лишь направляем их. Это не значит, что мы с порога бросаем их в котел программирования. Мы начинаем с общих вводных в работу программиста. Учим гуглить, рассказываем про основные инструменты разработчика (многие, например, не умеют работать с дебаг-режимом PyCharm), объясняем устройство основных систем и ресурсов.
Для стажеров мы разработали Roadmap, в котором перечислены все основные технологии, которые он опробует и освоит. Он достаточно большой и охватывает все прикладные технологии нашей компании — так мы укрепляем основы Python и Web. Входят туда и софт-скиллы: коммуникация, тайм-менеджмент, работа с TaskTrackers и т. п. При завершении стажировки сотрудник должен быть готов к любой ситуации.
После мы даем небольшие задачи на изучение фреймворков Django и FastAPI. Ребята сразу делают независимые сервисы, где потребуется поработать с основными особенностями каждого фреймворка, поработать с БД, пооптимизировать запросы, поработать с nginx и Docker, настроить CI/CD, написать автотесты и т. д. Стажер должен, по сути, создать готовый микросервис, который мы потом интегрируем в инфраструктуру нашей компании.
После этого мы стараемся подключить стажера к нашим реальным проектам. Каждому прикрепляем ментора. Он направляет и помогает стажеру, дает ему задачи и контролирует качество выполнения. При этом стажер сразу же интегрируется в команду, с которой будет работать после завершения стажировки.
Задачи ментора — отвечать на вопросы и контролировать результаты. Поэтому каждый день мы проводим Traction Meetings со стажерами, чтобы у них была возможность поговорить и решить вопросы в реальном времени. В этом процессе главное — открытый подход. Чем понятнее и открытее вы будете к стажеру, тем проще ему будет интегрироваться в команду и работать над задачами.
Я не верю в полное систематизированное обучение по шаблонам. Индивидуальный подход к каждому стажеру показал свою эффективность, и мы остаемся на этом пути. Мы подходим к стажерам точно так же, как подходим к нашим разработчикам. Каждому нужен ИПР, каждому нужно оказать всестороннюю поддержку, чтобы разработчик мог эффективно работать и развиваться.
Из системных подходов мы используем базу знаний нашей компании, которую постоянно пополняем. А еще пользуемся матрицей грейдов, где каждый навык декомпозирован. Матрица расшифровывает, какие технологии или ресурсы необходимо знать разработчику, чтобы претендовать на тот или иной грейд.
Ключевым моментом остаются дейлики, где стажер и тимлид должны прорабатывать сложные моменты. Это отличный бустер для стажера. Ведется и общий чат, где стажер в любое время может задать вопрос. В чате все менторы и стажеры, чтобы была возможность коммуницировать не только в черный ящик.
Какие результаты и текучка
За прошлый год я поработал с пятью стажерами. Среднее время стажировки составило три месяца. Из пятерых стажеров мы взяли четверых. Из них спустя год у нас осталось двое. Один из ушедших решил переключиться в ML и Data-аналитику. Ушел в Яндекс. Второй тоже решил уйти в Яндекс — изучать технологии, с которыми мы не работаем.
Оставшиеся двое успешно работают над нашими проектами, развиваются и в скором времени, я надеюсь, дорастут до грейда Senior.
Текучка, конечно, не низкая. В этом году отбор показал, что до конца стажировки доживают далеко не все. Многие отсеиваются в первые месяцы. Некоторые не могут уделять достаточное время, у других случаются форс-мажоры. В то же время из принятых стажеров уже появилось несколько перспективных ребят, которые в скором времени войдут в ряды нашей команды.
Количество стажеровДля кого строим CJM? | — для какого продукта?
— для какого сегмента ЦА? (персона) — приоритизируем — опираемся на аналитику Для каждого сегмента аудитории должна быть отдельная карта, т.к. мотивация отличается. Каждая CJM будет особенной, в зависимости от ряда факторов (от возраста до географии). |
---|---|
Количество заявок | 87 |
Взяли на стажировку | 23 |
Прошли стажировку | 15 |
Остались в штате | 6 |
Тенденции в компании
Я заметил в нашей компании несколько трендов. Например, многие клиенты категорически отказываются иметь дело с начинающими разработчиками или разработчиками низких грейдов. Им интересны только специалисты грейдов Middle и выше.
При этом хороших «мидлов и выше» на рынке не так уж много. Начинающие специалисты оказываются за бортом. Даже умные и сильные ребята, но без реального опыта разработки, не могут попасть в среду для быстрого и эффективного роста. Это большой рынок кадров, к которому стоит присмотреться. Зачастую вырастить себе специалиста оказывается дешевле и эффективнее, чем тратить месяцы на поиск, а потом месяцы на дообучение человека «с опытом».
Мы решили найти самородков на этом рынке и взрастить себе кадры. И этот путь оказался верным. С ростом компании, мы не можем оперативно закрывать кадровые вопросы. Стажировки дали еще один дополнительный, пусть и долгий, источник ресурсов.
В будущем мы планируем расширять программу. Брать более слабых разработчиков, продлевая им стажировку, пока они не достигнут необходимого уровня. Кратно увеличить количество стажеров в компании. Доработать все процессы, выстроить инфраструктуру для их роста. Это большая и сложная работа, но мы верим в эту идею и реализуем ее.
Если хотите стать стажером в AGIMA, присылайте резюме на hr@agima.ru. К резюме приложите небольшой рассказ о себе.
Комментарии и обсуждения статьи на habr.com.