Матрица навыков .NET developer

Публичный пример ролевой матрицы для backend-инженеров, работающих с .NET и C#.

Go developer PHP developer Python developer .NET developer DevOps engineer DBA Юрист
Джуниор Мидл Сеньор TechLead Principal
Язык C# и .NET
Основы и экосистема
Пишет поддерживаемый C# код

Использует generics, interfaces, records, nullable reference types и стандартные паттерны без лишнего усложнения.

Корректно обрабатывает исключения

Не игнорирует ошибки, оборачивает их с контекстом, различает иерархии исключений и не ловит Exception без причины.

Применяет interfaces и composition

Проектирует зависимости через интерфейсы, разделяет domain, application и infrastructure слои.

Рефакторит безопасно

Улучшает структуру кода, сохраняя поведение и обратную совместимость.

Эффективно использует BCL и NuGet-экосистему

Предпочитает встроенные возможности платформы перед внешними зависимостями, оценивает пакеты по активности.

Задает стандарты языка и кодовой базы

Определяет соглашения по namespace layout, стратегии исключений, code review и общим утилитам.

Проектирует shared abstractions

Создаёт переиспользуемые компоненты, которые снижают когнитивную нагрузку и не создают лишней связности.

Ведёт ревью критичных изменений

Выявляет архитектурные риски, проблемы безопасности и нарушения совместимости в PR.

Определяет структуру проектов и решений

Задаёт структуру solution/projects так, чтобы команда двигалась единообразно и не принимала ad-hoc решений.

Принимает решения по спорным деталям реализации

Разрешает разногласия в команде по техническим подходам, аргументируя через принципы, а не вкусовщину.

Формирует культуру code review

Создаёт среду, где ревью приносит ценность: учит, а не придирается, снижает риски, а не затягивает поставку.

Контролирует рост технического долга

Отслеживает накопление tech debt и включает его погашение в roadmap наравне с новыми фичами.

Задаёт языковые стандарты для нескольких команд

Формирует engineering handbook с обоснованными решениями, которые работают в разных контекстах.

Определяет, какие пакеты принимаются в платформу

Оценивает NuGet-зависимости по критериям: стабильность, поддержка, безопасность, lock-in риски.

Формирует roadmap инженерных практик

Планирует эволюцию стандартов с учётом роста команды, масштаба системы и бизнес-направления.

Влияет на технические решения через убеждение

Добивается принятия правильных решений без формальных полномочий, через аргументацию и доверие.

Публично представляет технические подходы команды

Выступает на конференциях, пишет статьи, участвует в open-source — формирует внешний авторитет.

Асинхронность
Безопасно использует async/await и Task

Добавляет асинхронный код только там, где это оправдано, избегает deadlock через ConfigureAwait.

Понимает CancellationToken

Пробрасывает CancellationToken через цепочку вызовов, корректно реагирует на отмену.

Строит bounded worker pools

Проектирует пулы с ограниченным параллелизмом через SemaphoreSlim или Parallel.ForEachAsync.

Реализует retry с backoff и timeout

Обрабатывает временные сбои без перегрузки downstream-сервисов, использует Polly или аналоги.

Контролирует утечки Task и соединений

Выявляет и устраняет незавершённые tasks, открытые соединения и fire-and-forget антипаттерны.

Проектирует async-модели под нагрузку

Выбирает Task vs ValueTask, правильно применяет IAsyncEnumerable и Channel для потоков данных.

Анализирует deadlocks и contention в async-коде

Использует dotMemory, PerfView и ETW для поиска concurrency-проблем в production.

Задаёт паттерны для типовых сценариев команды

Определяет, какой паттерн (WhenAll, Channel, Dataflow, BackgroundService) использовать в каждом контексте.

Задаёт team-wide правила async-разработки

Выбирает базовые worker, queue и cancellation patterns так, чтобы команда не создавала нестабильных решений.

Ревьюит высоконагруженные флоу

Выявляет риски в критичных путях: deadlocks, thread starvation, thundering herd.

Управляет рисками async-кода при поставке

Убеждается, что CI проверяет критичные async-сценарии и что утечки задач обнаруживаются.

Выбирает между Thread, ThreadPool и async I/O

Принимает обоснованные решения с учётом CPU vs I/O bound нагрузки и ASP.NET Core контекста.

Определяет платформенные стандарты async processing

