https://habr.com/ru/company/lamoda/blog/541728/- Блог компании Lamoda
- PHP
- Python
- Go
Привет! Меня зовут Михаил Мохначев, я тимлид команды Core в Lamoda.
Наша команда занимается обеспечением работы сайта и системы приема заказов, что бы ни случилось. Мы очень активно используем язык Go — 95% трафика идет через сервисы, которые написаны на нем. Но также есть сервисы на РНР и Python.
У нас все время появляется много новых задач, а также копится техдолг, с которым надо разбираться. Поэтому мы часто нанимаем новых сотрудников.
Найти кандидата, чьи навыки идеально подходили бы под наш запрос, очень сложно. Go-разработчиков в принципе мало на рынке, а Go-разработчиков, хорошо знающих к тому же PHP/Python, еще меньше. Поэтому мы решили подойти к этой задаче по-другому: мы нанимаем РНР или Python-разработчиков, и сами учим их писать сервисы на Go по рецепту Lamoda.
Технический онбординг: структура
Для новых членов нашей команды, независимо от уровня их профессиональных навыков, мы обязательно проводим
технический онбординг. Дело в том, что сам язык Go достаточно простой, но инфраструктура вокруг него не очень проработана. В разных компаниях, где его используют, могут сильно отличаться методологии. И во время технического онбординга человек знакомится с тем, как мы пишем на Go именно в нашей компании.
Технический онбординг по Go в Lamoda:
- Представляет из себя статью-путеводитель в Confluence.
- Состоит из нескольких этапов.
- Рассчитан на прохождение за 2 недели.
После прохождения онбординга новый сотрудник подключается к выполнению рабочих задач на Go, даже если до того никогда не писал на этом языке. Дальше я расскажу подробнее о том, что конкретно происходит за эти две недели.
Этап 1: предварительный
Время прохождения этапа: 1 день.
Заведение задачи онбординга, в которой сотрудник логирует время и учится работать с нашим таск-трекером.
Настройка окружения на новом рабочем ноутбуке сотрудника.
Проверка доступов ко всем системам, которые потребуются в будущем для разработки новых сервисов.
Этап 2: теоретический
Время прохождения этапа: примерно 2 дня.
Теория Go — знакомство с документацией языка и основными практиками. Все нужные ссылки собраны в нашем путеводителе в Confluence.
A tour of Go — каждый сотрудник, изучающий язык, проходит этот вводный курс, который является стандартом в обучении разработке на Go.
Знакомство с нашими
внутренними спецификациями и требованиями (например, с соглашением о наименовании API-методов), которые будет необходимо соблюдать в дальнейшем при разработке.
Этап 3: создание собственного сервиса
Время прохождения этапа: неделя или чуть больше.
Сотрудник
сам придумывает тему для сервиса. Это может быть, что угодно: от некоторого подобия Redis до игр типа морского боя и т.п. Но есть обязательные требования: у сервиса должны быть “ручки” для общения с другими сервисами, и он должен взаимодействовать с базой данных.
В нашем путеводителе в Confluence есть
пошаговая инструкция для создания нового сервиса, которой мы следуем при реальной разработке. Свой тренировочный сервис новичок создает по этой же инструкции.
Так как мы используем подход Specification First, то первым делом сотрудник пишет
OpenAPI спецификацию своего сервиса.
Затем на ее основе создается базовый код приложения при помощи
генератора gogi.
После этого новичок приступает к
описанию непосредственной логики своего приложения. В путеводителе описаны все основные команды и есть ссылки на более подробную документацию по используемым инструментам.
Одновременно сотрудник узнает о том, как должна выглядеть структура приложения, как должно быть реализовано взаимодействие модулей между собой и с внешним окружением. Здесь есть разные важные моменты, которые мы используем в нашей команде. Например, названия папок, в которых лежит код, раньше часто вызывали холивары. Чтобы перестать терять на этом время, мы зафиксировали названия в специальной статье в Confluence — с ней также знакомится новый сотрудник.
Следующий этап —
тестирование. С unit-тестированием в Go все хорошо — оно по сути встроено в язык и описано в документации. А для функционального тестирования мы используем инструмент Gonkey (про автотесты с помощью Gonkey у нас есть целая
статья). Он не требует написания кода, лишь интеграции — и новичок знакомится с ним, тестируя свой сервис.
Важная часть путеводителя — ссылка на боевой сервис. Благодаря ей мы можем не описывать в инструкции каждый шаг и каждую букву: рассматривая устройство сервиса изнутри, новый сотрудник может разобраться во всяких нюансах и деталях самостоятельно. А еще это помогает поддерживать актуальность путеводителя. Потому что наши внутренние стандарты меняются и развиваются, и мы всегда даем ссылку на самый свежий и лучший по нашему мнению сервис из тех, что у нас есть.
Во время прохождения третьего этапа новый сотрудник вливается в нашу
рабочую коммуникацию. Сейчас, когда практически все работают из дома, нельзя просто подойти к кому-то и задать вопрос. Поэтому мы уделяем качеству коммуникации особое внимание. У нас проходят регулярные онлайн 1-to-1 встречи для обсуждения и решения возникающих вопросов.
Этап 4: инфраструктурный
На этом этапе сотрудник встраивает созданный им сервис в нашу систему.
Он узнает, зачем нужны
Makefile, и какие команды должны в них присутствовать.
А также какие
docker и docker compose файлы нужно создать, чтобы приложение могло развернуться через
Bamboo на боевом окружении, и чтобы другой разработчик мог развернуть его у себя локально.
Результат технического онбординга
Что получает новый сотрудник?
- Он изучает Go, причем не только теоретически, но и практически. Так, как это работает у нас.
- Познает все наши инструменты для создания сервисов.
- Осознает инфраструктуру.
Причем это происходит в комфортном режиме обучения: без стрессов и дедлайнов.
Что получает Lamoda?
- Мы узнаем новичка поближе, видим, как он пишет код. Не что-то краткое на бумажке в условиях собеседования, а полноценный сервис.
- Этот код мы рассматриваем на пул реквесте и можем скорректировать какие-то шаблоны, которые он использует, восполнить пробелы в знаниях, указать на тонкие моменты — и все это еще до того, как он получил первую рабочую задачу.
- Можем выбрать наиболее подходящие для него первые рабочие задачи.
Хочу подчеркнуть, что при помощи технического онбординга мы не пытаемся создать Go-гуру, который знает все от и до. Наша задача — научить человека писать сервисы по рецепту Lamoda.
В настоящий момент примерно половина нашей команды состоит из людей, набранных и обученных по описанной системе. Мы успешно работаем и справляемся с требованиями бизнеса и планируем использовать этот принцип найма и дальше.