О компании

HHTech — команда разработчиков, которые ежедневно улучшают сервисы сайта hh.ru (компании Headhunter).

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

Команды и процессы

  • В команде работают бэкендеры и фронтендеры, тестировщики, тимлиды и менеджеры.
  • Задача команды— создавать и развивать продукты для компании Headhunter. Для команды развитие продуктов означает постоянный поток проектов.
  • Команда принимает проекты в потоковом режиме один за другим. Процесс работы над проектом можно разделить на этапы: декомпозиция на небольшие задачи, оценка, разработка, ревью, тестирование, выпуск. Почти всегда задача выходит в режиме эксперимента, когда изменения выкатываются только на часть пользователей. В зависимости от результатов эксперимента изменения раскатываются на всех или дорабатываются, либо код эксперимента удаляется. Команда переходит к следующему проекту.
  • Команды работают по Agile, с Kanban в основе и корректировками под наши процессы. У нас приняты ежедневные стендапы. Планирования, декомпозиции, оценки — по мере необходимости. Демонстрации по задачам, ретроспективы по процессам и проектам — регулярно.
  • Кроме бизнес-проектов, есть понятие «технического налога» — это задачи на ускорение разработки, рефакторинг, избавление от старого кода, внедрение новых технологий. Каждая команда 30% своего времени тратит на «техналог».

Разработка

Бэкенд

  • Бизнес-логику стараемся реализовывать на основе микросервисной архитектуры. Каждый сервис ответственен за свою часть логики. Как следствие, у нас появляется отдельный слой интеграционной логики. К примеру, страница вакансии, которую видит пользователь — это результат совместной работы нескольких сервисов.
  • Бэкенд пишем на Java, используем актуальные версии фреймворков и языков, базовая версия Java для разработки на текущий момент — 17.
  • Есть несколько сервисов на питоне, в которых мы используем наш фреймворк frontik на основе tornado, версии питона - 3.8+
  • Создать новый сервис для hh.ru — дело пары кликов! Мы поддерживаем свои инструменты для разработчиков, которые призваны уменьшить количество рутины при создании и поддержке сервисов NaB, jclient.
  • Данные храним в PostgreSQL, Cassandra, Hadoop, Clickhouse.
  • Основной транспорт — http\rest, но есть также Kafka и Rabbitmq.
  • Используем инструменты диагностики и мониторинга, которые работают с большими данными и позволяют нам быстро анализировать и разрешать возникающие проблемы
  • Подробнее про используемые технологии можно посмотреть в техрадаре.

Фронтенд

  • Основной стек — React, Redux, SSR, TypeScript. По мере необходимости выделяем код в отдельные фронтовые сервисы. В основном проекте и некоторых других помимо Реакта есть ещё легаси стек — XSL для шаблонизации на сервере (знать его при устройстве на работу не нужно — можно обучиться за несколько недель), преимущественно чистый JavaScript на клиенте, свой мини-фреймворк для организации компонентов.
  • CSS пишем с помощью LESS, для новых сервисов используем CSS Modules.
  • Есть библиотека блоков для всех интерфейсных элементов — ее используют и разработчики, и дизайнеры. Благодаря ей мы редко верстаем, обычно составляем страницу из готовых «кирпичиков», дописывая логику интеграции.
  • Весь JS-код «транспайлим» Бабелем, пишем на ES6 и выше. Есть линтеры, Prettier и стайлгайды.
  • В ведении фронтендеров находится сервис на Python на основе фреймворка Tornado. Его задача — получить с бэкенда нужные данные, собрать их в XML/JSON и отдать Node.js или XSL для шаблонизации. Мы не требуем знания Python при приеме на работу — он используется на базовом уровне.
  • В библиотеке блоков обязательно пишем юнит-тесты. В новом стеке юнит-тесты пишем по желанию. В старом стеке юнит-тестов практически нет.
  • Подробнее про используемые технологии можно посмотреть в техрадаре.

iOS

  • Мы занимаемся разработкой двух iOS приложений: для соискателей и работодателей компании Headhunter, кодовая база общая, многомодульная архитектура реализована при помощи Tuist.
  • Для внешних зависимостей используем Carthage и SPM.
  • Весь код проекта реализован на Swift.
  • Используем реактивную архитектуру со стейт-машиной MVI, MVVM, Сombine, самописным DI и Nivelir для навигации
  • Есть стайлгайды, применяем статические анализаторы, линтеры.
  • Автоматизируем рутинные процессы, используем шаблоны, сниппеты, кодогенерацию.
  • На каждый PR прогоняются тесты и различные проверки, сборка и выкладка приложений автоматизированы через CI сервер и fastlane.
  • В кооперации с QA пишем UI-тесты, используя XCUITest.
  • Постоянно развиваем дизайн систему.
  • Подробнее про используемые технологии можно посмотреть в техрадаре.

