Матрица компетенций: Разработчики#

О матрице#

Данная матрица описывает требования к компетенциям разработчиков для 20 позиций, сгруппированных по уровням. Каждый уровень оценивается по 4 критериям.

Технологический стек:

  • Основной: C#, .NET Framework/Core
  • Дополнительный: C++ для работы с nanoCAD API
  • Ключевые навыки: Алгоритмы, многопоточность, асинхронное программирование, высокопроизводительный код
  • Инструменты: Visual Studio/Rider, Mercurial (hg), CI/CD, профайлеры
  • Предметная область: Инженерные сети (ВК, ОВ, ГС, НВК и др.), BIM стандарты
  • Тестирование: unit-тесты, TDD, высокое покрытие критичного кода

INTERN (позиции 01-02)#

Общие компетенции уровня INTERN#

Критерий Ожидания
Технические навыки [Критичный] Понимание основ ООП (инкапсуляция, наследование, полиморфизм)
[Критичный] Понимание принципов SOLID
[Критичный] Базовые структуры данных (List, Dictionary, HashSet) и их complexity
[Критичный] Базовые алгоритмы (поиск, сортировка, обход графов: DFS/BFS)
• Знакомство с Visual Studio/Rider, Mercurial
[Nice-to-have] Начальное знакомство с инженерными сетями
• Пишет простой код под контролем наставника
Автономность • Требуется постоянное руководство наставника
• Выполняет микрозадачи
[Критичный] Задает много вопросов, активно учится
• Финальные решения принимает наставник
Влияние • Работает над отдельными микрозадачами
[Критичный] Фокус на обучении и адаптации
• Получает feedback по своему коду
Бизнес-impact • Минимальный вклад (простые баги, тесты)
[Критичный] Изучает продукт и его назначение

Примеры задач: Исправление простых багов, написание unit-тестов, документирование кода, изучение существующего кода.

Срок на позициях 01-02: Максимум 6 месяцев (полная ставка) или 12 месяцев (0.5 ставки). После — повышение до позиции 03 или расставание.

Позиция 01: Стажер-разработчик 2 категории#

Фокус: Обучение основам, адаптация в команде.

Позиция 02: Стажер-разработчик 1 категории#

Фокус: Завершение стажировки, демонстрация готовности к Junior.

Отличия от 01:

  • Более уверенное выполнение микрозадач
  • Меньше вопросов по базовым вещам
  • Начинает участвовать в простых code review

JUNIOR (позиции 03-06)#

Общие компетенции уровня JUNIOR#

Критерий Ожидания
Технические навыки • Уверенное применение SOLID на практике
• Применение основных паттернов (Singleton, Factory, Observer, Strategy)
• Применение алгоритмов и структур данных на практике
• Работа с Visual Studio/Rider, Mercurial (commit, branch, merge)
• Основы многопоточности (Thread, lock, thread safety)
• Написание unit-тестов для своего кода
[Nice-to-have] Понимание 1-2 разделов инженерных сетей
Автономность • Самостоятельно реализует типовые задачи
• Берет ответственность за свои задачи (доводит до done)
• Просит помощи при сложных задачах
• Реалистично оценивает свои задачи с помощью наставника
Влияние • Работает над задачами в рамках фичи
• Участвует в code review (получает и дает feedback)
• Может помочь стажерам
Бизнес-impact • Вносит вклад в реализацию фич
• Понимает основную цель продукта
• Знает, что продукт для проектировщиков

Критерии перехода между позициями#

Переход Что требуется
03 → 04 • Может самостоятельно реализовать фичу среднего размера (1-2 недели)
• Качественные unit-тесты
• Понимание async/await на базовом уровне
04 → 05 • Предлагает несколько вариантов решения задачи с trade-offs
• Знание алгоритмов средней сложности (деревья, DP)
• Async/await на практике
05 → 06 • Ведёт фичи от начала до конца с минимальным контролем
• Работа с nanoCAD API (базовый уровень)
• Предлагает свои решения с обоснованием
• Активно помогает позициям 03-04

Позиция 03: Младший разработчик 4 категории#

Фокус: Типовые задачи с наставником, освоение инструментов и процессов.

Отличия от 02 (Intern):

  • Самостоятельно реализует типовые задачи от постановки до тестов
  • Участвует в code review (не только получает, но и дает feedback)
  • Берет ownership за свои задачи

Позиция 04: Младший разработчик 3 категории#

Фокус: Растущая самостоятельность, базовый async.

Отличия от 03:

  • Больше самостоятельности в типовых задачах
  • Понимание async/await на базовом уровне
  • Качественные unit-тесты с граничными случаями