Выбирает модели ограничения нагрузки на уровне нескольких сервисов и команд.

Проектирует fan-out стратегии для платформы

Определяет, как масштабировать параллельную обработку без деградации смежных систем.

Формирует модель управляемой деградации

Задаёт принципы graceful degradation и circuit breaking на уровне домена.

Выявляет системные риски async-архитектуры

Проводит архитектурный анализ на предмет скрытых race conditions и deadlock-рисков в интеграциях.

Работа с данными
SQL и базы данных
Пишет корректные SQL-запросы

Использует JOIN, WHERE, индексы и параметризованные запросы, избегает SQL-инъекций.

Пишет и применяет миграции

Создаёт EF Core migrations, понимает порядок применения и обратимость изменений схемы.

Оптимизирует медленные запросы

Читает EXPLAIN/query plan, добавляет индексы, устраняет N+1 через Include или split queries.

Проектирует схему для новых фич

Нормализует данные разумно, учитывает nullable, constraints и сценарии удаления.

Управляет транзакциями и isolation levels

Выбирает правильный уровень изоляции, избегает deadlocks и long-running транзакций.

Задаёт database-стандарты команды

Определяет naming conventions, обязательные индексы, правила nullable и migration workflow.

Планирует безопасные миграции в production

Применяет zero-downtime паттерны: expand-contract, column backfill в несколько деплоев, lock-free alter.

Оценивает read/write patterns и выбирает стратегию

Решает, когда нужен read replica, кэш или event sourcing вместо classical CRUD.

Управляет connection pool в production

Настраивает EF Core/Dapper connection pool параметры, контролирует max connections и health check.

Контролирует database-риски в поставке

Проверяет, что миграции протестированы, обратимы и не вызовут деградации в production.

Синхронизирует migration strategy

Координирует database changes между несколькими сервисами и командами.

Задаёт policy индексирования

Определяет, кто и как добавляет индексы, как проходит review схемы, кто отвечает за performance regression.

Предотвращает опасные изменения схемы

Запрещает или согласует DROP, NOT NULL без default, full-table lock изменения в peak hours.

Определяет data strategy домена

Выбирает между SQL, NoSQL и смешанными хранилищами в зависимости от нагрузки, структуры и SLO.

Проектирует multi-tenant и multi-region хранилище

Закладывает partitioning, sharding и geo-distribution на уровне платформы.

Задаёт backup, restore и DR требования

Определяет RPO/RTO, тестирует восстановление, формирует runbook для инцидентов с данными.

Формирует capacity planning по данным

Прогнозирует рост объёмов, затраты на хранение и вовремя инициирует архитектурные изменения.

Управляет соответствием требованиям к данным

Обеспечивает выполнение GDPR, retention policy и audit trail на уровне нескольких систем.

Очереди и события
Пишет consumer с корректным ack/nack

Понимает at-least-once семантику, не теряет и не дублирует сообщения без причины.

Реализует простой producer

Публикует события с нужной структурой, обрабатывает ошибки отправки.

Реализует idempotent consumers

Обрабатывает дубликаты через deduplication key или идемпотентные операции в БД.

Проектирует dead-letter флоу

Настраивает DLQ, алерты на lag и процедуру reprocess для сломанных сообщений.

Следит за consumer lag

Настраивает мониторинг отставания consumer, выявляет и устраняет причины накопления.

Проектирует event-driven флоу с гарантиями доставки

Выбирает паттерн outbox, saga или choreography в зависимости от требований к консистентности.

Задаёт контракты событий

Определяет schema событий, versioning strategy и backward/forward compatibility.

Выбирает между sync и async интеграцией

Аргументирует выбор, понимая tradeoffs: latency, coupling, failure isolation, observability.

Задаёт queue-стандарты для команды

Определяет, какой брокер и паттерн использовать в каких сценариях, документирует решения.

Управляет observability очередей

Обеспечивает алерты на lag, DLQ рост и partition skew; налаживает runbook для on-call.

Управляет schema evolution событий

Координирует изменения в event schema между producer и consumer командами.

Синхронизирует event contracts между командами

Ведёт реестр событий, согласует breaking changes и организует совместное тестирование контрактов.

Определяет messaging strategy платформы

Выбирает брокеры, паттерны доставки и retention policy для всего домена.

Проектирует event sourcing на уровне домена

Задаёт, где хранить event log, как строить проекции и как обеспечить replay.

