Learning paths

Every topic, organized for search and for study.

A curriculum-style index of backend engineering, with each cluster broken into clear keywords, individual lessons, and internal links that make the site easier to explore and easier to rank.

Backend engineeringSystem designCloud and platformDatabase systemsObservability

Node.js · Go runtime · Python async · JVM performance

Language runtimes and execution mechanics

Start here to understand why code can behave differently when many people use it at once.

Jump to lessons

Phase 1

Node.js event loop

See how Node.js keeps handling work without waiting for every slow task to finish.

event loopmicrotasksmacrotaskslibuv
Open lesson

Phase 1

Asynchronous and non-blocking I/O

How Node.js starts slow work, such as reading a file, and keeps doing other things while it waits.

async I/Olibuvnon-blocking I/O
Open lesson

Phase 1

Concurrency primitives in Node.js

When one Node.js process is enough, and when it helps to give heavy work its own worker.

ClusterWorker ThreadsCPU-bound
Open lesson

Phase 1

Streams and buffer management

How to move large amounts of data in small pieces without using too much memory.

streamsbackpressurebuffer management
Open lesson

Phase 1

Memory management and garbage collection

How Node.js cleans up unused memory, and how to spot when something is being kept by mistake.

V8garbage collectionmemory leaks
Open lesson

Phase 1

The Go scheduler

How Go shares many small jobs across the computer's available workers.

goroutinesschedulerGMP model
Open lesson

Phase 1

Channels and CSP concurrency

How Go jobs can safely pass messages to one another and avoid stepping on each other.

channelsCSPselectrace conditions
Open lesson

Phase 1

Memory allocation and pointers in Go

Learn where Go keeps values in memory, and why some values need to live longer than others.

escape analysisstackheappointers
Open lesson

Phase 1

Python async IO and the GIL

How Python handles many waiting tasks, and what its main lock means for threaded work.

asyncioGILWSGIASGI
Open lesson

Phase 1

Threading models in Java and Kotlin

A simple comparison of the older and newer ways Java and Kotlin can run many tasks at once.

virtual threadsJava 21Project Loom
Open lesson

HTTP · REST · GraphQL · gRPC · WebSockets

Protocols, APIs, and networking

Learn how apps talk to servers, how APIs are shaped, and how you keep that traffic safe.

Jump to lessons

Phase 2

OSI, TCP/IP, and TLS

Follow a request from the internet connection to a private, secure conversation with a server.

TCPTLS 1.3OSI model
Open lesson

Phase 2

HTTP 1.1, HTTP 2, and HTTP 3

See how each newer HTTP version helps websites load and respond more smoothly.

HTTP/2HTTP/3QUICkeep-alive
Open lesson

Phase 2

REST and OpenAPI

Learn to make APIs that are predictable, clear to use, and safe to call more than once.

RESTOpenAPIidempotency
Open lesson

Phase 2

GraphQL

Ask an API for exactly the data you need, while avoiding slow or overly expensive requests.

GraphQLresolversN+1
Open lesson

Phase 2

gRPC and Protocol Buffers

A faster way for services to talk to each other using a clear shared format.

gRPCprotobufstreaming
Open lesson

Phase 2

Real-time communication

Choose the right way to send live updates, such as chat messages or delivery status.

WebSocketsSSElong polling
Open lesson

Phase 2

Reverse and forward proxies

Understand the helpful middle layer that receives traffic before it reaches your app.

reverse proxyforward proxyEnvoy
Open lesson

Phase 2

API gateways

Use one front door to route requests, check access, and keep backend services simpler.

API gatewayroutingauthentication offloading
Open lesson

Phase 2

Authentication and security standards

Learn the basics of signing people in, giving them the right access, and protecting common weak spots.

JWTOAuthOIDCCORSCSRF
Open lesson

Phase 2

Rate limiting and throttling

Keep a busy API fair and stable by deciding how many requests each person can make.

rate limitingthrottlingtoken bucket
Open lesson

PostgreSQL · Redis · caching · replication

Data storage, persistence, and caching

Use this section to learn where data lives and how to keep it quick, correct, and available.

Jump to lessons

Phase 3

ACID guarantees

The four promises a database makes when you save important information.

ACIDtransactionsdurability
Open lesson

Phase 3

Transaction isolation levels

What can go wrong when many people read and change the same data at the same time.

isolation levelsphantom readsSerializable
Open lesson

Phase 3

Indexing mechanics

How databases find rows quickly, and how to check whether a query is doing too much work.

B-treeGINGiSTEXPLAIN ANALYZE
Open lesson

Phase 3

Connection management

How to share database connections safely instead of opening a new one for every request.

connection poolpgBouncerdatabase connections
Open lesson

Phase 3