Android

  • Мы работаем над двумя приложениями: для соискателей и работодателей компании Headhunter, кодовая база общая с мелким дроблением на модули
  • Разработка ведется на языке Kotlin.
  • Используем реактивную архитектуру с MVI на базе MVICore, RxJava и Toothpick в качестве DI-Framework.
  • Есть стайлгайд, применяем различные статические анализаторы: Android Lint, detekt.
  • Инфраструктура на базе технологий: Gradle на kts, Fastlane, Bamboo, Docker, K8s.
  • На каждый PR прогоняются тесты и различные проверки. В тестах используются JUnit5, Kaspresso и Marathon для тестов.
  • Совместно с QA пишем UI-тесты, с использованием Kaspresso и оркестратора Marathon. Критичный функционал покрываем Unit и компонентными тестами на JUnit5.
  • Автоматизируем рутинные процессы, пишем и используем шаблоны, собственные IDE-плагины для автоматизации рутинных задач.
  • Постоянно развиваем дизайн систему.
  • Подробнее про используемые технологии можно посмотреть в техрадаре.

Тестирование

  • У нас нет отдела тестирования. Специалисты по тестированию работают внутри кросс-функциональных команд. Они участвуют в работе над фичами с самого начала их проработки и до самого выхода на продакшен.
  • Мы не используем тест-кейсы. Применяем исследовательское тестирование и сам тестировщик определяет те способы и виды тестирования, которые необходимо провести для каждой задачи.
  • У нас нет сложностей с доступом к коду, базе и логам. Специалисты по тестированию имеют полный доступ к кодовой базе, и всем приложениям и базам на тестовом стенде.
  • Мы не проводим полное ручное регрессионное тестирование. Весь регресс стараемся автоматизировать. Сейчас у нас более чем 8000 автотестов, которые проходят примерно за час. При тестировании каждой отдельной задачи тестировщик самостоятельно определяет объем необходимого ручного регресса в зависимости от затронутого функционала и его покрытия автотестами.
  • Отдельных людей, которые пишут и запускают тесты, у нас нет. Автотесты обязательны к прохождению при тестировании каждой задачи. Каждый специалист по тестированию запускает, исправляет и пишет автотесты. Используем Java, TestNG, Webdriver и Selenoid — для веб, Kaspresso и Kotlin — для Android, XCUITest и Swift — для iOS, Jenkins и свои разработки — для запуска тестов.
  • Подробнее про используемые технологии можно посмотреть в техрадаре.

Общее

  • Код хранится на GitHub, там же в формате пулл-реквестов мы проводим обязательное ревью.
  • Нет общих сред для тестирования или разработки. Каждому специалисту выдается один или несколько тестовых стендов. Эти же стенды используются для разработки. Инфраструктура тестовых стендов автоматизирована и позволяет с легкостью управлять ими.
  • Мы не готовимся к каждому релизу как к событию. У нас десятки релизов каждый день. Часть из них собирается и тестируется вообще без участия человека, другая часть потребует нажатия пары кнопок.

Сложность проекта

  • Занимаемся разработкой также и для страновых сайтов — rabota.by, hh.kz и другие. Этот тот же код и база данных, но с различиями в бизнес-логике, например, из-за особенностей законодательства.
  • Есть API, которым пользуются клиенты компании Headhunter и нативные мобильные приложения для iOS и Android.
  • Пиковая нагрузка на сайт компании Headhunter — свыше 10 000 RPS.

Обучение и развитие

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

График работы

  • Работаем удалённо. При желании, есть возможность работать из офиса в Москве.
  • Восьмичасовой рабочий день плюс время на обед.
  • Начало рабочего дня гибкое, главное успевать на стендап и находиться на связи с 12 до 18 часов, чтобы иметь возможность общаться с коллегами. В разных командах стендап начинается в разное время, в среднем с 11 до 12. Время московское.

Контакты

Общество с ограниченной ответственностью «Хэдхантер Технологии»

129085, г. Москва, вн.тер.г. муниципальный округ Останкинский, ул. Годовикова, д. 9, стр. 10, этаж/помещ./ком. 3/I/31

info@hhtech.ru