Формирует гарантии доставки и консистентности

Определяет уровень exactly-once или idempotency для критичных бизнес-операций.

Выявляет системные риски event-driven архитектуры

Анализирует cascade failure, ordering проблемы и distributed transaction риски.

Инфраструктура и поставка
Docker и контейнеры
Собирает multi-stage Docker-образы

Разделяет build и runtime стадии, не копирует ненужные артефакты в финальный образ.

Работает с локальной средой через Docker Compose

Запускает зависимости (БД, очереди, сервисы) локально, понимает volumes и сетевой namespace.

Оптимизирует образы по размеру и слоям

Правильно упорядочивает инструкции для кэширования слоёв, использует .dockerignore.

Настраивает healthcheck и graceful shutdown

Реализует /healthz endpoint, обрабатывает SIGTERM через IHostApplicationLifetime и ждёт завершения запросов.

Диагностирует проблемы внутри контейнеров

Читает логи, проверяет ресурсы, исследует файловую систему, работает с exec в prod-подобной среде.

Задаёт Dockerfile-стандарты команды

Определяет базовые образы, linting правила и review checklist для контейнерных артефактов.

Проектирует dev/prod паритет окружений

Обеспечивает, чтобы локальный Compose и production среда отличались минимально.

Оценивает image security

Запускает trivy/grype, отслеживает CVE в базовых образах, задаёт non-root user.

Задаёт базовые образы для команды

Выбирает и поддерживает golden images, управляет их обновлением и уведомлением команды.

Контролирует container security policy

Определяет политику запуска: non-root, read-only filesystem, resource limits, seccomp.

Управляет dependency update процессом

Обеспечивает регулярное обновление базовых образов и NuGet-зависимостей с проверкой на уязвимости.

Интегрирует container scanning в CI

Добавляет автоматический image scan в pipeline, настраивает severity threshold и уведомления.

Определяет container strategy платформы

Выбирает runtime (Docker, containerd), orchestration и image registry стратегию.

Задаёт политику базовых образов для нескольких команд

Стандартизирует approved base images, enforcement механизм и process их обновления.

Проектирует observability в контейнерной среде

Стандартизирует log format, metrics exposition, tracing injection на уровне платформы.

Синхронизирует container standards между командами

Формирует RFC и ADR для платформенных решений, получает buy-in от tech leads команд.

Сборка и CI/CD
Понимает и читает pipeline

Разбирается в шагах CI: lint, test, build, deploy — знает, что каждый делает и где искать причину сбоя.

Фиксит flaky тесты в CI

Умеет найти причину нестабильного теста: race condition, зависимость от порядка, внешний сервис.

Настраивает pipeline для нового сервиса

Конфигурирует lint, test, build и deploy шаги с нужными environment variables и secrets.

Ускоряет медленные CI-флоу

Параллелизует шаги, кэширует NuGet packages и dotnet artifacts, сокращает холодный старт.

Реализует canary или blue/green деплой

Разворачивает изменения постепенно, умеет откатить без downtime.

Проектирует deployment strategy для сервисов

Выбирает rolling, canary или blue/green исходя из SLO, объёма трафика и критичности.

Задаёт pipeline стандарты для команды

Определяет обязательные шаги: lint, security scan, test coverage, smoke test после деплоя.

Управляет rollback-процедурами

Документирует и тестирует процедуру отката, убеждается, что команда может откатить под давлением.

Внедряет автоматические quality gates

Блокирует деплой при деградации coverage, появлении CVE выше порога или падении smoke тестов.

Задаёт deployment governance команды

Определяет, что нужно для production-ready: checklist, approvals, observability requirements.

Устанавливает release gates и approval флоу

Балансирует скорость поставки и контроль риска: кто аппрувит, при каких условиях автоматически.

Контролирует production readiness новых сервисов

Проверяет, что сервис имеет healthcheck, метрики, алерты, runbook и документацию до деплоя.

Синхронизирует delivery process с другими командами

Координирует release windows, feature flags и зависимости при совместных поставках.

Определяет delivery strategy платформы

Выбирает модель деплоя и инструменты CI/CD на уровне нескольких команд.

Проектирует progressive delivery

Задаёт принципы feature flags, traffic splitting и automated rollback на уровне платформы.

Задаёт SLO для pipeline reliability

Определяет допустимое время сборки, процент flaky тестов и MTTR для CI-инфраструктуры.

