О компании
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