Применяет алгоритмы для оптимизации реального кода. Понимает амортизированную сложность (dict, list.append). Использует heapq, bisect, deque для оптимальных решений. Выбирает между сортировкой и хеш-таблицей для задач поиска.
Роли · Backend Developer (Python) · Middle
Что должен уметь Middle }
45 ключевых навыков, всего 75. Ожидания по каждому навыку и что меняется на следующем уровне.
На этой странице — что ожидается от Middle }, навык за навыком. Ключевые навыки оценивают руководитель и коллеги в цикле ревью; остальные учитываются только в самооценке. Основные области: Основы программирования, Backend Development, Базы данных.
Ключевые навыки для Middle
Сгруппированы по областям. Метка справа — ожидаемая глубина: Осведомлённость, Применение, Продвинутый или Эксперт.
Основы программирования · 8
Работает с asyncio: Tasks, gather, wait, semaphore. Использует aiohttp, httpx для async HTTP. Понимает event loop и его ограничения. Применяет asyncio.Queue для producer-consumer паттерна. Обрабатывает cancellation и timeouts.
Настраивает pre-commit hooks с ruff, mypy, black. Проводит рефакторинг code smells. Пишет type hints для всего кода. Применяет метрики качества (cyclomatic complexity, coverage). Участвует в code review конструктивно.
Использует concurrent.futures для thread и process pools. Применяет multiprocessing для CPU-bound задач. Понимает race conditions и использует Lock, RLock. Работает с shared state через Queue и Pipe.
Применяет Strategy, Template Method, Decorator, Command в Python-коде. Использует Repository pattern для работы с БД. Применяет Unit of Work с SQLAlchemy sessions. Знает антипаттерны и умеет их рефакторить.
Применяет SOLID в повседневной разработке. Использует абстрактные классы (ABC) и Protocol для определения интерфейсов. Понимает composition over inheritance. Применяет dependency injection через конструктор. Использует миксины правильно.
Применяет collections (OrderedDict, Counter, deque, namedtuple). Использует dataclasses для структурированных данных. Понимает внутреннее устройство dict (hash table). Выбирает оптимальную структуру для задачи. Работает с деревьями и графами через словари.
Использует TypedDict, Protocol, Literal, Union, Generic. Настраивает mypy с strict mode для модулей. Создаёт custom type aliases. Понимает variance (covariant/contravariant). Пишет типы для сложных API (overload, ParamSpec).
Backend Development · 6
Работает с message broker'ами в Python-проектах: использует Celery с RabbitMQ/Redis для фоновых задач, реализует pub/sub через confluent-kafka или aiokafka, применяет паттерны competing consumers и fan-out. Настраивает dead letter queues для обработки ошибок.
Применяет различные стратегии: cache-aside, write-through, write-behind. Реализует cache invalidation по событиям. Использует CDN-кэширование для статики. Мониторит cache hit rate. Обрабатывает cache stampede (thundering herd).
Настраивает consumer groups и partition assignment. Обрабатывает ошибки с retry и dead letter topics. Использует acks=all для надёжности. Мониторит consumer lag. Проектирует schema событий с Avro/JSON Schema.
Проектирует структуру FastAPI/Django проекта. Использует middleware, background tasks, WebSockets. Настраивает authentication/authorization. Работает с Alembic/Django migrations. Оптимизирует ORM-запросы (select_related, prefetch_related).
Использует различные структуры Redis (hashes, sets, sorted sets, lists). Применяет pipeline для batch-операций. Настраивает cache-aside и write-through паттерны. Использует Redis pub/sub для уведомлений. Обрабатывает cache miss корректно.
Настраивает Celery с различными брокерами (Redis, RabbitMQ). Использует chains, groups, chords для workflow. Настраивает retry с exponential backoff. Мониторит задачи через Flower. Обрабатывает ошибки и dead letter queues.
Базы данных · 7
Создаёт B-tree, UNIQUE, COMPOSITE индексы. Использует EXPLAIN для query plans. Знает когда индекс помогает и когда вредит. Создаёт индексы для foreign keys.
Пишет zero-downtime миграции. Использует expand-contract pattern. Мигрирует данные с backfill. Настраивает автоматический запуск миграций в CI/CD. Обрабатывает конфликты миграций.
Анализирует через EXPLAIN. Устраняет N+1 (eager loading, select_related). Оптимизирует JOINs. Использует оконные функции (ROW_NUMBER, LAG/LEAD). Понимает subquery types.
Проектирует схемы для микросервисов. Применяет денормализацию для performance. Моделирует полиморфные связи (STI, MTI). Проектирует audit trails и soft deletes. Использует JSONB для flexible data.
Работает с шардированными БД в Python: использует Django database routers для multi-database routing, реализует shard selection logic на основе tenant_id или user_id. Понимает trade-offs шардирования: cross-shard queries, join limitations, data distribution skew.
Настраивает connection pooling в Python: оптимизирует SQLAlchemy pool (QueuePool vs StaticPool, pool_pre_ping, pool_recycle), настраивает psycopg2/asyncpg pool для async приложений. Использует PgBouncer для connection multiplexing при FPM-like архитектуре. Мониторит pool utilization.
Использует CTE, оконные функции, JSONB операции. Настраивает connection pooling (pgBouncer). Оптимизирует через EXPLAIN ANALYZE. Работает с транзакциями и уровнями изоляции. Настраивает pg_stat_statements.
API и интеграции · 6
Проектирует RESTful API с versioning и cursor-based pagination. Документирует через OpenAPI/Swagger. Реализует error responses с кодами ошибок. Использует PATCH для частичных обновлений. Проектирует bulk endpoints.
Генерирует полную OpenAPI-документацию из кода. Настраивает Redoc или Swagger UI. Документирует error codes и примеры. Создаёт Postman collections. Пишет guides для потребителей API.
Реализует versioning через URL, header или content-type. Проектирует deprecation policy с Sunset headers. Поддерживает несколько версий одновременно. Пишет migration guides для клиентов.
Автоматизирует API-тесты через тестовые инструменты. Создаёт test fixtures для API. Использует Postman/Newman для automated collections. Тестирует edge cases и error handling. Генерирует отчёты.
Разрабатывает gRPC-сервисы на Python с grpcio/grpcio-tools: проектирует .proto-файлы, реализует server-side и client-side streaming, настраивает interceptors для логирования и аутентификации. Интегрирует gRPC с asyncio для неблокирующей обработки запросов.
Реализует rate limiting в Python-сервисах: настраивает SlowAPI/FastAPI limiter с Redis backend, реализует token bucket и sliding window алгоритмы, применяет разные лимиты для разных endpoint'ов и user tier'ов. Настраивает throttling в Django REST Framework с custom throttle classes.
Облако и инфраструктура · 5
Оптимизирует Dockerfile (multi-stage, layer caching). Настраивает health checks. Использует Docker networks и volumes. Отлаживает контейнеры. Сканирует на уязвимости.
Проектирует сетевую архитектуру для Python-сервисов: VPC, subnets, security groups, NAT gateways. Настраивает reverse proxy (nginx) для Gunicorn/Uvicorn. Понимает service discovery, DNS-based routing. Оптимизирует latency между сервисами.
Настраивает VPC, Security Groups, ALB. Использует ECS/EKS для контейнеров. Работает с SQS/SNS для messaging. Настраивает CloudWatch для мониторинга. Использует Terraform для IaC.
Настраивает Deployments, Services, Ingress. Конфигурирует HPA для автоскейлинга. Настраивает readiness и liveness probes. Использует namespaces. Отлаживает проблемы подов.
Пишет Terraform-модули для Python-инфраструктуры: ECS/EKS для Django/FastAPI, RDS PostgreSQL, ElastiCache Redis, SQS/SNS. Управляет environments через workspaces. Настраивает remote state в S3 с locking через DynamoDB.
DevOps и CI/CD · 1
Проектирует multi-stage pipelines. Настраивает кэширование зависимостей. Использует matrix builds. Создаёт reusable workflows. Настраивает secrets management.
Тестирование и QA · 2
Использует TestContainers для PostgreSQL, Redis, Kafka. Тестирует межсервисное взаимодействие. Настраивает fixtures для сложных сценариев. Создаёт seed data.
Использует моки (unittest.mock, pytest-mock). Настраивает coverage отчёты. Тестирует async-код. Параметризует тесты через @pytest.mark.parametrize. Использует factory_boy для генерации данных.
Безопасность · 3
Применяет input validation на всех уровнях. Использует secrets management (environment variables, Vault). Реализует rate limiting. Обрабатывает ошибки без утечки информации. Шифрует sensitive data at rest.
Реализует OAuth2 flows (Authorization Code, Client Credentials). Настраивает OIDC с Keycloak. Реализует refresh token rotation. Настраивает scopes и permissions.
Применяет защиту от CSRF, SSRF, XXE. Настраивает security headers. Проверяет зависимости на уязвимости (pip-audit, safety). Обрабатывает sensitive data (masking, encryption).
Архитектура и проектирование · 2
Проектирует простые системы: URL shortener, REST API. Понимает CAP theorem. Знает паттерны: caching, load balancing, database replication. Оценивает нефункциональные требования.
Реализует CQRS в Python-проектах: разделяет command и query handlers через mediatr-подобные библиотеки, проектирует отдельные read-модели (денормализованные view таблицы или материализованные представления). Обеспечивает eventual consistency между write и read сторонами.
Observability и мониторинг · 3
Настраивает structured logging с correlation IDs. Логирует в JSON для EFK/Loki. Добавляет request tracing через middleware. Фильтрует sensitive data из логов. Настраивает log aggregation.
Создаёт custom metrics с prometheus-client. Пишет PromQL запросы (rate, histogram_quantile). Создаёт Grafana dashboards. Настраивает basic alerting rules.
Определяет SLI для Python-сервисов — p99 задержку из инструментации middleware, частоту ошибок из обработчиков исключений и индикаторы здоровья пула workers. Настраивает мониторинг SLI с Prometheus client и кастомными метриками. Понимает error budgets и участвует в ротации дежурств для надёжности Python-сервисов.
Контроль версий и коллаборация · 2
Проводит code review. Даёт конструктивный feedback. Проверяет логику, тесты, security. Знает разницу между blocking и non-blocking замечаниями. Использует suggestions.
Использует rebase для чистой истории. Применяет interactive rebase для squash. Использует cherry-pick и bisect. Настраивает git hooks (pre-commit). Работает с git stash.
Дополнительные навыки
Команда их не оценивает, но они входят в самооценку и план развития.
Что меняется на Senior
74 навыков получают более высокое ожидание или становятся ключевыми при переходе с Middle на Senior. Сначала самые большие скачки.
- Декомпозиция на микросервисы: Осведомлённость → Применение · становится ключевым
- DDD тактические паттерны: Осведомлённость → Применение · становится ключевым
- Алгоритмы и сложность: Применение → Продвинутый
- Асинхронное программирование: Применение → Продвинутый
- Документирование API: Применение → Продвинутый
- Индексирование БД: Применение → Продвинутый
- Интеграционное тестирование: Применение → Продвинутый
- Качество кода и рефакторинг: Применение → Продвинутый
- Миграции БД: Применение → Продвинутый
- Многопоточное программирование: Применение → Продвинутый
} в открытой матрице компетенций: 75 навыков на 5 уровнях. Матрица бесплатна для специалистов и останется бесплатной.