Формирует change management policy

Задаёт правила для hot fix, emergency deploy и change freeze — с балансом скорости и безопасности.

Выявляет bottlenecks в delivery процессе

Измеряет DORA-метрики, находит ограничения и инициирует улучшения на уровне платформы.

Качество и надёжность
Тестирование
Пишет unit-тесты для business logic

Покрывает happy path и основные error branches через xUnit или NUnit, не тестирует детали реализации.

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

Структурирует тест-кейсы через [Theory]/[TestCase], избегает дублирования и делает тесты читаемыми.

Пишет integration-тесты с реальными зависимостями

Использует Testcontainers.NET или in-memory БД — проверяет реальное поведение, а не только моки.

Корректно мокирует внешние сервисы

Выбирает между Moq/NSubstitute и HTTP stub (WireMock.NET) в зависимости от уровня теста.

Пишет benchmark для критичных путей

Измеряет производительность через BenchmarkDotNet, отслеживает регрессии.

Определяет test strategy для команды

Задаёт баланс между unit, integration и e2e тестами с учётом скорости и уверенности.

Внедряет contract testing

Использует Pact или schema-based approach для проверки совместимости между сервисами.

Оценивает coverage осмысленно

Отличает полезное coverage от бессмысленного, фокусируется на критичных сценариях.

Проектирует testable architecture

Закладывает dependency injection и явные границы в дизайн, чтобы тестирование не требовало героизма.

Задаёт обязательный quality bar поставки

Определяет, без чего PR не принимается: минимум coverage, обязательные сценарии, performance tests.

Контролирует regression coverage

Следит за тем, чтобы после каждого инцидента добавлялся тест, предотвращающий повтор.

Исключает тесты без ценности

Ревьюит и удаляет тесты, которые только замедляют CI, но не повышают уверенность.

Управляет test debt

Ведёт список известных пробелов в покрытии и включает их устранение в roadmap.

Формирует test confidence model для нескольких сервисов

Задаёт, как совокупность тестов разных уровней обеспечивает уверенность в поставке.

Задаёт стандарты reliability testing

Определяет требования к load testing, chaos engineering и failure injection для критичных систем.

Проектирует chaos и fault injection

Внедряет systematic failure experiments для выявления слабых мест до production инцидентов.

Формирует приёмочные критерии для критичных систем

Задаёт технические условия запуска новых сервисов с высоким SLO: тесты, нагрузка, DR.

Метрики и наблюдаемость
Добавляет структурированные логи

Логирует достаточно через Serilog/NLog, чтобы понять runtime behavior, без чувствительных данных.

Использует метрики и dashboards команды

Читает существующие grafana-дашборды, понимает базовые RED-метрики своего сервиса.

Диагностирует инциденты по traces и metrics

Читает distributed traces через OpenTelemetry, correlates logs и изолирует bottleneck или regression.

Строит alerting для новых сервисов

Создаёт алерты на error rate, latency p95 и saturation с правильными thresholds и runbook.

Интерпретирует latency распределения

Отличает p50 от p99, понимает tail latency и влияние GC pauses на графики.

Определяет SLI и SLO для сервисов

Выбирает значимые индикаторы качества, согласует цели с продуктом и устанавливает error budget.

Задаёт naming conventions для метрик

Определяет стандарты именования, labeling и cardinality ограничения для Prometheus/OTLP.

Проектирует distributed tracing

Инструментирует сервисы с правильным span context, baggage и sampling strategy через OpenTelemetry.

Ведёт постмортем инцидентов

Пишет blameless постмортем, выявляет системные причины и формирует action items.

Задаёт observability standards команды

Определяет обязательный минимум: что логировать, какие метрики инструментировать, как трейсить.

Контролирует alert fatigue

Регулярно ревьюит алерты: убирает лишние, улучшает thresholds, добавляет runbook.

Обеспечивает on-call readiness команды

Гарантирует, что у каждого сервиса есть runbook, алерты с описанием и escalation path.

Формирует культуру постмортема

Нормализует blameless review, следит за выполнением action items и делится знаниями с командой.

Определяет reliability strategy платформы

Выстраивает единый подход к SLO, error budget и incident management для всего домена.

Задаёт cross-service SLO и error budgets

Формирует dependency SLA между командами, связывает бюджеты с приоритетами поставки.

Проектирует centralized telemetry

