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