Check your interview readinessStart Tech Assessment

Backend Roadmap

From HTTP and databases to caching, queues and observability - the backend skill tree, ordered.

11 min readUpdated Jul 2026By the TopCoding team

Backend engineering has a natural learning order - skip steps and you build on sand. This roadmap lays out the skill tree from HTTP basics to distributed systems, marks what to learn first, and shows how the pieces connect so you spend time on the right things at each stage of your career.

11
Skill areas in the ordered backend stack
SQL first
Databases - learn relational before NoSQL, always
2-3 yrs
Typical time to a well-rounded backend skillset with deliberate focus

The ordered skill tree

Most backend learning fails because it is unordered. Developers jump to Kubernetes before they understand HTTP, or to Redis before they can write a proper SQL index. The path below is ordered by dependency: each step assumes you have the one before it. Follow the sequence and you will not have to re-learn things from scratch.

  1. 1

    Internet and HTTP fundamentals

    Step 1
    How the web works: DNS, TCP/IP, HTTP request/response cycle, status codes, headers, cookies, HTTPS and TLS. Everything else sits on top of this.
  2. 2

    A backend language

    Step 2
    Pick one and go deep: Python (Django/FastAPI), Node.js (Express), Java (Spring Boot) or Go. Learn the runtime, the standard library, error handling and concurrency model - not just the framework.
  3. 3

    Relational databases and SQL

    Step 3
    Learn SQL properly before any NoSQL. Understand joins, indexes, transactions and the query planner. PostgreSQL is the best default choice for learning.
  4. 4

    API design - REST first

    Step 4
    Design RESTful APIs with correct HTTP semantics, consistent naming, versioning, and pagination. Once REST is solid, add GraphQL or gRPC as use cases demand.
  5. 5

    Auth, security and data protection

    Step 5
    Authentication (sessions, JWTs, OAuth 2.0), authorisation (RBAC, ABAC), OWASP top-10 (SQL injection, XSS, CSRF), secrets management and HTTPS everywhere.
  6. 6

    Caching and message queues

    Step 6
    Redis for in-process caching and rate limiting. Message queues (RabbitMQ, Kafka, SQS) for async processing, decoupling services and smoothing traffic spikes.
  7. 7

    Testing - unit, integration, contract

    Step 7
    Test-driven habits: unit tests for logic, integration tests for the database layer, contract tests for API consumers. Know how to mock, when to mock, and when not to.
  8. 8

    Observability - logs, metrics, traces

    Step 8
    Structured logging, application metrics (Prometheus/Datadog), distributed tracing (OpenTelemetry), alerting on SLOs. If you can't see it, you can't debug it.
  9. 9

    Containers and deployment

    Step 9
    Docker for packaging, Kubernetes (or a managed equivalent) for orchestration, CI/CD pipelines. Understand the twelve-factor app principles.
  10. 10

    NoSQL and specialised stores

    Step 10
    Learn NoSQL after SQL, not instead of it: document stores (MongoDB), key-value (Redis), time-series, and search (Elasticsearch). Choose by access pattern, not hype.
  11. 11

    Scaling and distributed systems

    Step 11
    Horizontal scaling, load balancing, database replication and sharding, rate limiting, CDN, consistency trade-offs. This is the domain of System Design Fundamentals.

Internet and language foundations

The internet primitives are not optional context - they are the substrate of every backend system. Senior engineers regularly catch bugs that junior engineers can't because they can reason about what actually happens at the TCP or HTTP layer.

Protocol
HTTP/HTTPS
Methods, status codes, headers, caching directives, keep-alive, HTTP/2 multiplexing. Know what each 4xx and 5xx means.
Protocol
DNS and TCP/IP
How a domain resolves, what a TCP handshake costs, why TLS adds round trips, and how CDNs sit in front of your origin.
Language
One language, deep
Memory model, concurrency (threads vs event loop vs goroutines), package ecosystem, and idiomatic error handling. Surface-level knowledge of many languages is worth less than depth in one.
Language choice matters less than depth
Python, Go, Node.js and Java all get you hired at strong companies. The mistake is switching languages every six months. Pick one, build something real with it, and learn it until you understand the runtime internals.

Databases and SQL