Определяет платформенные инструменты сбора, хранения и визуализации observability данных.

Выстраивает feedback loop из production

Создаёт систему, при которой production-сигналы регулярно влияют на приоритеты команд.

Формирует стандарты incident management

Задаёт severity levels, escalation matrix, communication protocol и learning system для инцидентов.

Командная работа
Самостоятельность
Декомпозирует задачу самостоятельно

Разбивает задачу на понятные шаги, уточняет неясное до начала работы.

Своевременно эскалирует блокеры

Не застревает молча дольше дня — сигнализирует о блокере и предлагает варианты.

Ведёт задачу от проектирования до поставки

Сам определяет подход, согласует его и доводит до production без потери промежуточных шагов.

Самостоятельно находит и согласует решение

Предлагает конкретный вариант с tradeoffs, а не задаёт открытый вопрос «как делать».

Управляет своим бэклогом

Держит задачи в актуальном состоянии, сам расставляет приоритеты в рамках sprint-цели.

Инициирует улучшения без запроса

Замечает проблемы в системе и предлагает решение, не дожидаясь, пока кто-то поставит задачу.

Управляет параллельными треками

Ведёт несколько задач одновременно, не теряет контекст и не создаёт bottleneck для команды.

Принимает решения в условиях неопределённости

Двигается вперёд с неполной информацией, фиксирует допущения и готов пересмотреть решение.

Ведёт технический трек команды самостоятельно

Управляет техническим backlog, задаёт направление и держит скорость без ежедневного менеджмента.

Определяет приоритеты технического бэклога

Балансирует новые фичи, tech debt и reliability work с учётом бизнес-контекста.

Управляет рисками без постоянной эскалации

Самостоятельно оценивает и митигирует технические риски, эскалирует только существенные.

Разблокирует других без потери своего прогресса

Помогает команде двигаться, не беря на себя чужую работу целиком.

Формирует повестку самостоятельно

Сам определяет, какие проблемы важны, и инициирует работу без внешнего запроса.

Инициирует кросс-командные улучшения

Выявляет системные проблемы и организует работу нескольких команд для их решения.

Управляет стратегическими техническими рисками

Удерживает в фокусе долгосрочные риски: vendor lock-in, architectural debt, skill gap.

Строит консенсус без формальных полномочий

Добивается принятия решений через аргументацию, доверие и вовлечение ключевых stakeholders.

Работает с длинными горизонтами планирования

Видит и управляет технической стратегией на 12–24 месяца вперёд.

Оформление артефактов
Оформляет PR с описанием изменений

Описывает, что изменено, зачем и как проверить — ревьюер не должен реконструировать контекст.

Пишет понятные commit messages

Следует принятому формату, описывает суть изменения, а не процесс работы.

Описывает контекст и tradeoffs в PR

Объясняет, почему выбрано именно это решение, какие альтернативы рассматривались.

Документирует нетривиальные решения в коде

Добавляет комментарий не «что», а «почему» — там, где логика неочевидна.

Поддерживает актуальность задач в трекере

Обновляет статус, добавляет результаты обсуждений, не оставляет задачи в неопределённом состоянии.

Пишет понятные design-документы

Описывает проблему, предложение, альтернативы и риски так, чтобы получить качественный feedback.

Фиксирует решения в ADR

Записывает значимые архитектурные решения с контекстом, чтобы будущие инженеры понимали «почему».

Структурирует артефакты для ревью команды

Выбирает правильный формат: RFC, design doc, spike summary — в зависимости от сложности и аудитории.

Задаёт стандарты оформления PR и задач

Создаёт шаблоны и чеклисты, объясняет команде ценность хороших артефактов.

Контролирует quality bar артефактов команды

Возвращает на доработку PR и задачи без контекста, формирует ожидания на примерах.

Готовит executive summary для нетехнической аудитории

Переводит технические решения в бизнес-язык: риски, сроки, влияние.

Формирует культуру письменной коммуникации

Поощряет async-first подход, документирование решений и прозрачность процессов в команде.

Задаёт стандарты RFC и ADR процесса

Определяет, когда нужен RFC, как он проходит ревью и как решения фиксируются и доступны.

Пишет стратегические документы для нескольких аудиторий

Адаптирует технический документ для инженеров, менеджмента и внешних партнёров.

Обеспечивает прозрачность технических решений

Создаёт систему, в которой важные решения доступны, понятны и обоснованы для всей организации.

