Всем привет! Меня зовут Алексей Половинкин, я руковожу отделом 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 и т. п. При завершении стажировки сотрудник должен быть готов к любой ситуации.

Черновая версия Roadmap для стажеров
Черновая версия Roadmap для стажеров

После мы даем небольшие задачи на изучение фреймворков Django и FastAPI. Ребята сразу делают независимые сервисы, где потребуется поработать с основными особенностями каждого фреймворка, поработать с БД, пооптимизировать запросы, поработать с nginx и Docker, настроить CI/CD, написать автотесты и т. д. Стажер должен, по сути, создать готовый микросервис, который мы потом интегрируем в инфраструктуру нашей компании. 

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

Задачи ментора — отвечать на вопросы и контролировать результаты. Поэтому каждый день мы проводим Traction Meetings со стажерами, чтобы у них была возможность поговорить и решить вопросы в реальном времени. В этом процессе главное — открытый подход. Чем понятнее и открытее вы будете к стажеру, тем проще ему будет интегрироваться в команду и работать над задачами.

Я не верю в полное систематизированное обучение по шаблонам. Индивидуальный подход к каждому стажеру показал свою эффективность, и мы остаемся на этом пути. Мы подходим к стажерам точно так же, как подходим к нашим разработчикам. Каждому нужен ИПР, каждому нужно оказать всестороннюю поддержку, чтобы разработчик мог эффективно работать и развиваться. 

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

Каждый навык из матрицы компетенций подробно расписан для стажера
Каждый навык из матрицы компетенций подробно расписан для стажера

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

Какие результаты и текучка

За прошлый год я поработал с пятью стажерами. Среднее время стажировки составило три месяца. Из пятерых стажеров мы взяли четверых. Из них спустя год у нас осталось двое. Один из ушедших решил переключиться в ML и Data-аналитику. Ушел в Яндекс. Второй тоже решил уйти в Яндекс — изучать технологии, с которыми мы не работаем. 

Оставшиеся двое успешно работают над нашими проектами, развиваются и в скором времени, я надеюсь, дорастут до грейда Senior. 

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

Количество стажеров

Количество заявок

Взяли на стажировку

Прошли стажировку

Остались в штате

87

23

15

6

Тенденции в компании 

Я заметил в нашей компании несколько трендов. Например, многие клиенты категорически отказываются иметь дело с начинающими разработчиками или разработчиками низких грейдов. Им интересны только специалисты грейдов Middle и выше.

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

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

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

Если хотите стать стажером в AGIMA, присылайте резюме на hr@agima.ru. К резюме приложите небольшой рассказ о себе.

Расскажите в комментариях, были ли вы сами стажером? Есть ли в вашей компании стажировки? С какими проблемами вы сталкивались, когда сами были стажером? Или с какими проблемами столкнулась ваша компания, работая со стажерами?

Комментарии (9)


  1. SamXYZ
    31.08.2022 20:57

    Я пока учусь и учусь. Но проблема, что в моей компании не нужен ни python разработчик, ни аналитик.

    И честно говоря чутка страшно с нуля проситься в компании.

    Спасибо за подробный список компетенции.


    1. whoosaa Автор
      02.09.2022 10:50

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


  1. Shmaiser
    01.09.2022 08:09
    +5

    "которые практически не разбираются во внутренностях фреймворков" :-O

    вы и квантовую физику спрашиваете? (но сначала как работают OS, CPU, ...)

    хорошо что уже водителей уже не требуют разбираться во "внутренностях"

    В ИТ все очень субъективно, и что сейчас в тренде будет уже не модно завтра, особенно на собесах...


  1. larasage
    01.09.2022 12:55
    +4

    Мы ищем именно горящие глаза, ребят, которые готовы посвятить всё свободное время развитию. 

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


    1. albiorix
      01.09.2022 17:21
      +2

      думаю автор просто хотел сказать, что ищут тех кому это всё интересно и отсеять тех кто просто за баблом идёт в сферу ИТ


  1. Tab10id
    01.09.2022 14:34

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


    1. whoosaa Автор
      02.09.2022 10:45

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

      Из задач на первом этапе - всегда попробовать фреймворк. Что-то исправить в существующем проекте, написать новый небольшой микросервис, иногда поинтегрировать что-то с чем-то. Из последних примеров: интеграция SSO с ldap, забекапировать карточки trello в Django и вывести это все в админку.

      На реальных проектах, стажерам отдаются автотесты, исправление багов, работа со сторонними утилитами (sentry, elk, new relic), реализация тех улучшений (healthchecks, loggers и т.п.). Для стажеров это все в новинку и будет всегда интересно, а разработчики будут заниматься более срочными задачами. Все естественно под контролем тилмидов.

      Задачи найти не так сложно на самом деле.


      1. Tab10id
        02.09.2022 14:39

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

        В итоге через 3 масяца понимаем что стажеру нужно еще время для того чтобы доучить базовые штуки.

        Но вероятно это наша специфика и нам просто с задачами не везёт=).


  1. albiorix
    01.09.2022 17:53

    отличная практика. до начала поиска работы мне казалось все так делают XD