В «Криптоните» работает Александр Авраменко. Он возглавляет направление системного программирования и вместе с командой создаёт сетевые сервисы и конвейеры обработки потоков больших данных с применением моделей машинного обучения в реальном времени. Александр рассказал нам в интервью об особенностях управления группой разработчиков, «red flags» на собеседованиях, мотивации команды и ситуации на рынке труда «растистов». А скоро выйдет вторая, «техническая» часть интервью — о языке программирования Rust, проектах и тех.стеке команды.  — Александр, ты руководишь группой Rust-разработчиков и наверняка часто собеседуешь кандидатов. Расскажи, как именно ты проводишь собеседования? — Я подхожу к собеседованию с большим набором «чекбоксиков», сгруппированным по разделам. Один раздел относится к языку программирования, другой — к разработке программного обеспечения, а третий — к опыту. Таким образом я не забываю ни об одной из сторон, а кандидат за ограниченное время демонстрирует все свои достоинства. — Как ты отсеиваешь кандидатов? Обращаешь внимание на «красные флажки»?— Это зависит от квалификации. Тревожные сигналы для меня — когда заявляют о владении Rust, прочитав первые разделы руководства и «успешно» запустив сгенерированную при создании проекта программу «Hello, world!». Или, когда представляют проект как свой, при этом не могут рассказать никаких подробностей хотя бы о своей части работы. Ещё настораживает, когда демонстрируют равнодушие к покидаемому проекту. — А кого бы точно взял в свою команду?— Очень привлекает, когда претенденты увлечённо рассказывают о своих проектах и используемых технических решениях, демонстрируют кругозор в области разработки и интерес к происходящему в нашей области.  — Как ты понимаешь: вольётся ли в коллектив разработчик, и как он будет работать?— Обычно я спрашиваю, какая у него была доля в общем проекте, с кем он взаимодействовал, как распределялись его задачи, сколько человек общалось с ним каждый день, как выстраивало работу руководство. Практически примеряя его предыдущий опыт на то, что ждёт его у нас, я могу увидеть противоречия и вытекающие из этого сложности, или наоборот. Обсуждение предыдущей работы или проектов — хороший повод, чтобы заранее увидеть человека в работе, хотя бы с его слов. — Ты даёшь тестовые задания на собеседованиях?— Нет. Мне кажется, что это своего рода лотерея. На собеседовании вносить элемент случайности я бы не хотел. В процессе обсуждения разных вопросов: технических, архитектурных, организационных, я прекрасно вижу, как мыслит кандидат, как и какие задачи он решает. Такой подход, на мой взгляд, точнее раскрывает кандидата, чем одна задача. Из 10 человек — 8 пришли в команду при мне. Ни один из них не решал задачи на собеседовании и ни один из них не ушёл. — Как ты выстраиваешь работу в команде? Есть ли у вас разделение по проектам или каждый занимается задачами своего уровня во всех проектах параллельно?— Для системного программирования наша команда не самого маленького размера — 10 человек. Примерно поровну между старшими, средними и младшими разработчиками. Это позволяет вести одновременно ряд проектов: на сегодня 6 в разработке, из них 3-4 в активной фазе. Команда формировалась при мне, поэтому к правилам, как выстраивать работу, мы приходили эволюционно. Распределение задач является «топологической» задачей поиска оптимума по нескольким критериям:  те, кто давно в проекте, лучше его знают и выбирают более удачные решения частных задач; схожие задачи возникают в разных проектах и, сделав что-то в одном проекте, легче повторить то же самое в другом; нежелательно допускать, чтобы команда разделялась на отдельные несвязанные группы по проектам; в каждом проекте должны быть старшие и младшие разработчики; желательно, чтобы каждый участник команды знал все наши проекты и поработал в каждом.  — Получается, что твой подход к управлению командой такой же, как в распределённых вычислениях. Только здесь ты уже управляешь естественными нейронными сетями:)— Я стараюсь так делать. Конечно, всегда есть, что улучшить, но я стремлюсь к саморегулирующемуся управляемому механизму, который не требует постоянного мониторинга. То есть равновесное состояние которого — это нормальное функционирование. — Ты практикуешь микроменеджмент? — Мы всегда планируем конкретные задачи на неделю, и это моя ответственность. Вместо личного контроля за кодом каждого я стараюсь использовать «перекрёстный» контроль между коллегами. В этом смысле очень помогает code review, с помощью которого мы получаем хороший код, проверенный несколькими разработчиками. А ещё таким образом коллеги лучше знают задачи друг друга, обмениваются опытом и изучают новое. Я же имею возможность сравнивать навыки коллег и наблюдать коммуникации, при этом участвуя в ревью кода наравне со всеми. Так у меня появляется больше времени на общий контроль. Удалёнка также влияет на работу с командой. Например, в начале и в конце дня я прохожу по составу, и для каждого участника мысленно заполняю чек-лист: какая у него задача на сегодня, есть ли у него вопросы, есть ли риски/блокировки по его задаче. — Вы с командой работаете удалённо?— По желанию. Практика показывает, что большинство предпочитают удалёнку. Такова уж особенность работы разработчика — удалённый формат хорошо ложится на типичный рабочий день. Сам считаю, что, при должной организации и разумном контроле, это повышает эффективность работы. «Криптонит» дал нам шикарную инфраструктуру, которая обеспечивает бесшовную интеграцию. Мы не тратим время, пытаясь понять, как передать информацию, где мы ведём совместную работу, насколько это быстро и безопасно. А благодаря групповым созвонам и запланированным встречам, мы не чувствуем себя группой одиночек. Кстати, мы без проблем приглашаем сотрудников из разных регионов страны.  — А какая у вас география сотрудников в команде?— Москва и область, Санкт-Петербург, Самара, Саратов, Уфа, для 10 человек — немало. — За последние годы часть айтишников мигрировала за рубеж, а часть вернулась в Россию. Насколько сейчас сложно найти Rust-разработчика?— Отвечу настолько, насколько в этой области компетентен. Это молодой язык, который на моих глазах завоёвывал позиции в мире разработки. Найти Rust-разработчика сейчас легче, чем, скажем, 5 лет назад. Я не могу сказать, что почувствовал какой-то отток разработчиков на себе. Мне даже кажется, что масштаб оттока слегка преувеличен. По активности на митапе, который мы провели в Санкт-Петербурге, на Rust-конференциях и даже в Telegram-каналах я не вижу дефицита разработчиков. Мне кажется их достаточно. — Какой ты видишь по составу свою команду в идеальном мире? — Сейчас на 4 старших разработчика у нас приходится 3 средних и 2 младших. Так что команда довольно сбалансирована для того количества активных проектов, которые сейчас есть. Но любой новый проект показал бы нехватку ресурсов. Если предположить, что, как и предыдущие 3 года, никто нашу команду не покинет, то мы найдём ресурс в своём составе, но это увеличит на нас нагрузку.  — В общем, нужны резервные специалисты?— Да. Примерно раз в год нам нужно приглашать одного-двух разработчиков. Желательно не только младших, но и среднего уровня и выше. Если повезёт найти старшего разработчика, который уже сейчас может взять на себя техническое лидерство в каком-то проекте, то мы даже готовы открыть новое направление.  — У вас на каждого джуна есть наставник? Как у вас проходит процесс адаптации?— Да, каждый младший разработчик имеет старшего коллегу, который является его «куратором». Когда к нам приходит молодой разработчик, возникает сразу несколько важных задач: обеспечить нагрузками, которые соответствуют его уровню, и не допустить, чтобы он оказался в «вакууме». Поэтому старший куратор следит за выполнением задач, отвечает на любые вопросы. То, что нам хватает старших разработчиков, которые берут на себя эту роль, является большим подспорьем. Поэтому мы охотно и легко принимаем молодых ребят, которые потом довольно быстро растут.  — Что лучше: взять в команду джуна или миддла?— Проще и быстрее адаптировать разработчика с опытом, чем выращивать с нуля молодого специалиста. Но лучше сочетать оба варианта, иначе мы можем лишить себя перспективных кандидатов. Ведь при грамотном подходе и хорошей интеграции в команду это может дать положительный результат. И оно того стоит. — Если разработчик понимает, что ему не хватает знаний в какой-то области, есть возможность отправить его на курсы или дать время на самостоятельное погружение в тему?— Да, мы так и делаем, и это очень хорошо работает. Например, когда нам потребовалась подходящая база данных, мы выделили коллегу, чтобы он прошёл онлайн-курсы и изучил готовое решение базы данных Scylla. Потом он подготовил конспект по итогам обучения и провёл две онлайн встречи. Так мы внедрили у себя в проекте эту базу данных. — Вы участвуете в конференциях, митапах? Как это способствует профессиональному развитию?— Да. Считаю, что участие во внешних мероприятиях расширяет кругозор, напоминает о внешнем мире вне наших текущих задач, может дать какие-то новые импульсы и идеи. В нашем случае на этот вопрос очень приятно отвечать. Например, коллеги из моей команды с удовольствием работали на Rust-конференции. Потом мы организовали командную встречу, чтобы послушать доклад по её итогам. Было здорово видеть заинтересованность. А когда поступил запрос провести собственный митап в Санкт-Петербурге совместно с комьюнити Rust-разработчиков, я был приятно удивлён, что количество предлагаемых докладов превысило ожидаемое число. Также нас пригласили принять участие в программном комитете на RustCon’2023, и я с удовольствием согласился. Кстати, по персональному коду Avramenko можно получить 15% скидку на билет на конференцию RustCon. — Как ты мотивируешь свою команду?— Добрым словом. Каждый успех, промежуточный или итоговый, должен быть отмечен. С молодыми разработчиками проще, можно просто хвалить за достигнутый результат в сделанной задаче. Даже если в процессе ревью кода большую часть переписали заново. Со старшими так не пройдёт, нужно подходить более тонко и не так прямолинейно. Зато и поводов отметить успех больше, чем просто работающий код. — А как же система премирования, карьерный рост?— И это тоже, конечно. Я не забываю про своих коллег и отношусь к этому очень аккуратно. Нужно никого не забыть, отметить всех по заслугам, и чтобы никто не почувствовал себя ущемлённым. Это очень тонкий момент, на который приходится раза два в год тратить существенный ресурс. — А тебя что мотивирует?— Больше всего меня мотивирует то, что в нашей компании я не вижу недостатков, которые бы меня демотивировали :) «Криптонит» — это компания, которая сама по себе очень ценна. Нам повезло с общей организацией, целями, общением внутри коллектива. Успешно работать над сложными задачами в таком составе — уже достаточная мотивация. И, конечно, второй момент — на материальном уровне мы получаем хорошую компенсацию за свою работу, чтобы не быть разочарованными.