Позиция 05: Младший разработчик 2 категории#

Фокус: Алгоритмы средней сложности, растущая экспертиза.

Отличия от 04:

  • Знание алгоритмов средней сложности (деревья, графы, DP)
  • Асинхронное программирование (Task, async/await)
  • Может работать над небольшими фичами целиком

Позиция 06: Младший разработчик 1 категории#

Фокус: Верхняя граница Junior, готовность к Middle.

Отличия от 05:

  • Самостоятельно решает простые и большинство средних задач
  • Понимание основ работы с nanoCAD API
  • Предлагает свои решения с обоснованием
  • Полный ownership (от анализа до готовности к релизу)

Примеры задач Junior: Реализация алгоритмов, добавление фич под руководством, рефакторинг с применением SOLID и паттернов, исправление багов с написанием тестов.


MIDDLE (позиции 07-10)#

Общие компетенции уровня MIDDLE#

Критерий Ожидания
Технические навыки • Асинхронное программирование (TPL, async/await, async streams)
• Работа с nanoCAD API, понимание архитектуры
• Проектирование расширяемых решений (SOLID, паттерны)
• Тщательное тестирование (unit-тесты, моки)
• Понимание архитектуры приложения
[Nice-to-have] Понимание 2-3 разделов инженерных сетей

+ один из путей развития:
A) Technical Depth: Многопоточность, оптимизация, concurrency patterns
B) Breadth/Operational: CI/CD, автоматизация тестирования, практики качества
C) Legacy Modernization: Рефакторинг, работа с техдолгом, миграция
Автономность [Критичный] Полностью самостоятелен в типовых задачах
• Декомпозирует задачи самостоятельно
• Проявляет инициативу в улучшениях
[Критичный] Полный ownership за свои фичи
• Самостоятельно оценивает и планирует свою работу
Влияние [Критичный] Работает над целыми фичами
• Проводит code review для Junior
• Может быть наставником для Junior
• Предлагает улучшения процессов
Бизнес-impact [Критичный] Реализует фичи, приносящие ценность пользователям
• Понимает потребности инженеров-проектировщиков
• Участвует в оценке задач и планировании

Критерии перехода между позициями#

Переход Что требуется
07 → 08 • Уверенная работа в своей области, минимум вопросов
• Качественное code review (находит логические ошибки)
• Проактивное улучшение процессов
08 → 09 • Экспертиза в своей области, к нему обращаются за советом
• Начало менторинга Junior
• Его технические предложения регулярно принимаются командой
09 → 10 • Может вести небольшие проекты (техлид)
• Активный менторинг (вырастил хотя бы одного Junior)
• Готовность к переходу на Senior

Позиция 07: Разработчик 4 категории#

Фокус: Полная самостоятельность, работа над фичами целиком.

Отличия от 06 (Junior 1 кат.):

  • Полностью самостоятелен в типовых задачах
  • Работает над целыми фичами, а не отдельными задачами
  • Предлагает альтернативные решения в технических дискуссиях
  • Может быть наставником для Junior

Примечание: С этой позиции доступна роль Тимлида.

Позиция 08: Разработчик 3 категории#

Фокус: Уверенная работа, начало code review.

Отличия от 07:

  • Полная самостоятельность во всех задачах своей области
  • Предлагает варианты решений для сложных задач
  • Проактивно выявляет и решает проблемы

Позиция 09: Разработчик 2 категории#

Фокус: Экспертиза в области, менторинг.

Отличия от 08:

  • Экспертиза в своей области, к нему обращаются за советом
  • Активный менторинг Junior
  • Его технические предложения регулярно принимаются командой

Позиция 10: Разработчик 1 категории#

Фокус: Техлидство небольших проектов, готовность к Senior.

Отличия от 09:

  • [Критичный] К нему обращаются за консультациями по техническим вопросам
  • [Критичный] Вырастил хотя бы одного Junior до самостоятельности
  • Может вести небольшие проекты как техлид
  • Делится знаниями (технические доклады)

Примеры задач Middle: Разработка фич с тестовым покрытием, интеграция с nanoCAD, настройка CI/CD, менторинг Junior, техлидство небольших проектов.


SENIOR (позиции 11-14)#

Общие компетенции уровня SENIOR#

Критерий Ожидания
Технические навыки [Критичный] Проектирование архитектуры модулей и подсистем
• Уверенная работа с C++ и нативным кодом
• Знание лучших практик, паттернов, компромиссов
• Тестовые стратегии, архитектура тестирования
[Nice-to-have] Экспертное знание 3+ разделов инженерных сетей