The database is usually where performance lives or dies. Most backend engineers have superficial SQL knowledge; going deeper is one of the fastest ways to differentiate yourself.

  • Indexes - understand B-tree structure, when composite indexes help, index-only scans, and what "covering index" means. Run EXPLAIN ANALYZE on your slow queries.
  • Transactions and isolation - read committed vs repeatable read vs serializable; optimistic vs pessimistic locking; deadlocks and how to avoid them.
  • Query optimisation - avoid N+1 queries, use eager loading where appropriate, and understand connection pooling (PgBouncer, HikariCP).
  • Schema design - normalisation (3NF), when to denormalise for read performance, foreign keys and referential integrity, migrations without downtime.
Learn PostgreSQL as your default
PostgreSQL handles 90% of use cases excellently and is one of the most well-documented databases in the world. Once you know it well, picking up MySQL, SQLite or a managed variant is straightforward.

API design and security

An API is a contract. Badly designed contracts are expensive to change and painful to consume. The principles below apply whether you are building REST, GraphQL or gRPC.

ConcernWhat good looks likeCommon mistake
NamingNouns for resources, verbs from HTTP methodsPOST /getUser, POST /createAndSendEmail
Versioning/v1/... or header-based, documented clearlyNo versioning until breaking change forces panic
Error shapeConsistent JSON body: code, message, detailsRaw exception stack traces or bare status codes
PaginationCursor-based for large datasetsOffset pagination breaks with inserts
AuthOAuth 2.0 / OIDC for user auth, API keys for M2MRolling bespoke auth instead of proven standards
IdempotencyPOST endpoints accept an idempotency keyRetried requests duplicate payments or orders

Caching, queues and testing

These three skills - caching data, decoupling work via queues, and verifying behaviour with tests - compound together. Fast systems use all three and understand when each is appropriate.

Caching
Redis essentials
Cache-aside pattern, TTL strategy, cache warming, and the hardest part: cache invalidation when the underlying data changes. Use Redis for sessions, rate limiting and hot-path reads.
Queues
Async with message brokers
Decouple slow work (email, video transcoding, ML inference) from the request path. Know the difference between at-least-once and exactly-once delivery, and design for idempotency.
Testing
Test pyramid
Many fast unit tests, fewer integration tests, few end-to-end tests. Test the behaviour, not the implementation. Mock at the boundary of your system, not inside it.
Testing
Contract and API tests
Consumer-driven contract tests (Pact) catch breaking API changes before they reach production. Integration tests against a real database find query bugs unit tests miss.

Observability and containers

You will spend a significant fraction of your career debugging production systems. Observability is not an ops concern - it is a backend engineering concern. If you do not instrument your service, you are flying blind in production.

  • Structured logging - emit JSON with a consistent schema: request id, user id, duration, outcome. Never log secrets or PII.
  • Metrics - instrument request latency (p50/p95/p99), error rate, and queue depth. Alert on SLOs, not on arbitrary thresholds.
  • Distributed tracing - OpenTelemetry lets you follow a request across services. Invaluable in a microservices architecture.
  • Docker and containers - understand the Dockerfile layer model, multi-stage builds, image size, and how environment variables replace config files.
  • CI/CD - automated test runs on every pull request, automated deployment pipelines. Blue-green and canary deployments reduce the blast radius of releases.

Scaling and architecture

Once you can build a reliable service, you need to understand how to make it handle 10x more load - and what breaks first. This is where backend engineering and system design overlap, and where senior backend engineers differentiate themselves.

  • Stateless services - if state lives in memory, you can't scale horizontally. Push state to the database or cache and keep the application servers interchangeable.
  • Database read replicas - route read-heavy queries to replicas, keep writes on the primary. Understand replication lag and when it matters.
  • Rate limiting and back-pressure - protect downstream systems from being overwhelmed. Implement token-bucket or sliding-window rate limiting at the API gateway or middleware level.
  • Data partitioning - when a single database node becomes the bottleneck, partition (shard) the data. This is hard; design for it early by choosing shard keys carefully.
Turn this roadmap into a learning plan
Reading a skill tree is not the same as closing the gaps. TopCoding coaches help backend engineers identify exactly what's missing for the role they're targeting - book a free call to build a targeted plan. Also see the Data Engineer Roadmap if you work at the data layer.

Sources & further reading

  1. 1Backend Developer Roadmaproadmap.sh
  2. 2Designing Data-Intensive ApplicationsMartin Kleppmann - O'Reilly
  3. 3The Twelve-Factor AppHeroku
  4. 4MDN: An overview of HTTPMozilla Developer Network