Ответ на пост «Секреты вашей профессии, о которых лучше не говорить»

В предыдущих ответах я уже рассказал про свой опыт работы инженером-электронщиком в сфере радиационных испытаний и о том, как я проходил стажировку на заводе Renault. А теперь настало время рассказать о моём текущем работодателе, самом любимом и ненавистном job-портале всея Руси — hh.ru. На данный момент я работаю backend-разработчиком в команде Поиска. Мы отвечаем за поисковую выдачу на сайте и пользовательские рекомендательные системы. Я решил разделить пост на две части: здесь я расскажу про общие и технические аспекты работы в hh.ru, а в следующей — о том, как правильно пользоваться поиском hh.ru и не страдать от кривых рекомендаций:)

1. Раньше я думал, что у hh.ru — совсем небольшая команда. Однако на данный момент в Техническом департаменте около 40 команд с 5-10 сотрудниками в каждой — разработчиками, тестировщиками, аналитиками и прочими достойными людьми. Каждая команда отвечает за свою функциональность. Например, сейчас аж 3 команды поиска: 2 из них отвечают за поиск с точки зрения ML, это коллаборации дата-сайентистов и бэкендеров, я работаю как раз в такой, а третья — за поиск с точки зрения UI/UX, в ней коллабят фронтендеры и бэкендеры.

2. Чтобы устроиться фронтенд- или бэкенд- разработчиком в hh, вам придется овладеть сразу двумя языками программирования. Для фронта это JavaScript и Python, для бэка — Java и Python. Фишка в том, что у нас существует сервис интеграционной логики между фронтом и бэком, и написан он на Питоне. “Трогать” его приходится всем: как фронтендерам, так и бэкендерам. Первые через этот сервис отправляют запросы на бэк, а вторые отдают в сервис данные, которые потом отправляются на фронтенд. Есть случаи взаимодействия между фронтом и бэком без этого сервиса, но полностью от него избавиться у нас пока не получается. Но, как говорится, есть нюанс: сразу на собеседовании знание Питона могут не требовать, однако с вероятностью 80% его придется выучить после трудоустройства на позицию web-разработчика.

3. Поиск в hh самописный, создан на основе библиотеки Lucene. Основная причина — историческая. Когда писался поиск hh, никакого ElasticSearch не существовало. Более того, некоторые команды, которые сначала активно пользовались Эластиком, раздумывают о переходе на наш поиск. Вообще, в hh любят самописки. У нас множество внутренних “авторских” библиотек, а также три известных мне opensource фреймворка: frontik, Nivelir и nab. Внутри hh эти фреймворки используются повсеместно. Фронтик — это асинхронный сервер приложений, основанный на Python-библиотеке Tornado. Например, сервис интеграционной логики из предыдущего факта создан как раз на основе Фронтика. Nivelir — это фреймворк для навигации в iOS-приложениях, был разработан относительно недавно нашими iOS-разработчиками. Подробнее про него можно почитать тут. А NaB — это такой hh-специфичный Spring Boot. Под капотом у него Spring Framework, но сконфигурированный специально под наши нужды.

4. Внутри поиска многие проблемы решаются банальным переиндексированием. Дело в том, что при любых изменениях вакансии или резюме сам документ на самом деле не изменяется. В поисковом индексе создается новый документ с изменениями, а старый вариант помечается как удаленный. Но физическое удаление старой версии из индекса происходит только при переиндексации. Как правило переиндексация происходит автоматически, но сбои случаются. Хорошей иллюстрацией таких сбоев послужит недавний случай из поиска резюме (этот поиск видят работодатели), который произошел перед новогодними праздниками. В поисковой выдаче при фильтрации по “Активно ищет работу” попались пару резюме со статусом “Не ищет работу”. Оказалось, что соискатели с этими резюме недавно поменяли статус, а индексация засбоила. После переиндексации статус этих резюме в выдаче стал отображаться как надо. В поиске вакансий аналогичные мелкие нестыковки в выдаче могут решаться переиндексированием соответствующей вакансии. Поэтому, если пользователь пишет о каких-то проблемах с конкретной вакансией/резюме в поисковой выдаче, первое, что мы пробуем сделать — переиндексировать ее. Да, прямо как в набившей оскомину шутке про “а вы пробовали выключить и включить?”

5. На hh.ru есть особый тип вакансий — вакансии Виртуального Рекрутера (ВР). Выглядят они примерно так. Вместо стандартного отклика там идет заполнение короткой анкеты. Занимается всем этим отдельная команда — это полностью их вотчина. Даже отклики там считаются не так, как в обычных hh-вакансиях. Как правило, такие вакансии заказывают большие компании для массового набора персонала, а анкета представляет собой мини-резюме. Это далеко не единственная необычная команда в hh.ru. Есть еще две команды разработчиков, которые по факту вообще не имеют никакого отношения к сайту hh.ru — команды Талантикса. Ребята разрабатывают CRM систему для эйчаров, а выглядит она так.