+ один из путей развития:
A) Performance: CLR internals, lock-free алгоритмы, оптимизация памяти
B) Build & Quality: Архитектура CI/CD, tooling, engineering standards
C) Legacy Modernization: Стратегический рефакторинг, миграционные стратегии
Автономность [Критичный] Полная автономность в любых задачах
[Критичный] Ownership за целые подсистемы
• Предвидит проблемы и предотвращает их
• Планирует работу подсистемы, предвидит риски со сроками
Влияние [Критичный] Его решения становятся стандартами команды
[Критичный] Менторинг Middle специалистов
[Критичный] Ведет проекты от идеи до релиза
• Формирует технические стандарты команды
• Эффективно доносит технические решения до команды
Бизнес-impact [Критичный] Реализует ключевые фичи и проекты
[Критичный] Влияет на продуктовые решения
• Вклад значителен и подтверждён конкретными результатами

Критерии перехода между позициями#

Переход Что требуется
11 → 12 • Архитектурные решения на уровне модулей
• Менторинг Middle
• Принимает ключевые технические решения
12 → 13 • Архитектурные решения на уровне подсистем
• Устанавливает технические стандарты
• Менторинг других Senior
13 → 14 [Критичный] Влияет на всю команду/продукт
[Критичный] Архитектор систем уровня продукта
• К нему обращаются все в команде за консультациями

Позиция 11: Старший разработчик 4 категории#

Фокус: Проектирование решений, влияние на команду.

Отличия от 10 (Middle 1 кат.):

  • [Критичный] Проектирует архитектуру модулей
  • [Критичный] Менторинг Middle специалистов
  • Ведет проекты от идеи до релиза
  • Формирует технические стандарты команды

Позиция 12: Старший разработчик 3 категории#

Фокус: Архитектурные решения, рост других.

Отличия от 11:

  • Архитектор на уровне модулей и крупных компонентов
  • Устанавливает технические стандарты
  • Определяет технические направления развития

Позиция 13: Старший разработчик 2 категории#

Фокус: Техлидство проектов, менторинг Senior.

Отличия от 12:

  • Архитектор на уровне подсистем
  • Менторинг других Senior
  • Принимает ключевые архитектурные решения

Позиция 14: Старший разработчик 1 категории#

Фокус: Стратегические решения, технический авторитет.

Отличия от 13:

  • [Критичный] Архитектор систем уровня продукта
  • [Критичный] Влияет на всю команду/продукт
  • К нему обращаются все в команде за консультациями
  • Ведет несколько проектов или крупные инициативы

Примеры задач Senior: Архитектура подсистем, решение сложных проблем производительности, техлидство проектов, менторинг Middle, формирование стандартов.


STAFF (позиции 15-18)#

Общие компетенции уровня STAFF#

Критерий Ожидания
Технические навыки [Критичный] Лучше всех в отделе знает техническое ядро продукта
[Критичный] Архитектор на уровне продукта
[Критичный] Решает системные проблемы, требующие экспертизы в нескольких областях или кросс-командной координации
• Видение технического развития продукта на 1-2 года
[Nice-to-have] Эксперт в предметной области (инженерные сети, BIM)
Автономность [Критичный] Определяет технические направления развития продукта
[Критичный] Ownership за архитектуру критичных подсистем
• Принимает решения с долгосрочными последствиями
[Критичный] К нему обращаются все Senior-ы за консультациями
Влияние [Критичный] Влияет на весь отдел (10-20 человек)
[Критичный] Менторинг и развитие Senior инженеров
[Критичный] Принимает критичные архитектурные решения
• Формирует технические стандарты отдела
• Пишет понятные технические документы (RFC, design docs)
[Nice-to-have] Выступает на локальных митапах
Бизнес-impact [Критичный] Влияет на техническую стратегию продукта
[Критичный] Вклад критичен для успеха продукта
• Работает с product-менеджерами напрямую
• Решает проблемы, блокирующие развитие продукта

Критерии перехода между позициями#

Переход Что требуется
15 → 16 • Кросс-командное влияние
• Решает системные проблемы, требующие экспертизы в нескольких областях
• Формирует стандарты отдела
16 → 17 • Техническая стратегия продукта
• Влияние на весь отдел
• Развивает Senior инженеров
17 → 18 • Видение развития на 1-2 года
• Критичен для успеха продукта
• Готовность к Principal

Позиция 15: Ведущий разработчик 4 категории#

Фокус: Лучший инженер отдела, решает сложнейшие проблемы.

Отличия от 14 (Senior 1 кат.):

  • Влияние на весь отдел (не только команду)
  • Кросс-командное влияние
  • Решает системные проблемы, требующие экспертизы в нескольких областях

