Files
dev-roadmap-avito-playbook/ds-skills.md
2023-11-14 12:19:31 +03:00

414 lines
40 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Компетенции DS-инженеров
## DS1 (Junior 1 — Intern)
### Автономность и менеджмент
- Решает задачи по алгоритму, который даёт руководитель.
- Выполняет задачи сроком на 12 дня.
- Ему дают способ оценки результата (руководитель приносит метрики, их интерпретацию и ожидания, как они изменятся в результате решения задачи).
- Вместе с руководителем анализирует результат выполнения задач.
- Выполняет задачи, результат которых достижим.
- Может назвать бизнес-цели и задачи проекта, которым занимается.
- Выполняет уже декомпозированные руководителем или более опытными коллегами задачи.
- Не оценивает риски или сроки проекта, но всегда сам может заметить, если не успевает.
### DS-экспертиза
- Собирает данные для моделей по уже готовому шаблону.
- Может проверять гипотезы (лосс, метрика, фичи, гиперпараметры в рамках одной задачи (конкретный кусок работающей системы).
### Культура исследований и разработки
- Пишет код и юнит-тесты на свой код только под присмотром руководителя или наставника.
- Его программа запускается и работает корректно, выдаёт результат.
- Работает с готовыми данными и может написать простой запрос в хранилище, узнав у коллег структуру хранения.
- Под присмотром руководителя или наставника добавляет метрики в свой код.
### Коммуникация
- Уважает коллег, понимает, что они приходят к нему с добрыми намерениями, общается аргументированно и вежливо.
### Развитие себя и обучение других
- Прислушивается к рекомендациям и советам наставника и коллег.
- Придерживается составленного руководителем плана развития.
- Самостоятельно занимается развитием своих инженерных навыков.
## DS2 (Junior 2)
### Автономность и менеджмент
- Самостоятельно изучает и предлагает руководителю способ выполнения задачи.
- Выполняет задачи сроком 1-2 недели.
- Декомпозирует свои задачи на подзадачи/майлостоуны (сбор данных, чистка данных, генерация фичей, обучение модельки, приёмка оффлайн/онлайн).
### DS-экспертиза
- Собирает данные для моделей по уже готовому шаблону.
- Может проверять гипотезы (лосс, метрика, фичи, гиперпараметры в рамках одной задачи (конкретный кусок работающей системы).
### Культура исследований и разработки
- Пишет код и тесты на свой код самостоятельно с активным ревью руководителя.
- Его исследования воспроизводится без его участия.
- Понимает структуру данных своей команды в DWH и может сделать простые запросы.
- Делает стандартные метрики для сервиса и модели (тайминги, rps).
- Участвует в код-ревью и учится лучшим практикам.
- Фиксирует удобным для себя способом часть проведённых экспериментов.
- Сохраняет код и данные по выводам и экспериментам так, чтобы их можно было перепроверить.
- Пишет production-ready код, который не требует переписывания.
- Не повторяет ошибок в коде, ранее разобранных с руководителем.
### Ориентация на бизнес
- Запускает A/B тесты и оценивает свои эксперименты под присмотром руководителя.
- Знает и может назвать целевые метрики для моих экспериментов.
- Разбирает результаты экспериментов с более опытными коллегами.
### Коммуникация
- Если возникает идея, заносит её в команду, отвечающую за эту область.
- Участвует во встречах с коллегами из смежных отделов с более опытными коллегами.
- Принимает конструктивную обратную связь от коллег.
- Не доводит разногласия до деструктивных конфликтов.
- Учитывает интересы и потребности команды, даже если они противоречат его собственным.
### Развитие себя и обучение других
- Принимает участие в составлении его плана развития и придерживается его.
- Если сталкивается с чем-то непонятным, не отмалчивается и не копается, затягивая решение, а спрашивает коллег и пытается разобраться вместе с ними.
## DS3 (Middle 1)
### Автономность и менеджмент
- Ясный целевой результат проекта, за который отвечает (без высокой степени неопределённости).
- Выполняет задачи сроком 12 спринта.
- Самостоятельно собирает данные для обучения моделей.
- Самостоятельно выбирает алгоритм реализации проекта.
- Самостоятельно формулирует критерии успешно выполненного проекта.
- Самостоятельно проверяет результаты выполнения задач (проверка метрик, работы сервисов, посмотреть глазами) и сообщает о них публично.
- Декомпозирует проекты в своей зоне ответственности под присмотром руководителя.
- Приносит запрос на простую доработку во внешнюю команду.
- Проактивно говорит о проблемах и обращается за помощью, если не может справиться с трудностями.
### DS-экспертиза
- Придумывает и оценивает задачи в рамках части уже готовой и работающей системы. Отвечает за выделенную часть (модель) этой системы.
- Проводит эксперименты в рамках своих задач; понимает, когда надо остановиться в исследовании.
- При необходимости внедряет статью/алгоритм с более опытным коллегой.
- При необходимости делает нестандартные операции в фреймфорке (кастомный лосс, слой, хак) или меняет что-то поверх библиотеки с более опытным товарищем.
### Культура исследований и разработки
- Самостоятельно пишет код и обращается за помощью при необходимости; понимает, когда нужно писать тесты и пишет их самостоятельно.
- Делится с командой важными результатами своих исследований.
- Его исследование можно запустить на любой машине (есть requirements.txt, readme, код сбора данных), и есть промежуточные результаты и выводы.
- Следит за производительностью своего кода, оптимизирует узкие места с помощью коллег.
- Автоматизирует сбор данных и их обновления для расчёта production-модели.
- Самостоятельно продумывает архитектуру небольших частей сервисов, либо может сделать сервис уровня «обернуть модель».
- Оценивает объём данных, которые нужно разметить для решения задачи, и объём нагрузки на свой сервис.
- Настраивает элементы мониторинга в своей зоне ответственности и следит за ними (метрики, алерты, nfr, логи).
- Анализирует свой функционал и ищет в нём уязвимости/недостатки, планирует их исправления.
- Делает задачи техдолга, которые даёт руководитель.
- Участвует в code review (только в своих сервисах) и оставляет конструктивные комментарии.
- Проактивно предлагает улучшения в рамках своего проекта.
### Ориентация на бизнес
- Следит за графиками метрик после выкатки.
- Заводит новые продуктовые метрики в рамках готовой инфраструктуры, если это необходимо.
- Самостоятельно откатывает эксперимент, если видит, что что-то пошло не так.
- Использует специфику продукта при решении своих задач и выясняет, как продукт будет влиять на задачу.
- Самостоятельно запускает A/B-тесты (катит сервис/модель), согласует метрики и анализирует результаты с руководителем.
### Коммуникация
- Принимает решения команды, даже если не до конца согласен с ними.
- В случае возникающих сложностей привлекает к коммуникации руководителя.
**Как заказчик:**
- Добивается от смежников и «близких»/платформенных команд выполнения простых тасков.
- Контролирует качество исполнения тасков, при необходимости просит о доработке.
**Как исполнитель:**
- Регулярно и публично отчитывается о прогрессе по таскам перед заказчиком (при наличии такого процесса и потребности от заказчика).
- Проактивно предупреждает заказчиков и заинтересованных лиц, если сдвигаются сроки или что-то идёт не по плану.
### Развитие себя и обучение других
- Проявляет терпимость к тем, кто обладает меньшими знаниями и навыками, оказывает им поддержку.
## DS4 (Middle 2)
### Автономность и менеджмент
- Учитывает в планировании возможные риски в своей зоне ответственности (внешние интеграции, логгирование, чистка данных).
- Выполняет задачи сроком в 24 спринта.
- Формулирует критерий успешно выполненного проекта.
- Самостоятельно выбирает алгоритм решения задачи из нескольких альтернатив или придумывает свою.
- Декомпозирует и оценивает сроки реализации проекта.
- Формализует ресёрч по определённому запросу и оценивает примерное время его выполнения.
- Критически подходит к предлагаемым руководителем решениям. Если считает нужным, аргументированно оспаривает предложение и предлагает альтернативу.
### DS-экспертиза
- Строит модели с нуля.
- В случае несовпадения оценки эксперимента с действительностью — разбирается, почему произошло несовпадение.
### Культура исследований и разработки
- При необходимости делает изменения в сервисах коллег по команде (к примеру, сделать новую ручку).
- При необходимости выходит за рамки своих инструментов (писать на go, front, udf, базы, сделать витрины)
- В своих проектах следит за покрытием кода тестами, чтобы непротестированный код не шёл в прод.
- Проактивно делится результатами исследований с коллегами по команде и стейкхолдерами.
- Проводит нагрузочное тестирование нового функционала, заранее оценивает количество ресурсов, которое потребуется для его работы.
- Самостоятельно работает с данными, находит в них проблемы, следит за изменениями в данных со временем.
- Самостоятельно продумывает архитектуру более сложного сервиса (появляются внешние походы, базы, кэши), полученную архитектуру согласует с руководителем.
- Выносит часто используемые куски кода в общие библиотеки.
- Контролирует основные факторы, которые влияют на потребление ресурсов его сервиса.
- Если создаёт техдолг, то самостоятельно фиксирует его задачей в jira.
- Активный участник код-ревью не только в своих сервисах, помогает младшим коллегам, участвует в парном программировании.
- Погружается в задачи команды вне своей зоны ответственности.
- Самостоятельно анализирует результаты эксперимента и обсуждает их с руководителем при принятии решения о раскатке.
- Делает MVP для конкретных задач, прежде чем начинать долгую разработку.
- Оценивает baseline и потолок качества для датасета и подхода.
- Оценивает зависимость между качеством модели и её перфомансом.
### Ориентация на бизнес
- Интерпретирует неожиданные изменения в онлайн-метриках, ищет, что мог задеть (в рамках своего юнита).
- Предсказывает степень эффекта на онлайн-метрики для своего эксперимента.
- Самостоятельно придумывает схему приёмки эксперимента в своей области ответственности, используя стандартные инструменты (оффлайн, онлайн, AB, yoy, региональные эксперименты, ступеньки, user voice).
- До запуска проекта продумывает набор метрик, по которым его принимать (технические, положительные, отрицательные).
### Коммуникация
- Если не согласен с чужим решением, обосновывает свою точку зрения и старается понять чужую.
- Фиксирует договорённости после обсуждения.
- В случае возникающих сложностей решает их самостоятельно.
**Как заказчик:**
- Поддерживает диалог и ставит задачи внешним исполнителям, в том числе не из Авито.
- Подключает коллег из других функций для выполнения сложных задач.
**Как исполнитель:**
- При запросе объясняет, как работает функционал, который сделал раньше; убеждается, что коллега понял объяснения.
### Развитие себя и обучение других
- Проактивно делится своей экспертизой внутри команды.
- Активно проводит технические интервью, прокачивает свои навыки интервьюера.
- Занимается онбордингом новичков.
- Менторит младших коллег уровнем до DS2 и выдаёт им задачи в 12 спринта.
- Отвечает за развитие и рост коллег уровня стажёра.
## DS5 (Senior 1)
### Автономность и менеджмент
- Выполняет задачи со средним уровнем неопределённости (понятно, что болит, непонятно, как решить проблему).
- Выполняет сложные задачи с большим количеством участников, компонентов и взаимозависимостей сроком до квартала.
- Учитывает в планировании возможные риски вне своей зоны ответственности (внешние факторы, работа внешних команд).
- В своём направлении ведёт бэклог с инициативами и техдолгом (в письменном общеступном виде).
- Отвечает за DS-составляющую важного направления (например, метрика, стратегическая инициатива) совместно с руководителем.
- Активно управляет ожиданиями заказчиков и текущей работой по проекту.
- В рамках своего проекта организует работу DS-инженеров из своего юнита.
- При общении с внешними командами декомпозирует и оценивает сроки реализации проекта, согласует с заинтересованными лицами и исполнителями; ставит задачи с понятными критериями приёмки; контролирует сроки выполнения задач.
### DS-экспертиза
- Добывает данные за рамками текущей инфраструктуры, добавляет новые источники.
- Интересуется, что делают другие DS-команды и переиспользует их опыт/решения.
- Берёт на себя ML-проекты и формирует план работ (гипотезы, метрики).
- Находит пути улучшения существующего решения там, где младшие коллеги не справились.
- Систематически предлагает проработанные улучшения для существующих решений или частей продукта.
- Самостоятельно внедряет статью или алгоритм.
- Самостоятельно проводит нестандартные операции во фреймворке (кастомный лосс, слой, хак) или меняет что-то поверх библиотеки.
### Культура исследований и разработки
- При необходимости согласует и делает изменения в сервисах другой команды.
- Его исследования можно воспроизвести от и до, запустив код по инструкции, результаты исследования задокументированы.
- Оценивает требования для поступающей задачи с точки зрения ресурсов, формулирует SLA для своих внутренних сервисов и всевозможных ограничений (железо и SLA).
- При необходимости работает с внешними источниками данных.
- Проектирует архитектуру сложных сервисов, согласует требования с другими командами.
- Продумывает и предлагает общие решения, полезные всей команде (библиотеки, утилиты).
- Следит за количеством техдолга на своем проекте и не даёт ему выходить за уровень, мешающий быстро развивать функционал.
- Легко ориентируется в том, как устроено большинство сервисов команды (фича-тимы) и может в них при необходимости что-то изменить.
- Ведёт логи экспериментов, включая неудачные.
- Документирует разработанный функционал.
- Самостоятельно проектирует и реализует архитектуру сервиса с моделью.
### Ориентация на бизнес
- Самостоятельно оценивает бизнес-инициативу и предлагает решение, MVP.
- Понимает взаимосвязь между своими проектами и метриками других юнитов.
- Если его проект затронул чужую зону ответственности, обсуждает это с коллегами, которые за неё отвечают.
- В случае конфликта метрик ищет компромисс и взаимовыгодное решение.
- Покрывает сервис не только техническими метриками, но и метриками, которые позволяют быстро ловить аномалию в продукте — процент забанов, процент исправленных опечаток; настраивает алерты.
- Активно реагирует на аномалии в продуктовых метриках своих проектов, следит за ними longterm.
- Заранее прикидывает масштаб проблемы в своей области ответственности, не начинает проектов, которые не окупят затраченных усилий.
- Помогает коллегам из Customer Service или других юнитов, умеет приоритезировать их запросы и дать обратную связь, чтобы управлять их ожиданиями. Если не может помочь коллегам прямо сейчас, объясняет, почему и когда сможет.
### Коммуникация
- Признаёт свои ошибки, доносит это до вовлечённых сторон.
- Поддерживает позитивную атмосферу внутри команды.
- Корректно отзывается обо всех командах Авито, даже если в общении с какой-то из них есть недопонимания или проблемы.
- Договаривается о взаимовыгодном решении (вырабатывает консенсус), когда стороны видят решение по-разному.
- Фасилитирует дискуссии, не допускает неэффективных обсуждений.
**Как заказчик:**
- Организует и ведёт долгие проекты длительностью от квартала с коллегами из смежных команд.
**Как исполнитель:**
- Узнаёт истинную мотивацию заказчика, ищет оптимальное решение его болей и объясняет, как это сделать правильно.
- Если кто-то приходит с пожеланиями и задачами, которые невозможно выполнить, конструктивно объясняет, почему это невозможно.
- Рассказывает внешним заказчикам про устройство систем, за которые отвечает его юнит; убеждается, что коллеги поняли объяснения.
### Развитие себя и обучение других
- Выступает на внутренних митапах и делится ценными знаниями с коллегами.
- Следит за трендами в индустрии, прикладывает их на свои задачи, думает о развитии проектов в своей зоне ответственности, предлагает конструктивные идеи.
- Обучает тех, кто учится проводить технические собеседования.
- Менторит младших коллег уровнем до DS4.
- Отвечает за развитие и рост коллег уровня Junior.
- Консультирует членов команды по запуску и анализу результатов экспериментов.
## DS6 (Senior 2)
### Автономность и менеджмент
- Решает задачи с высоким уровнем неопределённости.
- Выполняет задачи сроком до полугода.
- Активно выявляет точки роста в рамках своего кластера, составляет план улучшений.
- Отвечает за DS-составляющую большого направления (метрика, стратегическая инициатива), занимается планированием, контролирует прогресс.
- Проактивно управляет рисками проекта.
- Участвует в приоритизации и формулировании OKR, оценивает проекты большой сложности по профиту, стоимости и целесообразности.
- Добивается решения задач сторонними командами всеми способами.
### DS-экспертиза
- Сверх предыдущего грейда компетенции не требуются.
### Культура исследований и разработки
- Проактивно находит новые направления для исследований, основываясь на данных, разбирается с аномалиями в работе сервисов/метриках команды.
- Правильно рассчитывает, сколько ресурсов нужно на решение задачи на старте проекта.
- Проактивно добивается выделения ресурсов на свою задачу всеми способами.
- Приносит неиспользованные ранее в команде технологии с пользой для бизнеса.
### Ориентация на бизнес
- Формирует видение и цели по метрикам в рамках своего направления.
- Создаёт инструменты для мониторинга; следит за тем, чтобы модель не стала работать хуже спустя какое-то время.
- Точно оценивает масштаб проблемы и профит решения даже в незнакомой для себя области.
- Приоритезирует задачи и проекты, исходя из предварительных оценок выгоды.
- Если заказчик приходит без предварительной оценки, помогает ему оценить.
- Для затратных и непонятных проектов делает MVP, чтобы оценить жизнеспособность решения.
### Коммуникация
- Организует атмосферу доверия на встречах, стимулирует высказывание разных точек зрения.
- Консультирует коллег из других команд про зоны ответственности юнита, помогает разобраться в проблемах, не дожидаясь ответственного или дежурного, или если его нет.
**Как заказчик:**
- Отвечает за сложные проекты с внешними контрагентами не из Авито, если это необходимо.
**Как исполнитель:**
- Если заказчики часто приходят с одинаковыми вопросами, обеспечивает документацию проекта.
### Развитие себя и обучение других
- Участвует в Tech PR, выступает на внешних конференциях, пишет статьи в профильные блоги.
- Проводит финальные собеседования и принимает решения о найме стажеров.
- Помогает с развитием коллегам уровня Middle.
- Принимает участие в калибровках, если коллеги были задействованы на его проекте; помогает руководителю подсветить сильные и слабые стороны младших коллег.
## DS7 (Lead)
### Автономность и менеджмент
- Его проекты приносят существенную пользу бизнесу (ключевые метрики от уровня кластера, стратегические инициативы).
- Выполняет задачи с неограниченным сроком (более полугода).
- Отвечает за большое направление (метрика, стратегическая инициатива), занимается планированием, контролирует прогресс.
- В его направлении составлен прозрачный роадмап на 12 квартала вперёд.
- В рамках своего проекта и направления координирует работу как инженеров своего юнита, так и других команд.
- Отвечает за нагрузку и мотивацию сотрудников, задействованных на его проекте.
### DS-экспертиза
- Формирует потребность в данных в любом проекте; знает, откуда можно добыть данные, применяет это знание.
- Успешно вношу предложения и формирую потребность в том, что можно оптимизировать с точки зрения ML у смежных (не ML) команд.
- Прикладывает потребность в ML на долгосрочные планы продукта.
- Делает неинкрементальные изменения в проекте (например, добавить SOTA).
- Отвечает за проект, которым пользуются по всей компании.
### Культура исследований и разработки
- Долгосрочно планирует архитектуру сервисов команды с учётом роста и внешних требований.
- Отвечает за организацию инфраструктуры для работы коллег.
- Планирует железо для своей команды на год вперёд, учитывает рост и новые инициативы.
- Изучает новые технологии в своей сфере, подходы к задачам в других компаниях, понимает, как его команда влияет на бизнес и другие команды.
- Следит за тем, чтобы логика работы системы и продукта фиксировалась в письменном виде в рамках всего коллектива.
### Ориентация на бизнес
- Может приземлить боль заказчика (нечётко высказанное мнение о том, что всё плохо) на измеряемые рельсы и оформить из неё проект.
- Если требования заказчика не соотносятся с реальностью, убеждает его в отсутствии проблемы, избегая конфликта.
- Доносит до владельца продукта наличие проблем в его области ответственности, добивается выделения ресурсов на их исправление.
- Если видит аномалию в ключевых метриках компании, то привлекает внимание ответственных людей до устранения проблем.
- Отстаивает метрики своей команды в публичном поле.
### Коммуникация
- Если видит конфликтную ситуацию у других коллег, помогает разрешить её конструктивно и взаимовыгодно.
- Доносит как позитивный, так и негативный фидбек до коллег в конструктивной форме.
### Развитие себя и обучение других
- Выступает на международных конференциях.
- Менторит младших коллег уровнем до DS4 и выдаёт им задачи.
- Системно работает над развитием технического уровня всех членов своей команды в своём функциональном направлении.
- Создаёт или активно участвует в сообществах, где все заинтересованные лица могут обмениваться знаниями и вырабатывать решения.
## Пояснения
### Автономность и менеджемент
**Критерии сложности проектов:**
- Количество участников (≥ 3).
- Зависимость от смежников.
- Количество легаси.
- Есть ли деньги.
- Есть ли персданные.
- Есть ли цели чужих команд.
- Количество компонентов.
- Уровень стратегичности.
- Сложность коммуникаций.
- Пробить потолок.
- DS-составляющая.
### Культура исследований и разработки
- Как пишет код.
- Как пишет тесты.
- Воспроизводимость исследований:
- код,
- метрики,
- выводы — почему такое решение.
- Перфоманс моделей и нагрузочное тестирование.
- Работа с данными.
- Планирование архитектуры.
- Создание общих инструментов (библиотек).
- Планирование ресурсов (железа), деньги на толоку, объём модераторов.
- Затащить технологию (FAISS, airflow) бонус.
- Настраивает элементы мониторинга и следит за ними (метрики, алерты, nfr, логи).
- Доменный ресерч (не пофиг, что происходит в продукте — что-то смотрит).
- Работа с техдолгом.
- Код-ревью.
- Проактивно предлагает улучшения для текущих систем (инженерная вовлечённость).
- Работа с AБ.
- Организовать разметку данных + качество разметки.