Нашкодим по-крупному

Нашкодим по-крупному

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

Почувствовали необходимость

Мы запустили внутренний курс для джуниор-разработчиков под очень кодовым названием НАШКОДИМ. План следующий: отбираем лучших джуниор-кандидатов без коммерческого опыта, обучаем их в течение трех месяцев, получаем дужнов, готовых к коммерческим проектам.

Исходные условия: выстроенная и отработанная менторская программа, самовыдвиженец на пост куратора Юра Возлеев и скоуп боевых задач для практики новоиспеченных стажеров.

Спойлер: план сработал. Как – рассказываем.

Запустили набор

Мы составили основной скиллсет, без которого не получилось бы сделать тестовое задание. А также сформировали список «бонусных» навыков. Но даже если у кандидата изначально их не было – по нашему плану они должны были появиться после стажировки.

Так выглядели наши ожидания и пожелания:

Мы ожидаем, что наш кандидат:

- Пишет код на Swift и разбирается в UIKit

- Умеет работать с Interface Builder и Cocoapods

- Имеет базовые знания Git (add/commit/push) и знает, что такое Pull Request

- Разбирается в управлении памятью, коллекциях, структурах данных

- Сталкивался с GCD/Operation и делил свой код на потоки

- Умеет работать со сторонними библиотеками и сетью


Будет здорово, если кандидат:

- Работал с CoreData/UserDefaults

- Имеет демо-проект(-ы) или примеры кода на GitHub

- Понимает принципы SOLID, устройства архитектур и паттернов проектирования

- Разобрался с GitFlow

- Имеет опыт разработки

Обязательным пунктом также стало мотивационное письмо. Если его не было, человек отсеивался. Если было – принимали решение по совокупности резюме и результатов тестового.

Наша вакансия попала на обсуждение в чат SwiftBook. Некоторые относились скептически: «Набирают стажеров, а спрашивают про SOLID, ООП, VIPER…». Я не смог оставить такие комментарии без внимания и указал на формулировку в вакансии: эти навыки будут плюсом, но не обязательны.

Но это лишь вершина айсберга. В чате просили помочь с тестовым (не бесплатно) и отправляли скриншоты с моим фидбэком на него. Было интересно обсудить все это с новичками. Некоторые ребята после общения даже откликнулись на вакансию.

Юрий Возлеев, Ментор

Мы опубликовали вакансию на HH.ru, сделали небольшую рекламу в Instagram со ссылкой на нее и рассказали о проекте в нашей группе ВКонтакте. В итоге получили 70 откликов из 3 стран – России, Казахстана и Беларуси.

Выдали тестовое задание

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

Так выглядел макет
Так выглядел макет

Кандидаты могли использовать любые библиотеки и собственные наработки. Но это должно было быть оправдано. На выполнение задания мы дали неделю – при условии, что ментору Юре понадобилось около 6 часов. В результате ребятам хватало трех дней.

Идея тестового была максимально проста. Я открыл главный экран своего телефона и начал думать, что из приложений может повторить стажер. Под горячую руку попались приложения «Фото» и «Вконтакте». Повторять их полность -- задача не из простых, поэтому я решил взять немного функционала из каждого приложения и превратить это в тестовое задание.

Юрий Возлеев, Ментор

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

  • Соответствие ТЗ
  • Соответствие макетам
  • Работа с репозиторием
  • Структура проекта и чистота кода
  • Подбор сторонних инструментов и библиотек
  • Выбор архитектуры проекта
  • Навык работы с Interface Builder
  • Стабильность проекта и наличие Warning’ов

Из 70 откликнувшихся тестовое задание выполнили 58. Все они получили подробный фидбэк с плюсами и минусами, оценками по каждому пункту и объяснениями как лучше сделать в случаях недочетов. В среднем проверка одного задания занимала 10-15 минут.

Провели собеседования

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

Чтобы кандидатам было комфортнее, мы начинали все встречи с секции soft skills, где любой ответ правильный. Так ребятам было проще разговориться и плавно перейти к технической части. Кроме того, софт скиллы – важный фактор отсеивания людей, которые не хотят учиться, а просто хотят в IT. С такими сложно работать, а нам еще надо было их обучать.

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

Юрий Возлеев, Ментор

До этапа собеседований добрались 32 кандидата. На каждое интервью ушло примерно 1,5 часа. Как итог – мы сделали 5 предложений о стажировке и еще троих добавили в кадровый резерв.

Обучили необходимому

Программа обучения состояла из 15 лекций, которые мы разбили на три части – по пять в месяц:

1. Инструкция к основным инструментам: Jira, Gitlab, Firebase, Fastlane, Harvest.

2. Обучение работе с Git, GitLab. Схема разработки GitFlow.

3. Разбор структуры проекта и файлов. Чистый код. Основы верстки (Human Interface Guidlines).

4. Цикл разработки, технические задания, figma, оценки, декомпозиция.

5. Разбор Архитектур, SOLID и других парадигм. Основные паттерны проектирования.

6. Важность и применение CodeStyle, CodeReview и рефакторинга. Пирамида тестирования.

7. Повышение читаемости и тестируемость кода.

8. Структура файла, протоколирование, расширения, марки.

9. Работа с API, Serialize.

10. Localization. Rswift. Использование ресурсов.

11. Способы верстки. Storyboard, xib, SnapKit, базовый Autolayout в коде. Плюсы, минусы, наш подход.

12. Работа с хранилищами данных (UserDefaults, Keychain, CoreData). Крешлитика и Аналитика в Firebase.

13. Инструменты Xcode для дебага (View Hierarchy, Memory graph, lldb). AppCode для чистоты и читаемости.

14. Наши библиотеки, Kingfisher, Alamofire.

15. Работа с дополнительными инструментами Xcode.

На стажировку уходило от 20 часов в неделю: две лекции по 1,5 часа, остальное время – практика. Причем лекции мы ставили на первую половину месяца, чтобы потом ребята отрабатывали полученные знания и выполняли интересные задачи.

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

В конце каждого месяца мы проводили ассессмент – он занимал в сумме 6-8 часов. Стажер получал 10 вопросов по пяти пройденным темам: были задачки и на алгоритмы, и на архитектуру, и на поиск багов. В свою очередь, эйчары вновь проходились по софт скиллам. За все это мы ставили баллы.

Система оценок сформировалась следующая: 60-74 балла – «3», 75-89 – «4», 90 и более – «5». От результатов зависел не только размер стипендии, но и дальнейшее обучение. Если стажер набирал меньше 60 баллов, его ждало отчисление.

Пришли к успеху

По итогам стажировки мы получили 4 успешных кейса: три выпускника остались у нас в штате и из интернов превратились в джуниор+. Один получил оффер в американском стартапе, что тоже можно считать успехом.

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

Воронка выглядит так:

70 откликов было

58 рассмотренных тестовых и отправленных фидбеков

32 проведенных собеседования

5 предложений о стажировке

4 стажера

3 выпускника

Сделали выводы

Не бойтесь обучать

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

Рассказывайте про смежные области

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

Будьте аккуратны

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

Повторим

В марте мы собираемся повторить успех. Если хотите попробовать – пишите на job@mobileup.ru.

Редактор: Елена Майорова

Иллюстрации: Александр Юдин

1313
3 комментария

Ситуация с iOS-разработчиками на рынке труда была сложная, теперь стала еще сложнее.

Можно эту вступительную мысль как-то раскрыть? Сложная для кого: работодателя или работника?

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

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

2