6. В hh проводится очень много A/B-экспериментов. В простом варианте в рамках таких экспериментов пользователи сайта или приложения делятся на 2 группы: контрольную и экспериментальную. Контрольная группа видит сайт или приложение без изменений, а для пользователей экспериментальной добавляется какая-нибудь новая функциональность или изменения в сайте или приложении, которые мы хотим проверить. Пользователи делятся на группы автоматически: в hh для этого используется свой специальный внутренний инструмент. Делается всё это для того, чтобы при любых изменениях наблюдать за реакцией пользователей: действительно ли мы улучшаем их жизнь или делаем все только хуже. Реакция пользователей отслеживается с помощью специальных статистических метрик, на основании которых после эксперимента выносится вердикт: выкатываем ли мы новую функциональность на всех пользователей или отказываемся от нее. Поэтому если вдруг у вас сайт выглядит или ведет себя иначе, чем у вашего знакомого — улыбнитесь, вас снимает скрытая камера:) Вернее, один из вас просто стал участником эксперимента и тестит новые фичи раньше всех. Кстати, пользуясь случаем, расскажу, что у нас есть свой видеоподкаст — “Охэхэнные истории”. В одном из выпусков мы как раз более подробно рассказывали про A/B-эксперименты. Рекомендую к просмотру.

7. Что радует: у каждого разработчика есть собственный тестовый стенд, а у тестировщиков их обычно два или три, где развернут “hh в миниатюре”. На стенде можно спокойно поиграться с различными элементами сайта, проверить какую-нибудь идею, а заодно и протестировать свои задачи.

8. В hh.ru я не встречал никаких ультимативных задач “сверху”, кроме критических случаев, когда, условно, “прод лежит”. Задачи исходят в основном от product-менеджеров, но при этом разработчик вправе самостоятельно выбирать себе задачу или генерировать идеи для следующих. Не знаю, как в других командах, но в Поиске продакты всегда открыты к идеям разработчиков.

9. Рабочее время очень гибкое. Любишь начинать работу пораньше и раньше освобождаться? Пожалуйста. Любишь по утрам поспать, но при этом засиживаешься за компом до поздней ночи? Не вопрос, работай так. Главное соблюдать 2 условия: в срок делать свои задачи и присутствовать на важных встречах. Поэтому отлучиться по уважительной причине на час-два по делам обычно не проблема, главное всё успеть.

10. Из предыдущего факта можно подумать, что разработчики работают меньше стандартных 8 часов, но это не совсем так. Зная отношение компании к своим сотрудникам (об этом позже), все стараются максимально быстро и качественно сделать свои задачи. Но иногда возникают случаи, когда человек не успел доделать задачу перед отпуском и заканчивает ее в отпуске сам, по своей инициативе, хотя менеджеры всячески протестуют против этого. О — ответственность:)

11. Каждый год hh проводит свою Школу Программистов. Занятия в ней бесплатны для всех желающих, но нужно пройти отбор в два этапа: решить 2 задачи и пройти собеседование (в разные дни). Раньше собеседование перед школой и занятия проходили очно в московском офисе компании, но с 2020 года школа полностью перешла в онлайн-формат. Теперь для занятий не обязательно проживать в Москве. Я сейчас работаю в одной команде с человеком, который от момента поступления в школу до приема на работу в hh ни разу не приезжал в Москву. Готовят в школе фронтендеров и бэкендеров, лучших учеников школы по окончании обучения hh принимает в штат. Я сам выпускник этой школы 2019-2020, и попал как раз в переходный период между оффлайн- и онлайн-форматами, подробнее о своём обучении в этой школе планирую сделать отдельный пост.

12. Ну и самое главное: hh.ru — это про людей. В это сложно поверить, не побывав внутри, но это правда так. В компании царит уважительное и доброжелательное отношение к коллегам. Плюс компания в меру своих возможностей старается помогать сотрудникам. Например, в 2021 году я попал в больницу, и у меня не было возможности сообщить об этом работодателю. Но коллеги из hh.ru связались с родственниками, выяснили подробности, помогли с оформлением больничного и спокойно ждали месяц, пока я приходил в себя. Еще один маленький нюанс, который меня поразил: тем, кто работает удаленно, начали доплачивать по 500 рублей в месяц за использование домашнего электричества для работы. Пустячок, а приятно.