Формирует engineering culture через документы

Пишет principles, manifesto и best practices, которые становятся ориентиром для команд.

Техническая документация
Дополняет README для своих изменений

Обновляет инструкции по запуску, env-переменным и зависимостям при каждом изменении.

Документирует конфигурацию и параметры

Описывает назначение env-переменных, допустимые значения и поведение по умолчанию.

Пишет runbook для нового сервиса

Описывает как запустить, остановить, откатить и продиагностировать сервис в production.

Актуализирует API-документацию

Поддерживает OpenAPI spec (Swagger) в синхронизации с кодом при каждом изменении контракта.

Документирует operational процедуры

Описывает типовые операции: миграции, плановые рестарты, ротацию секретов.

Ведёт архитектурную документацию актуальной

Синхронизирует диаграммы и описания с реальным состоянием системы, не допускает устаревания.

Пишет onboarding guide для сервиса

Создаёт документ, позволяющий новому инженеру быстро войти в контекст и стать эффективным.

Формирует базу знаний команды

Организует документацию так, чтобы нужное было легко найти и находилось в актуальном состоянии.

Задаёт documentation standards команды

Определяет структуру, обязательные разделы и процесс обновления для разных типов документов.

Контролирует полноту operational docs

Проверяет, что у каждого production сервиса есть runbook, alert descriptions и escalation path.

Формирует knowledge management подход

Выбирает инструменты и процессы для накопления и передачи знаний внутри команды.

Готовит документацию для аудита и compliance

Обеспечивает соответствие документации внешним требованиям: security review, vendor audit.

Определяет стратегию технических знаний домена

Задаёт, как знания накапливаются, структурируются и передаются между командами.

Управляет документированием межсистемных решений

Обеспечивает, чтобы cross-team архитектурные решения были зафиксированы и доступны.

Задаёт требования к ops documentation

Формирует стандарты runbook, постмортема и incident report на уровне нескольких команд.

Публикует инженерные решения вовне

Делится опытом команды через блог, конференции и open-source — создаёт внешний технический авторитет.

Коммуникация
Ясно описывает статус задачи

Сообщает, что сделано, что осталось и есть ли блокеры — без необходимости уточнять.

Задаёт уточняющие вопросы вместо предположений

Уточняет требования до начала работы, а не переделывает после завершения.

Объясняет технические решения нетехническим коллегам

Адаптирует уровень детализации к аудитории, не уходит в детали реализации там, где нужен результат.

Проводит конструктивный code review

Даёт конкретный, действенный feedback — указывает на проблему и предлагает путь решения.

Даёт и принимает feedback по работе

Говорит о проблемах прямо и без агрессии, принимает критику без защитной реакции.

Ведёт технические дискуссии к решению

Структурирует обсуждение, удерживает фокус и помогает группе прийти к конкретному выводу.

Выстраивает доверие с продуктом и смежными командами

Регулярно синхронизируется, держит партнёров в курсе, не создаёт неожиданностей.

Управляет разногласиями без эскалации

Находит компромисс или аргументированно убеждает, не втягивая менеджмент без необходимости.

Представляет позицию команды

Выступает от имени команды на кросс-командных встречах, транслирует приоритеты и ограничения.

Синхронизирует техническую повестку с менеджментом

Регулярно переводит технические приоритеты и риски в язык, понятный нетехническим руководителям.

Управляет ожиданиями стейкхолдеров

Заблаговременно сигнализирует о рисках, изменении сроков и влиянии технических решений.

Медиирует конфликты в команде

Помогает членам команды разрешать разногласия, создаёт безопасное пространство для обсуждения.

Формирует психологическую безопасность

Создаёт среду, где люди не боятся высказывать идеи, признавать ошибки и задавать вопросы.

Выступает техническим голосом домена

Представляет технические позиции на уровне директоров, партнёров и внешних аудиторий.

Ведёт кросс-командный диалог

Создаёт форумы для обмена знаниями и решения общих проблем между командами.

Строит альянсы для системных изменений

Убеждает ключевых stakeholders в необходимости изменений, формирует коалицию поддержки.

Управляет коммуникацией в условиях неопределённости

Даёт ясные ориентиры команде и партнёрам, когда стратегия ещё формируется.

Публично представляет инженерные решения

Выступает на конференциях, ведёт технический блог — формирует reputation компании в инженерном сообществе.