Позиция 16: Ведущий разработчик 3 категории#

Фокус: Кросс-командное влияние, формирование стандартов.

Отличия от 15:

  • Формирует технические стандарты отдела
  • Менторинг Senior инженеров
  • Принимает критичные архитектурные решения

Позиция 17: Ведущий разработчик 2 категории#

Фокус: Техническая стратегия, развитие Senior.

Отличия от 16:

  • Определяет техническую стратегию продукта
  • Видение развития на 1-2 года
  • Вклад критичен для успеха продукта

Позиция 18: Ведущий разработчик 1 категории#

Фокус: Лучший инженер отдела, готовность к Principal.

Отличия от 17:

  • Лучше всех знает техническое ядро продукта
  • К нему обращаются все Senior-ы за консультациями
  • Работает с product-менеджерами напрямую

Примеры задач Staff: Техническая стратегия продукта, архитектура критичных компонентов, исследование новых технологий, решение самых сложных проблем, кросс-командные инициативы, менторинг Senior-ов.

Примечание: Позиции 15-18 — это обычно 2-4 человека в отделе из 15-20 инженеров.


PRINCIPAL (позиции 19-20)#

Общие компетенции уровня PRINCIPAL#

Критерий Ожидания
Технические навыки [Критичный] Глубокая экспертиза в архитектуре всех продуктов департамента
[Критичный] Спроектировал ключевые компоненты продуктов
[Критичный] Видение развития на 2-3 года вперед
[Nice-to-have] Эксперт в предметной области и BIM стандартах
[Критичный] Определяет технологическую стратегию департамента
• Влияет на выбор технологий для новых продуктов
Автономность [Критичный] Определяет техническую стратегию всех продуктов
[Критичный] Ownership за архитектуру и техническое здоровье продуктов
• Полная свобода в технических решениях
[Критичный] К нему обращаются все (включая руководителей и Staff)
Влияние [Критичный] Влияет на весь департамент (20-50 человек)
[Критичный] Развивает технических лидеров
[Критичный] Принимает стратегические технические решения
• Формирует техническую культуру департамента
[Критичный] Является финальным арбитром в сложных технических спорах
• Презентует стратегические решения руководству
Бизнес-impact [Критичный] Влияет на стратегию всех продуктов
[Критичный] Критичен для конкурентоспособности продуктов
• Работает с топ-менеджментом напрямую

Позиция 19: Главный разработчик 2 категории#

Фокус: Технический лидер, глубокая экспертиза.

Отличия от 18 (Staff 1 кат.):

  • Влияние на весь департамент (не только отдел)
  • Определяет техническую стратегию нескольких продуктов
  • Развивает Staff и Senior инженеров
  • Работает с топ-менеджментом

Позиция 20: Главный разработчик 1 категории#

Фокус: Стратегия всех продуктов, влияние на индустрию.

Отличия от 19:

  • Видение развития департамента на 2-3 года
  • Инициирует трансформационные изменения
  • [Nice-to-have] Участие в профессиональном сообществе (конференции, митапы)
  • Открывает новые возможности для бизнеса

Примеры задач Principal: Техническая стратегия департамента, архитектура новых продуктов, формирование технической культуры, стратегическое партнерство.

Примечание: Позиции 19-20 — это обычно 1-2 человека в департаменте из 20-50 инженеров.


Специфичные технические области#

Работа с nanoCAD API#

Уровень Ожидания
INTERN (01-02) Знакомство с API, чтение документации
JUNIOR (03-06) Использование готовых API, простые операции чтения/записи
MIDDLE (07-10) Уверенная работа с API, создание сложных объектов, понимание объектной модели
SENIOR (11-14) Работа с C++ частью, оптимизация взаимодействия, понимание внутреннего устройства
STAFF/PRINCIPAL (15-20) Архитектурное проектирование интеграции, экспертиза в nanoCAD ecosystem

Знание инженерных сетей (nice-to-have)#

Знание предметной области приветствуется, но не является блокирующим требованием.

Уровень Приветствуется
INTERN Базовое понимание назначения продукта
JUNIOR Базовое понимание 1 раздела
MIDDLE Хорошее знание 2-3 разделов
SENIOR Экспертное знание 3+ разделов
STAFF/PRINCIPAL Всесторонняя экспертиза

Алгоритмы и производительность#

