| Джуниор | Мидл | Сеньор | TechLead | Principal | |
|---|---|---|---|---|---|
| Язык Go | |||||
| Основы и экосистема |
Пишет поддерживаемый Go-код
Использует типы, интерфейсы, структуры и стандартные паттерны без лишнего усложнения. Корректно обрабатывает ошибки
Не игнорирует ошибки, оборачивает их с контекстом, различает sentinel errors и кастомные типы. |
Применяет interfaces и composition
Проектирует зависимости через интерфейсы, разделяет domain, transport и infrastructure слои. Рефакторит безопасно
Улучшает структуру кода, сохраняя поведение и обратную совместимость. Эффективно использует stdlib
Предпочитает стандартную библиотеку перед внешними зависимостями там, где это разумно. |
Задает стандарты языка и кодовой базы
Определяет соглашения по package layout, стратегии ошибок, code review и общим утилитам. Проектирует shared abstractions
Создаёт переиспользуемые компоненты, которые снижают когнитивную нагрузку и не создают лишней связности. Ведёт ревью критичных изменений
Выявляет архитектурные риски, potential data races и проблемы совместимости в PR. |
Определяет package layout для проектов
Задаёт структуру репозитория так, чтобы команда двигалась единообразно и не принимала ad-hoc решений. Принимает решения по спорным деталям реализации
Разрешает разногласия в команде по техническим подходам, аргументируя через принципы, а не вкусовщину. Формирует культуру code review
Создаёт среду, где ревью приносит ценность: учит, а не придирается, снижает риски, а не затягивает поставку. Контролирует рост технического долга
Отслеживает накопление tech debt и включает его погашение в roadmap наравне с новыми фичами. |
Задаёт языковые стандарты для нескольких команд
Формирует engineering handbook с обоснованными решениями, которые работают в разных контекстах. Определяет, какие библиотеки принимаются в платформу
Оценивает зависимости по критериям: стабильность, поддержка, безопасность, lock-in риски. Формирует roadmap инженерных практик
Планирует эволюцию стандартов с учётом роста команды, масштаба системы и бизнес-направления. Влияет на технические решения через убеждение
Добивается принятия правильных решений без формальных полномочий, через аргументацию и доверие. Публично представляет технические подходы команды
Выступает на конференциях, пишет статьи, участвует в open-source — формирует внешний авторитет. |
| Concurrency |
Безопасно использует goroutines и channels
Добавляет concurrency только там, где это оправдано, без data races и утечек. Понимает context и cancellation
Пробрасывает context через цепочку вызовов, корректно реагирует на отмену. |
Строит bounded worker pools
Проектирует пулы с ограниченным параллелизмом, контролирует backpressure и graceful shutdown. Реализует retry с backoff и timeout
Обрабатывает временные сбои без перегрузки downstream-сервисов. Контролирует goroutine leaks
Выявляет и устраняет утечки goroutine при ревью и профилировании. |
Проектирует concurrency-модели под нагрузку
Выбирает synchronization patterns исходя из throughput, latency и production failure modes. Анализирует race conditions в production
Использует -race детектор, pprof и трейсинг для поиска concurrency-проблем. Задаёт паттерны для типовых сценариев команды
Определяет, какой паттерн (pipeline, fan-out, semaphore, worker pool) использовать в каждом контексте. |
Задаёт team-wide правила concurrency
Выбирает базовые worker, queue и cancellation patterns так, чтобы команда не создавала нестабильных решений. Ревьюит высоконагруженные флоу
Выявляет риски в критичных путях: deadlocks, starvation, thundering herd. Управляет рисками data races при поставке
Убеждается, что CI включает race detector и что критичные concurrency-сценарии покрыты тестами. |
Определяет платформенные стандарты backpressure
Выбирает модели ограничения нагрузки на уровне нескольких сервисов и команд. Проектирует fan-out стратегии для платформы
Определяет, как масштабировать параллельную обработку без деградации смежных систем. Формирует модель управляемой деградации
Задаёт принципы graceful degradation и circuit breaking на уровне домена. Выявляет системные риски concurrency
Проводит архитектурный анализ на предмет скрытых race conditions и deadlock-рисков в интеграциях. |
| Работа с данными | |||||
| SQL и базы данных |
Пишет корректные SQL-запросы
Использует JOIN, WHERE, индексы и параметризованные запросы, избегает SQL-инъекций. Пишет и применяет миграции
Создаёт up/down миграции, понимает порядок применения и обратимость изменений схемы. |
Оптимизирует медленные запросы
Читает EXPLAIN, добавляет индексы, устраняет N+1, переписывает subquery в JOIN там, где нужно. Проектирует схему для новых фич
Нормализует данные разумно, учитывает 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
Настраивает pgxpool/sqlx параметры, контролирует max connections, timeout и 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 и ждёт завершения активных запросов. Диагностирует проблемы внутри контейнеров
Читает логи, проверяет ресурсы, исследует файловую систему, работает с 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 процессом
Обеспечивает регулярное обновление базовых образов и Go-зависимостей с проверкой на уязвимости. Интегрирует 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-флоу
Параллелизует шаги, кэширует зависимости и модули, сокращает холодный старт. Реализует 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, не тестирует детали реализации. Использует table-driven тесты
Структурирует тест-кейсы через subtests, избегает дублирования и делает тесты читаемыми. |
Пишет integration-тесты с реальными зависимостями
Использует testcontainers или embedded БД — проверяет реальное поведение, а не моки. Корректно мокирует внешние сервисы
Выбирает между interface mock и HTTP stub в зависимости от уровня теста. Пишет benchmark для критичных путей
Измеряет производительность функций, отслеживает регрессии через benchcmp. |
Определяет 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. |
| Метрики и наблюдаемость |
Добавляет структурированные логи
Логирует достаточно, чтобы понять runtime behavior, без чувствительных данных и лишнего шума. Использует метрики и dashboards команды
Читает существующие grafana-дашборды, понимает базовые RED-метрики своего сервиса. |
Диагностирует инциденты по traces и metrics
Читает distributed traces, 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. Проектирует distributed tracing
Инструментирует сервисы с правильным span context, baggage и sampling strategy. Ведёт постмортем инцидентов
Пишет 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 или аналог в синхронизации с кодом при каждом изменении контракта. Документирует 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 компании в инженерном сообществе. |