Select your current position
Pick a role and level — we'll show the growth path, skills and gap analysis.
Development path
Junior
0-2 years
Responsibility: Building simple API endpoints from specifications. Writing unit tests. Fixing bugs. Working with ORM (SQLAlchemy/Django ORM). Participating in code review as a reviewee.
Key skills:
Middle
2-5 years
Responsibility: Independent microservice development. Designing REST/GraphQL APIs. SQL query optimization. Code review. Junior mentoring. External service integration. Writing integration tests.
Key skills:
Senior
5-8 years
Responsibility: Designing service architecture. Technology selection for new tasks. System-level performance optimization. Managing technical debt. Setting up observability. Mentoring mid-level engineers.
Key skills:
Lead / Staff
7-12 years
Responsibility: Designing domain system architecture. Team technical roadmap. Establishing development standards. Cross-team coordination. Hiring. Build vs buy decisions.
Key skills:
Principal
10+ years
Responsibility: Company-level backend technology strategy. Cross-team architecture. Organization-level technology choices. Public speaking. Open-source contributions.
Key skills:
Gap analysis: skills to develop
To reach the next level you'll need to develop:
Configures consumer groups and partition assignment. Handles errors with retry and dead letter topics. Uses acks=all for reliability. Monitors consumer lag. Designs event schemas with Avro/JSON Schema.
Conducts code reviews. Gives constructive feedback. Checks logic, tests, security. Knows the difference between blocking and non-blocking comments. Uses suggestions.
Optimizes Dockerfile (multi-stage, layer caching). Configures health checks. Uses Docker networks and volumes. Debugs containers. Scans for vulnerabilities.
Uses rebase for clean history. Applies interactive rebase for squash. Uses cherry-pick and bisect. Configures git hooks (pre-commit). Works with git stash.
Designs multi-stage pipelines. Configures dependency caching. Uses matrix builds. Creates reusable workflows. Configures secrets management.
Implements OAuth2 flows (Authorization Code, Client Credentials). Configures OIDC with Keycloak. Implements refresh token rotation. Configures scopes and permissions.
Applies protection against CSRF, SSRF, XXE. Configures security headers. Checks dependencies for vulnerabilities (pip-audit, safety). Handles sensitive data (masking, encryption).
Uses CTEs, window functions, JSONB operations. Configures connection pooling (PgBouncer). Optimizes via EXPLAIN ANALYZE. Works with transactions and isolation levels. Configures pg_stat_statements.
Designs FastAPI/Django project structure. Uses middleware, background tasks, WebSockets. Configures authentication/authorization. Works with Alembic/Django migrations. Optimizes ORM queries (select_related, prefetch_related).
Uses various Redis structures (hashes, sets, sorted sets, lists). Applies pipeline for batch operations. Configures cache-aside and write-through patterns. Uses Redis pub/sub for notifications. Handles cache miss correctly.
Designs RESTful API with versioning and cursor-based pagination. Documents via OpenAPI/Swagger. Implements error responses with error codes. Uses PATCH for partial updates. Designs bulk endpoints.
Configures Celery with different brokers (Redis, RabbitMQ). Uses chains, groups, chords for workflows. Configures retry with exponential backoff. Monitors tasks via Flower. Handles errors and dead letter queues.
Uses mocks (unittest.mock, pytest-mock). Configures coverage reports. Tests async code. Parameterizes tests via @pytest.mark.parametrize. Uses factory_boy for data generation.
Works with asyncio: Tasks, gather, wait, semaphore. Uses aiohttp, httpx for async HTTP. Understands event loop and its limitations. Applies asyncio.Queue for producer-consumer pattern. Handles cancellation and timeouts.
Creates B-tree, UNIQUE, COMPOSITE indexes. Uses EXPLAIN for query plans. Knows when an index helps and when it hurts. Creates indexes for foreign keys.
Uses TestContainers for PostgreSQL, Redis, Kafka. Tests inter-service interactions. Configures fixtures for complex scenarios. Creates seed data.
Configures pre-commit hooks with ruff, mypy, black. Refactors code smells. Writes type hints for all code. Applies quality metrics (cyclomatic complexity, coverage). Participates constructively in code review.
Writes zero-downtime migrations. Uses expand-contract pattern. Migrates data with backfill. Configures automatic migration execution in CI/CD. Handles migration conflicts.
Analyzes via EXPLAIN. Eliminates N+1 (eager loading, select_related). Optimizes JOINs. Uses window functions (ROW_NUMBER, LAG/LEAD). Understands subquery types.
Designs network architecture for Python services: VPC, subnets, security groups, NAT gateways. Configures reverse proxy (nginx) for Gunicorn/Uvicorn. Understands service discovery, DNS-based routing. Optimizes inter-service latency.
Applies Strategy, Template Method, Decorator, Command in Python code. Uses Repository pattern for database access. Applies Unit of Work with SQLAlchemy sessions. Knows antipatterns and can refactor them.
Applies input validation at all levels. Uses secrets management (environment variables, Vault). Implements rate limiting. Handles errors without information leakage. Encrypts sensitive data at rest.
Applies SOLID in daily development. Uses abstract classes (ABC) and Protocol for interface definition. Understands composition over inheritance. Applies dependency injection via constructor. Uses mixins correctly.
Designs schemas for microservices. Applies denormalization for performance. Models polymorphic relationships (STI, MTI). Designs audit trails and soft deletes. Uses JSONB for flexible data.
Applies various strategies: cache-aside, write-through, write-behind. Implements event-based cache invalidation. Uses CDN caching for static content. Monitors cache hit rate. Handles cache stampede (thundering herd).
Configures structured logging with correlation IDs. Logs in JSON for EFK/Loki. Adds request tracing via middleware. Filters sensitive data from logs. Configures log aggregation.
Career transitions
Possible career trajectories for the Backend Developer (Python) role
📈 Growth 2
Where you can grow from this role
╨а╨╛╤Б╤В ╨▓ ╨░╤А╤Е╨╕╤В╨╡╨║╤В╨╛╤А╨░ ╤З╨╡╤А╨╡╨╖ ╨│╨╗╤Г╨▒╨╛╨║╨╛╨╡ ╨╖╨╜╨░╨╜╨╕╨╡ backend
↔️ Lateral 4
Adjacent roles for a lateral move
╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨╜╨░ Go ╨┤╨╗╤П ╨▒╨╛╨╗╨╡╨╡ ╨▓╤Л╤Б╨╛╨║╨╛╨┐╤А╨╛╨╕╨╖╨▓╨╛╨┤╨╕╤В╨╡╨╗╤М╨╜╤Л╤Е ╤Б╨╕╤Б╤В╨╡╨╝
╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ Data Engineering ╤Б ╤Д╨╛╨║╤Г╤Б╨╛╨╝ ╨╜╨░ Python-╤Н╨║╨╛╤Б╨╕╤Б╤В╨╡╨╝╤Г
╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ DevOps ╤Б Python-╤Б╨║╤А╨╕╨┐╤В╨╕╨╜╨│╨╛╨╝ ╨╕ automation
╨Я╨╡╤А╨╡╤Е╨╛╨┤ ╨▓ ML Engineering ╤Б ╤Д╨╛╨║╤Г╤Б╨╛╨╝ ╨╜╨░ Python ╨╕ ML-╤Д╤А╨╡╨╣╨╝╨▓╨╛╤А╨║╨╕