MongoDB document stores

How MongoDB stores flexible documents and helps you search or group them.

MongoDBBSONaggregation
Open lesson

Phase 3

Redis in-memory data structures

The useful ways Redis can hold data when you need answers very quickly.

Redissorted setsHyperLogLog
Open lesson

Phase 3

Wide-column and time-series stores

How databases built for huge amounts of data organise writes and find the right slice later.

CassandraTimescaleDBLSM tree
Open lesson

Phase 3

Cache placement patterns

Where a cache can live, from inside your app to servers close to your users.

cacheCDNRedis cache
Open lesson

Phase 3

Caching design patterns

The common ways an app can read from and write to a cache.

cache-asidewrite-throughwrite-back
Open lesson

Phase 3

Cache eviction and invalidation

How caches decide what to forget, and how to avoid a rush of requests when data disappears.

LRULFUTTLcache stampede
Open lesson

system design · scalability · queues · consensus

Backend scaling and system architecture

This is where you learn how separate parts of a system share work and stay in sync.

Jump to lessons

Phase 4

Vertical versus horizontal scaling

Decide whether to buy a bigger machine or add more machines to handle more people.

horizontal scalingvertical scalingstateless
Open lesson

Phase 4

Stateless and stateful systems

Learn what happens when an app remembers a user, and why that can make scaling harder.

statefulstatelesssessions
Open lesson

Phase 4

Load balancing techniques

How a traffic director spreads incoming requests across several app servers.

load balancerL4L7consistent hashing
Open lesson

Phase 4

Database scaling and partitioning

Ways to split database work across machines when one database is no longer enough.

replicationshardingpartition key
Open lesson

Phase 4

Consistent hashing

A way to spread data across machines without having to move everything when one machine changes.

consistent hashingvirtual nodes
Open lesson

Phase 4

Message queues versus event streams

The difference between handing a job to one worker and keeping a record that many workers can read.

RabbitMQKafkaKinesis
Open lesson

Phase 4

Event patterns

Simple patterns for letting parts of a system react when something important happens.

event sourcingCQRSPub/Sub
Open lesson

Phase 4

Delivery semantics

What it means when a message might arrive once, twice, or not at all—and how to handle it safely.

at-least-onceexactly-onceidempotency
Open lesson

Phase 4

Fault tolerance

How to stop one broken service from making the whole product feel broken.

circuit breakerbulkheadfallback
Open lesson

Phase 4

Retries and backoff

How to try again after a temporary problem without making the problem worse.

retriesbackoffjitter
Open lesson

Phase 4

Dead letter queues

Where to put messages that keep failing so they do not block everything else.

DLQpoison pillretry pipeline
Open lesson

Phase 4

Distributed consensus

Why separate machines sometimes disagree, and how systems choose a safe answer.

CAP theoremPACELCRaftPaxos
Open lesson

AWS · Kubernetes · observability · DevOps

Cloud infrastructure, DevOps, and observability

Connect the app you write to the cloud services that run it for real people.

Jump to lessons

Phase 5

Virtualization versus containers

The difference between a full virtual computer and a lightweight container for your app.

containersvirtualizationDocker
Open lesson

Phase 5

Kubernetes and orchestration

How Kubernetes helps run, replace, connect, and grow many copies of an app.

KubernetesEKSHPA
Open lesson

Phase 5

Serverless execution

Run small pieces of code without managing servers, and understand the tradeoffs.

serverlessLambdaCloudflare Workers
Open lesson

Phase 5

Object storage

Store files such as images and reports safely, then let people upload or download them directly.

S3object storagepresigned URL
Open lesson

Phase 5

CDN acceleration

Serve content from a location near each user so your site feels faster.

CDNCloudFrontedge cache
Open lesson

Phase 5

VPC architecture

Create a private network in the cloud and decide which parts can reach the internet.

VPCsubnetsroute tables
Open lesson

Phase 5

Network gateways

See the routes cloud services use to reach the internet, private services, or another network.

NAT gatewayinternet gatewaypeering
Open lesson

Phase 5

Firewalls and access rules

Set clear rules for who can talk to each part of your cloud setup.

security groupsNACLsfirewalls
Open lesson

Phase 5

Metrics and golden signals

Track a few useful numbers so you can tell whether your system is healthy.

metricsPrometheusGrafanagolden signals
Open lesson

Phase 5

Structured logging and distributed tracing

Follow one request through several services using logs and traces that connect the dots.

loggingtracingOpenTelemetryJaeger
Open lesson

Built for growth

A searchable index today, lesson pages tomorrow.

SEO-friendly titles

Every cluster uses precise, searchable language.

Clear hierarchy

Topics are grouped by phase and learning intent.

Internal links

Each page can point back to the larger map.