Уровень Ожидания
INTERN Базовые алгоритмы (поиск, сортировка), O-нотация
JUNIOR [Критичный] Базовые алгоритмы (поиск, сортировка, DFS/BFS), O-нотация, алгоритмы средней сложности
MIDDLE Сложные алгоритмы (деревья, графы, DP), профайлинг, оптимизация узких мест
SENIOR Высокопроизводительные алгоритмы, глубокая оптимизация (память, CPU, GC)
STAFF/PRINCIPAL Архитектор высокопроизводительных систем, продвинутые техники (SIMD, lock-free)

Многопоточность и асинхронность#

Уровень Ожидания
INTERN Понимание концепций
JUNIOR Основы (Thread, lock, thread safety), async/await
MIDDLE Task, TPL, concurrency patterns, ConcurrentCollections
SENIOR Lock-free алгоритмы, Interlocked, memory barriers
STAFF/PRINCIPAL Архитектура многопоточных систем, стратегия concurrency

Тестирование и качество#

Уровень Ожидания
INTERN Понимание важности тестирования
JUNIOR [Критичный с 03] Unit-тесты для своего кода, покрытие основных сценариев
MIDDLE TDD, моки, интеграционные тесты, тестирование async кода
SENIOR Архитектура тестирования, тестовые стратегии, тестируемый дизайн
STAFF/PRINCIPAL Стратегия тестирования продукта, формирование культуры качества

Паттерны поведения для ключевых переходов#

Переход JUNIOR → MIDDLE (позиция 06 → 07)#

Ключевой сдвиг: От “выполняю под руководством” к “работаю полностью самостоятельно”

До (06) После (07)
Реализует задачи по готовому дизайну Самостоятельно проектирует решение
Спрашивает “как это сделать?” Приходит с вариантами решений
Обращается за помощью при новых задачах Обращается только в сложных случаях
Участвует в обсуждениях Активно влияет на технические решения

Gateway-критерии (без них повышение невозможно):

  • ✅ Ведёт фичи от начала до конца с минимальным контролем
  • ✅ Полный ownership за свои фичи (доводит до конца)

Переход MIDDLE → SENIOR (позиция 10 → 11)#

Ключевой сдвиг: От “хорошо делаю свою работу” к “влияю на команду и архитектуру”

До (10) После (11)
Проектирует решения для задач Проектирует архитектуру модулей
Менторит Junior Менторит Middle
Влияет на решения в команде Формирует стандарты команды
Экспертиза в своей области Ownership за целые подсистемы

Gateway-критерии:

  • ✅ Спроектировал архитектуру модуля или подсистемы
  • ✅ Вырастил хотя бы одного Junior до самостоятельности

Переход SENIOR → STAFF (позиция 14 → 15)#

Ключевой сдвиг: От “лучший в команде” к “влияю на весь отдел”

До (14) После (15)
Архитектор на уровне продукта Определяет технические направления
Влияет на свою команду Влияет на весь отдел (10-20 человек)
К нему обращаются в команде К нему обращаются Senior-ы из других команд
Решает сложные проблемы Решает системные проблемы, требующие экспертизы в нескольких областях

Gateway-критерии:

  • ✅ Кросс-командное влияние (impact за пределами своей команды)
  • ✅ Решает системные проблемы, требующие экспертизы в нескольких областях или кросс-командной координации

Переход STAFF → PRINCIPAL (позиция 18 → 19)#

Ключевой сдвиг: От “лучший в отделе” к “влияю на весь департамент”

До (18) После (19)
Техническая стратегия продукта Техническая стратегия всех продуктов
Влияет на отдел Влияет на департамент (20-50 человек)
К нему обращаются Senior-ы К нему обращаются все, включая руководителей
Решает сложнейшие проблемы Определяет технические направления департамента

Gateway-критерии:

  • ✅ Влияние на весь департамент
  • ✅ Техническая стратегия продуктов

Использование матрицы#

Для оценки сотрудника:#

  1. Определите текущую позицию и уровень
  2. Оцените соответствие по 4 критериям
  3. Проверьте gateway-критерии для следующей позиции
  4. Все 4 критерия должны соответствовать

Для планирования развития:#

  1. Прочитайте требования следующей позиции
  2. Выявите пробелы в компетенциях
  3. Составьте план развития
  4. Отслеживайте прогресс каждые 3-6 месяцев

Типичные ошибки при оценке#

Ошибка Правильный подход
“Он закрыл 50 задач — точно Senior!” Смотрим на сложность, качество, влияние на команду
Оценка по единичным случаям Ищем паттерн на протяжении 3-6 месяцев
Игнорировать “невидимую” работу Учитываем менторинг, code review, помощь коллегам
Сравнивать несравнимое Учитываем сложность модулей, состояние кодовой базы

Примечание: Эта матрица — руководство, а не жесткие правила. Учитывайте контекст и индивидуальные обстоятельства при оценке.