Всем привет! Меня зовут Алексей Половинкин, я руковожу отделом 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.
Текучка, конечно, не низкая. В этом году отбор показал, что до конца стажировки доживают далеко не все. Многие отсеиваются в первые месяцы. Некоторые не могут уделять достаточное время, у других случаются форс-мажоры. В то же время из принятых стажеров уже появилось несколько перспективных ребят, которые в скором времени войдут в ряды нашей команды.
Количество стажеров
Количество заявок |
Взяли на стажировку |
Прошли стажировку |
Остались в штате |
87 |
23 |
15 |
6 |
Тенденции в компании
Я заметил в нашей компании несколько трендов. Например, многие клиенты категорически отказываются иметь дело с начинающими разработчиками или разработчиками низких грейдов. Им интересны только специалисты грейдов Middle и выше.
При этом хороших «мидлов и выше» на рынке не так уж много. Начинающие специалисты оказываются за бортом. Даже умные и сильные ребята, но без реального опыта разработки, не могут попасть в среду для быстрого и эффективного роста. Это большой рынок кадров, к которому стоит присмотреться. Зачастую вырастить себе специалиста оказывается дешевле и эффективнее, чем тратить месяцы на поиск, а потом месяцы на дообучение человека «с опытом».
Мы решили найти самородков на этом рынке и взрастить себе кадры. И этот путь оказался верным. С ростом компании, мы не можем оперативно закрывать кадровые вопросы. Стажировки дали еще один дополнительный, пусть и долгий, источник ресурсов.
В будущем мы планируем расширять программу. Брать более слабых разработчиков, продлевая им стажировку, пока они не достигнут необходимого уровня. Кратно увеличить количество стажеров в компании. Доработать все процессы, выстроить инфраструктуру для их роста. Это большая и сложная работа, но мы верим в эту идею и реализуем ее.
Если хотите стать стажером в AGIMA, присылайте резюме на hr@agima.ru. К резюме приложите небольшой рассказ о себе. |
Расскажите в комментариях, были ли вы сами стажером? Есть ли в вашей компании стажировки? С какими проблемами вы сталкивались, когда сами были стажером? Или с какими проблемами столкнулась ваша компания, работая со стажерами?
Комментарии (9)
Shmaiser
01.09.2022 08:09+5"которые практически не разбираются во внутренностях фреймворков" :-O
вы и квантовую физику спрашиваете? (но сначала как работают OS, CPU, ...)
хорошо что уже водителей уже не требуют разбираться во "внутренностях"
В ИТ все очень субъективно, и что сейчас в тренде будет уже не модно завтра, особенно на собесах...
larasage
01.09.2022 12:55+4Мы ищем именно горящие глаза, ребят, которые готовы посвятить всё свободное время развитию.
Как-то жестко написано, возможно это сильное преувеличение. Ибо, на мой взгляд, ведет в выгорание...
albiorix
01.09.2022 17:21+2думаю автор просто хотел сказать, что ищут тех кому это всё интересно и отсеять тех кто просто за баблом идёт в сферу ИТ
Tab10id
01.09.2022 14:34А как вы придумываете индивидуальные джунские задания которые с одной стороны довольно одинаковые по требованиям, а с другой стороны всегда идут в прод на момент завершения задачи. Мы у себя сталкнулись со сложностью выдумывания полезных, но не сложных проектов, которые при этом покрывают достаточное количество пунктов в матрице компетенций.
whoosaa Автор
02.09.2022 10:45Изначально стажеры работают либо над внутренними проектами (у нас есть достаточно большой роадмап внутренней архитектуры), либо подключаются к тимлиду и он выдает задачи с реального проекта. Первое преобладает практически всегда. Собственно, нам нужно проверить кандидата - сколько реального времени готов выделять стажировке, как быстро изучает доку и т.п. После этой проверке (где-то через месяц, все индивидуально) подключаем к проектам.
Из задач на первом этапе - всегда попробовать фреймворк. Что-то исправить в существующем проекте, написать новый небольшой микросервис, иногда поинтегрировать что-то с чем-то. Из последних примеров: интеграция SSO с ldap, забекапировать карточки trello в Django и вывести это все в админку.
На реальных проектах, стажерам отдаются автотесты, исправление багов, работа со сторонними утилитами (sentry, elk, new relic), реализация тех улучшений (healthchecks, loggers и т.п.). Для стажеров это все в новинку и будет всегда интересно, а разработчики будут заниматься более срочными задачами. Все естественно под контролем тилмидов.
Задачи найти не так сложно на самом деле.
Tab10id
02.09.2022 14:39У нас всё примерно так же, но в какой-то момент заметили что часть обязательных пунктов из матрицы стажеры в рамках этих работ не только не качают, но даже не знают что это такое. К примеру, механизмы фоновых задач или те же взаимодействия с внешними сервисами. Задачи на все эти вещи возникают регулярно но не всегда их можно дать первому попавшемуся стажеру.
В итоге через 3 масяца понимаем что стажеру нужно еще время для того чтобы доучить базовые штуки.
Но вероятно это наша специфика и нам просто с задачами не везёт=).
SamXYZ
Я пока учусь и учусь. Но проблема, что в моей компании не нужен ни python разработчик, ни аналитик.
И честно говоря чутка страшно с нуля проситься в компании.
Спасибо за подробный список компетенции.
whoosaa Автор
Не стоит бояться. Компании понимают, что стажировки это инвестиции в долгую и стажеры далеко не всегда обладают всеми нужными компетенциями. Для Вас это отличный способ пообщаться с профессионалами и понять, какие навыки вам стоит подтянуть. Если Вам повезет с интервьюером, то в фидбеке вы получите рекоммендации по изучению (книги/ссылки/статьи/технологии).