Files
dev-roadmap-avito-playbook/developer-profile.md

292 lines
32 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# Профили инженеров
Профили инженеров нужны для того, чтобы оценивать коллег в соответствии с их уровнем на [performance review](https://github.com/avito-tech/playbook/blob/master/goal-setting.md#performance-review) и сделать продвижение по карьерной лестнице понятным и прозрачным.
## Карьерная лестница
Карьерная лестница — это возможный путь развития инженера в Авито в зависимости от того, какие задачи он решает, и какие основные скиллы при этом использует.
Развиваться можно двумя путями:
- Как инженер (IC, individual contributor), который делает работу преимущественно своими руками, высшая ступень эволюции.
- Как менеджер, который достигает результата через управление людьми или командами.
В настоящий момент у нас в Авито существуют такие уровни:
- [Intern (стажёр)](https://github.com/avito-tech/playbook/blob/master/developer-profile.md#intern)
- [junior](https://github.com/avito-tech/playbook/blob/master/developer-profile.md#junior)
- [Middle](https://github.com/avito-tech/playbook/blob/master/developer-profile.md#middle)
- [Senior](https://github.com/avito-tech/playbook/blob/master/developer-profile.md#senior)
- [Lead](https://github.com/avito-tech/playbook/blob/master/developer-profile.md#lead)
- [Principal](https://github.com/avito-tech/playbook/blob/master/developer-profile.md#principal)
Все профили описаны по блокам:
- Экспертность
- Инженерная культура
- Ответственность за результат
- Ориентация на бизнес
- Agile Mindset
- Коммуникация
- Развитие себя и обучение других
Карьерное движение не происходит автоматически. Двигаться или нет по карьерной лестнице это решение и ответственность самого сотрудника. Многое зависит от его проактивности, желания учиться, приобретать новые знания и навыки, и (самое главное) брать на себя большую ответственность. Задача менеджера помочь сотруднику в развитии, например, подключать к новым задачам, давать возможность для участия в кросс-функциональных проектах.
## Как работают профили инженеров
- Ожидания каждого следующего уровня добавляются к ожиданиям предыдущих. Например senior должны уметь делать всё тоже самое что и intern, junior и middle.
- Сотрудник обязательно должен проявить навыки и компетенции своего или следующего профиля на деле. Просто уметь или хотеть делать не достаточно.
- Если менеджер считает, что в команде нет и не будет бизнес необходимости делать что-то, что описано в профиле, например выступать на конференции или обучать новичков, то эти критерии можно не учитывать.
## Intern
### Экспертность
- Решает небольшие задачи из бэклога под руководством наставника.
- Привлекает наставника для оценки потенциальных рисков.
### Инженерная культура
- Изучает с наставником лучшие практики Авито, учится писать качественный код или тестировать используя существующие тестовые модели.
### Ответственность за результат
- При планировании работы синхронизирует конечную цель и ожидаемый результат с наставником.
- Выполняет обещанное. Например, выполняет взятую задачу в срок или своевременно оповещает о проблеме, просит о помощи.
- Признает ошибки и берет ответственность за их исправление.
### Ориентация на бизнес
- Выясняет цель и ценность выполнения задачи над которой он работает.
### Agile Mindset
- Вовлеченный участник всех процессов команды.
- Адаптируется к изменениям процессов в команде/компании.
- Адаптируется к изменениям приоритетов/целей.
- Говорит о вещах, которые требуют улучшения и не «замалчивает» проблемы.
- Руководствуется принципом just talk. Понимает, что общение наиболее эффективный и практичный способ обмена информацией.
### Коммуникация
- Уважает коллег.
- Гибок в общении — слышит коллег, учитывает их мнение.
- Аргументирует свою точку зрения
- Принимает решения учитывая интересы и потребности других людей, даже когда они противоречат его собственным.
### Развитие себя и обучение других
- Делает выводы для себя на основе обратной связи.
- Совместно с руководителем ставит себе четкие цели на обучение.
- Быстро обучается. Активно задает вопросы, чтобы учиться.
- Берет задачи в работу, которые раньше не делал, чтобы научиться.
## Junior
### Экспертность
- Решает такие же задачи из бэклога как и middle инженеры.
- Оценивает потенциальные риски.
- Привлекает наставника при необходимости.
### Инженерная культура
- Улучшает свой код по замечаниям на code review. Не повторяет одинаковых ошибок.
- Вручную проверяет «зелёные сценарии», обработку ошибок.
- Пишет авто-тесты на свой код, консультируется с наставником насчёт выбора оптимального способа проверки качества и безопасности задач.
### Ответственность за результат
- При планировании работы согласует с автором/командой:
- как поймём, что задача успешно выполнена? (acceptance criteria)
- как будет проверена работоспособность?
- как результат будет продемонстрирован?
- когда задача будет выполнена?
### Ориентация на бизнес
- Формирует с командой цель на спринт. Связывает её с целями юнита и компании на текущий квартал.
- Проводит обзор результатов работы фича-команды.
### Agile Mindset
- Вовлеченный участник всех процессов команды.
- Адаптируется к изменениям процессов в команде/компании.
- Адаптируется к изменениям приоритетов/целей.
- Говорит о вещах, которые требуют улучшения и не «замалчивает» проблемы.
- Руководствуется принципом just talk. Понимает, что общение наиболее эффективный и практичный способ обмена информацией.
### Коммуникация
- Уважает коллег.
- Гибок в общении — слышит коллег, учитывает их мнение.
- Аргументирует свою точку зрения.
- Принимает решения учитывая интересы и потребности других людей даже когда они противоречат его собственным.
### Развитие себя и обучение других
- Делает выводы для себя на основе обратной связи.
- Совместно с руководителем ставит себе четкие цели на обучение.
- Быстро обучается. Активно задает вопросы, чтобы учиться.
- Берет задачи в работу, которые раньше не делал, чтобы научиться.
## Middle
### Экспертность
- Самостоятельно решает задачи из бэклога.
- Степень неопределённости невысокая (понятно что нужно сделать, может быть непонятно как). Работает с неопределённостью — проводит ресерчи, собирает информацию.
- Самостоятельно оценивает риски в знакомом функционале. В незнакомом функционале привлекает эксперта для оценки рисков.
- Анализирует возникающие проблемы, старается докопаться до сути и решить корневую проблему. Предлагает и продвигает превентивные решения для предотвращения рецидивов.
- Тестирует нефункциональные требования или привлекает для этого экспертов.
### Инженерная культура
- Проводит Code Review коллег, способствуя тому, чтобы вливаемый код соответствовал лучшим практикам Авито, был тестопригодным, безопасным и поддерживаемым.
- Пишет автотесты на свой код учитывая «пирамиду тестирования» команды. Систематически увеличивает покрытие кодовой базы автотестами.
- Выбирает оптимальный способ проверки качества задач. Использует подходящие виды тестирования.
- Находит баланс между скоростью разработки/тестирования и качеством.
- При реализации или внедрении новых технических решений или подходов валидирует их с ответственными.
- При решении своей задачи, улучшает общие инженерные инструменты компании или даёт конструктивный фидбек их владельцам.
- При разработке придерживается подходов KISS и DRY.
- Устраняет/избегает распространенных уязвимостей безопасности (OWASP) при решении своих задач.
- Проактивно консультируется с коллегами для выбора безопасных подходов к реализации разрабатываемой функциональности.
- При реализации задач добаляет необходимые метрики и мониторит их после релиза.
- Самостоятельно находит ответы на вопросы по техническим метрикам (например: какая нагрузка на мой сервис? какой 99й перцентиль времени ответа?)
- Вместо долгой разработки создает или предлагает владельцу продукта MVP для проверки гипотезы или нового технического решения.
### Ответственность за результат
- Берет ответственность за доставку задачи до пользователей. Выходит за рамки просто разработки/тестирования. На всех этапах следит за задачей и помогает её продвижению. Не использует оправдание «На моей машине работает и ОК». Сразу подсвечивает возникающие блокеры и предлагает варианты решения.
### Ориентация на бизнес
- При планировании работы знает на какие команды может повлиять задача и говорит об этом.
- Регулярно интересуется фидбэком пользователей (читает user voice, отчёты поддержки, результаты пользовательских исследований, спрашивает у руководителя или продукт менеджера) и обсуждает с командой полученные инсайты.
- Отслеживает прогресс по целям юнита/команды в течение квартала (вместе с командой).
- Декомпозирует крупные фичи на набор полезных инкрементов, которые можно релизить независимо (например user story).
- Самостоятельно находит ответы на простые вопросы по метрикам (Сколько подач в категории Запчасти совершают в среднем за день пользователи с Андроид?)
### Agile Mindset
- Ставит успех команды выше личных целей. Например:
- Берёт на себя роль scrum-мастера или проводит scrum-встречи в его отсутствие.
- При выборе задачи над которой будет работать выбирает ту которая приближает команду к результату, а не ту которая нравится.
- T-shaping в соседние функции, которые нужны команде/компании.
- Не говорит, что это работа менеджера, а моя только кодить.
- Предлагает свою помощь коллегам, если видит что она нужна.
- Анализирует как улучшить эффективность своей работы. Проводит разборы что было хорошо и что улучшить, выходит в действия.
- Улучшает процессы в фича команде. Например:
- Систематизирует результаты ретроспектив и трекает выполнение договорённостей.
- Проводит регулярные (например каждый спринт) или тематические (например по проекту или конкретной проблеме) ретроспективы. Ретроспектвы приводят к значимому улучшению рабочего процесса.
### Коммуникация
- Не доводит разногласия до деструктивных конфликтов.
- Если конфликт произошел-решает его, привлекая руководителя если нужно.
- Презентует свои идеи и предложения и результаты на группу или аудиторию (выступления на общих встречах).
- Дает конструктивную и развивающую обратную связь, подкрепленную фактами.
### Развитие себя и обучение других
- Планирует свое развитие с учетом планов развития продукта и ближайших целей команды. Например
- Учит новые языки программирования (Go, Kotlin) на которые переходит компания.
- Изучает лучшие практики разработки и проектирования микросервисной архитектуры.
- Следит за последними трендами в своей области технологий.
- По итогам обучения отслеживает динамику развития по тем целям, которые поставил.
- Проявляет терпение к тем, кто обладает меньшими знаниями, умениями и навыками.
- Делится своей экспертизой внутри команды.
- Онбордит новичков
## Senior
### Экспертность
- Степень неопределённости высокая. Непонятно что нужно сделать (нет образа результата). Берёт проблему, проводит исследование, сравнивает альтернативы и предлагает решение. Спектр решений широкий и заранее неопределенный. Примеры проблем:
- Приложение должно работать быстрее конкурентов.
- Что нам нужно сделать для автоматического заполнения параметров объявления на основе технических характеристик?
- Как протестировать сервис прайсинга или item storage?
- При принятии решений анализирует и минимизирует возможные риски и негативные последствия. Например
- При проектировании тестовой модели учитывает как работает Авито в целом.
- При добавлении нового сервиса/метода в цепочку вызовов анализирует как это скажется на общем времени ответа.
- Cовместно с командой реализует проекты в максимально короткие сроки, заботится об уменьшении time to market
- Ведёт технический бэклог и/или дорожную карту (roadmap) команды/юнита/проекта
- Разрабатывает стандарты качества кода, тестирования, безопасности, отказоустойчивости и других NFR (Non-functional requirements), а также занимается внедрением/улучшением соответствующих процессов и инструментов.
### Инженерная культура
- Проактивно ищет неэффективные места в коде/архитектуре/тестовых моделях. Пополняет технический бэклог команды и доносит до владельца бэклога ценность технических изменений.
- При примении новых технологий в рамках своей задачи критически оценивает их пользу и применимость в юните.
- При проектировании больших или высоконагруженных систем проводит защиту на Архитектурном Комитете
- Системно контролирует количество технического долга. Может его оценить. Не допускает ситуации, когда он начнёт тормозить процесс разработки и начнёт мешать вносить изменения.
- В рамках Code Review и в процессе выполнения своих задач выявляет небезопасные подходы и/или уязвимости
- Знает и выбирает изначально безопасные подходы к реализации разрабатываемой им и командой функциональности.
### Ответственность за результат
- Берёт ответственность не только за себя, но и за работу других в рамках своей задачи/проекта (отвечает за проект).
- Работает над небольшими проектами размером до 1 квартала.
- Как технический владелец проекта планирует и согласовывает работу над ним других членов команды или внешних экспертов.
### Ориентация на бизнес
- Ставит с командой цель (OKR) на квартал. Связывает её с целями юнита, кластера, компании.
- При проработке задач предлагает альтернативные способы проверки гипотез и технических решений, позволяющие получить данные быстрее/с меньшими затратами.
- Делает базовые выводы по результатам проведенного исследования (например делает базовые выводы по а/б тестам: статистически значимый результат или нет; тест показывает плохие результаты на метриках, его нужно остановить). "Подсвечивает" найденные проблемы или успехи.
- Исследует проблемы пользователей и помогает заказчику найти бизнес решение (например: участвует в дискавери спринтах в роли продукт менеджера).
### Agile Mindset
- Системно улучшает процессы в команде/юните.
- Имеет видение целевой модели команды. Знает какой результат хочет получить.
- Формирует план развития команды. Ведёт бэклог для достижения целевой модели команды.
- При поиске и решении проблем выходит за рамки фича-команды, ищет системные проблемы на уровне юнита.
### Коммуникация
- Договаривается, используя стратегию "Win-Win" (Сотрудничество).
- Во время обсуждений стимулирует высказывание различных точек зрения и использует их при формировании окончательного решения.
### Развитие себя и обучение других
- Наставничество Intern, Junior и Middle. Планирует их развитие с учётом профилей инженеров и целей команды.
- Помогает коллеге закрепить полученные знания на практике и перевести в навык.
- Участвует в TechPR. Выступает на внешних конференциях, пишет статьи в профильные блоги.
## Lead
### Экспертность
- Придумывает, исследует и планирует развитие большого технического проекта.
- Бэкэнд архитектура всего функционала BuyerX (serp, карточка, фильтры, рубрикатор, url builder)
- Архитектура мессенджера.
- Привлечение краудсорсинга к тестированию.
- Фрейморк для написания e2e & компонентных тестов, для снижения ручных проверок мобильных приложений и переводу запуска тестов ближе к разработчику.
- Визионерство. Следит за глобальными технологическими трендами и может сделать прогноз с определённой долей вероятности.
### Инженерная культура
- Внедряет новые подходы и технологии в рамках компании. Оценивает их пользу и применимость.
### Ответственность за результат
- Работает над средними проектами размером в 2-4 квартала.
- Как технический владелец проекта планирует и согласовывает работу над ним других команд/юнитов или внешних экспертов.
### Ориентация на бизнес
- Находит технические проблемы, мешающие бизнесу развиваться сейчас или грозящие в ближайшем будущем.
- Планирует и проводит необходимые исследования (например: сплит-тесты, опросы, опыт других компаний) для проверки реальности проблем/пользовательских болей.
- Использует результаты проведённых исследований для аргументации важности предлагаемых решений.
- При работе над задачами учитывает цели юнита и компании на горизонте 1 года и больше.
- Вместе с техническим руководителями формирует техническую стратегию кластера.
### Agile Mindset
- Системно улучшает процессы в кластере/компании.
- Проводит большие ретроспективы состоящие из нескольких юнитов или всего кластера.
- При поиске и решении проблем выходит за рамки команды/юнита, ищет системные проблемы на уровне кластера/организации.
### Коммуникация
- Договаривается, используя стратегию "Win-Win" (Сотрудничество).
- Во время обсуждений стимулирует высказывание различных точек зрения и использует их при формировании окончательного решения.
### Развитие себя и обучение других
- Наставничество Senior.
- Разрабатывает внутренние или внешние курсы и ведёт их как преподаватель.
## Principal
### Экспертность
- Создатель/мэйнтейнер систем/решений, которые влияют на уровне cообщества. Компания получает ощутимые конкурентные преимущества за счёт этого.
- Способен инициировать и реализовывать крупные инициативы уровня компании. Примеры: переход от монолитной архитектуры к микросервисной.
- Анализирует возникающие проблемы, старается докопаться до сути и решить корневую проблему. Предлагает и продвигает превентивные решения для предотвращения рецидивов. Отличается от Lead и Senior масштабом. Principal думает про весь Авито целиком, а не про какую-то отдельную область.
### Инженерная культура
- Внедряет новые подходы и технологии в рамках компании. Оценивает их пользу и применимость.
### Ответственность за результат
- Работает над большими проектами размером в 1 год или больше.
- Как технический владелец проекта планирует и согласовывает работу над ним других юнитов/кластеров или внешних экспертов.
### Ориентация на бизнес
- Находит технические проблемы, мешающие бизнесу развиваться сейчас или грозящие в ближайшем будущем.
- Планирует и проводит необходимые исследования (например: сплит-тесты, опросы, опыт других компаний) для проверки реальности проблем/пользовательских болей.
- Использует результаты проведённых исследований для аргументации важности предлагаемых решений.
- При работе над задачами учитывает цели юнита и компании на горизонте 1 года и больше.
- Вместе с техническим руководителями формирует техническую стратегию кластера.
### Agile Mindset
- Системно улучшает процессы в кластере/компании.
- Проводит большие ретроспективы состоящие из нескольких юнитов или всего кластера.
- При поиске и решении проблем выходит за рамки команды/юнита, ищет системные проблемы на уровне кластера/организации.
### Коммуникация
- Договаривается, используя стратегию "Win-Win" (Сотрудничество).
- Во время обсуждений стимулирует высказывание различных точек зрения и использует их при формировании окончательного решения.
### Развитие себя и обучение других
- Евангелист внутренних технических продуктов для разработчиков компании или наших open-source продуктов за пределами компании.