From 3d98a1c00324231a699b34b02fe2620bfb1196e5 Mon Sep 17 00:00:00 2001 From: katemurao19 <106687261+katemurao19@users.noreply.github.com> Date: Tue, 14 Nov 2023 12:19:31 +0300 Subject: [PATCH] Create ds-skills.md --- ds-skills.md | 413 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 413 insertions(+) create mode 100644 ds-skills.md diff --git a/ds-skills.md b/ds-skills.md new file mode 100644 index 0000000..4f17f40 --- /dev/null +++ b/ds-skills.md @@ -0,0 +1,413 @@ +# Компетенции 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Б. +- Организовать разметку данных + качество разметки.