Knows basic sorting and search algorithms. Understands Big-O notation for simple cases (O(1), O(n), O(n²)). Can estimate complexity of a simple loop. Uses built-in sorted() and collections for problem solving.
Roles · Backend Developer (Python) · Junior
What a Junior } should know
37 core skills, 73 in total. Expectations per skill, and what changes at the next level.
This page lists what a Junior } is expected to know and do, skill by skill. Core skills are the ones a manager and peers assess in a review cycle; the rest count only in self-assessment. Main areas: Programming Fundamentals, Backend Development, Database Management.
Core skills for a Junior
Grouped by area. The label on the right is the expected depth: Awareness, Working, Advanced or Expert.
Programming Fundamentals · 8
Understands async programming concept. Writes simple async/await functions. Knows the difference between sync and async code. Uses httpx or aiohttp for async HTTP requests.
Follows PEP 8 standards. Uses linters (flake8/ruff) and formatters (black). Writes docstrings for functions. Understands clean code principles: meaningful names, small functions, DRY.
Knows core Python data structures: list, dict, set, tuple. Understands the difference between mutable and immutable types. Uses list comprehension and dict comprehension. Knows when to use set instead of list for lookups.
Knows basic patterns: Singleton, Factory, Observer. Understands the purpose of Repository and Service Layer. Can recognize patterns in existing code. Applies simple patterns on senior's recommendation.
Understands thread and process concepts. Knows about GIL in CPython and its impact. Uses threading for simple I/O-bound tasks. Understands the difference between threading and multiprocessing.
Understands encapsulation, inheritance, polymorphism in Python. Creates classes with __init__, properties, and methods. Knows SOLID principles at a basic level. Uses property decorators and dunder methods (__str__, __repr__).
Uses basic type hints: str, int, list[str], Optional. Understands why typing is needed in Python. Knows main types from typing module. Runs mypy for type checking.
Backend Development · 5
Creates CRUD endpoints with FastAPI or Django REST Framework. Uses Pydantic for validation. Understands dependency injection. Works with Django ORM/SQLAlchemy for basic queries.
Understands the message broker concept. Writes simple producers and consumers with confluent-kafka-python. Knows what topic, partition, offset are. Understands at-least-once semantics.
Understands why caching is needed. Knows cache-aside pattern. Uses TTL for automatic invalidation. Understands stale data problem.
Uses Redis as simple key-value cache via redis-py. Understands TTL and expiration. Caches API call results. Knows basic commands: GET, SET, DEL, EXISTS.
Understands background task concepts. Creates simple Celery tasks. Uses delay() and apply_async(). Understands the difference between synchronous and asynchronous processing.
Database Management · 5
Writes SQL queries: SELECT, JOIN, WHERE, GROUP BY. Creates tables with proper data types. Uses ORM for CRUD. Understands foreign keys and constraints.
Creates basic schemas with tables and relationships. Understands 1:1, 1:N, N:M relationships. Applies normalization up to 3NF. Uses proper data types.
Understands that indexes speed up SELECT. Knows CREATE INDEX syntax. Adds indexes as recommended. Understands that indexes slow down INSERT.
Creates migrations using migration tools. Understands forward and rollback. Adds columns and tables. Tests migrations locally.
Writes basic SQL (SELECT, JOIN, WHERE, GROUP BY). Understands that queries can be slow. Knows that EXISTS is faster than IN for subqueries.
API & Integration · 4
Creates CRUD endpoints with proper HTTP methods. Uses status codes (200, 201, 400, 404, 500). Understands JSON request/response. Adds query parameters for filtering and pagination.
Adds descriptions to endpoints (docstrings, summary). Understands OpenAPI specification. Uses Swagger UI for testing. Documents request/response models.
Tests APIs via Postman or Insomnia. Creates basic request collections. Uses environment variables. Checks status codes and response body.
Understands why API versioning is needed. Knows URL-based versioning (/api/v1/). Maintains backward compatibility when adding fields. Follows team guidelines.
Cloud & Infrastructure · 4
Writes Dockerfiles for Python applications. Uses docker-compose for local development. Understands image layers and caching. Uses .dockerignore.
Knows core services: EC2, S3, RDS, Lambda. Uses AWS Console. Understands IAM roles and policies. Deploys via CLI.
Understands core resources: Pod, Deployment, Service. Deploys applications via kubectl. Reads pod logs. Understands ConfigMaps and Secrets.
Understands TCP/IP, DNS, HTTP/HTTPS in the context of Python applications. Knows how ports, firewall rules, load balancers work. Diagnoses connection issues via curl, telnet, netstat. Configures CORS in Django/FastAPI.
DevOps & CI/CD · 1
Understands CI/CD pipeline. Creates simple GitHub Actions workflows. Runs tests and linters in CI. Uses actions from marketplace.
Testing & QA · 2
Writes unit tests with pytest. Uses assert statements and fixtures. Tests happy path and edge cases. Understands test isolation. Runs tests locally and in CI.
Understands the difference between unit and integration tests. Tests API endpoints. Uses test database for integration tests.
Security · 3
Understands JWT: header, payload, signature. Uses JWT for authentication. Knows OAuth2 flows at a basic level. Stores tokens securely.
Knows OWASP Top 10. Understands SQL injection and XSS. Uses parameterized queries. Validates input data via Pydantic.
Validates input data. Doesn't store passwords in plain text (bcrypt). Uses HTTPS. Doesn't log sensitive data. Follows security checklist.
Architecture & System Design · 1
Understands client-server architecture. Knows HTTP request lifecycle. Understands basic concepts: latency, throughput, availability. Knows what a load balancer and CDN are.
Observability & Monitoring · 2
Understands metrics concepts (counter, gauge, histogram). Views Grafana dashboards. Knows PromQL basics. Adds basic metrics to the application.
Uses logging module instead of print. Understands log levels (DEBUG, INFO, WARNING, ERROR). Adds context to logs. Uses structlog or python-json-logger.
Version Control & Collaboration · 2
Uses branching (feature branches, main). Makes commits with meaningful messages. Creates pull requests. Resolves simple merge conflicts. Uses .gitignore.
Participates in reviews as a reviewee. Understands reviewer comments. Fixes code based on feedback. Knows basic self-review checklist.
Additional skills
Not assessed by the team, but part of the self-assessment and the development plan.
What changes at Mid-level
69 skills get a higher expectation or become core when moving from Junior to Mid-level. The biggest jumps first.
- Connection Pooling: Awareness → Working · becomes core
- CQRS: Awareness → Working · becomes core
- Database Sharding: Awareness → Working · becomes core
- gRPC & Protocol Buffers: Awareness → Working · becomes core
- Message Broker Patterns: Awareness → Working · becomes core
- Rate Limiting & Throttling: Awareness → Working · becomes core
- SLI / SLO / SLA: Awareness → Working · becomes core
- Terraform: Awareness → Working · becomes core
- Algorithms & Complexity: Awareness → Working
- Apache Kafka: Awareness → Working
} in the open competency matrix: 73 skills across 5 levels. The matrix is free for individuals and stays free.