What Happens When You Type a URL and Press Enter
DNS lookups, TCP and TLS handshakes, HTTP requests, servers, and the browser's rendering pipeline. The whole journey of a web page, explained so it finally clicks.
Read →Most apps don't need Kubernetes to handle more users. They need measurement, indexes, caching and a few architectural habits. A practical, step-by-step path from one server to serious traffic.
"Will it scale?" is a question that sends many developers straight to complex architecture diagrams. In reality, most web apps hit their first limits for boring, fixable reasons: a missing index, an N+1 query, no caching, or too many synchronous calls to a slow API. Scaling well means fixing the right bottleneck at the right time.
Here's the order that works for most apps.
You can't scale what you can't see. Before changing anything:
Optimising without data usually means optimising the wrong thing. (Logging and monitoring.)
The database is the most common bottleneck by far.
These changes often deliver 10× improvements and cost nothing.
A request answered from cache never touches your servers or database. (Caching strategies.)
Emails, image processing, reports and third-party calls belong in background jobs. Requests get faster, and spikes in that work no longer slow down your API. (Background jobs and queues.)
Give the server or database more CPU and memory. It's not glamorous, but it's fast, simple and often enough for a long time. Modern single machines are very powerful. Don't dismiss vertical scaling because it seems unsophisticated.
Run several app instances behind a load balancer. This requires your app to be stateless:
Once stateless, adding capacity is just adding instances. Many platforms do this automatically. (Load balancing with Nginx.)
When the database itself becomes the limit:
Premature scaling costs real time and adds failure modes, while the actual bottleneck often sits untouched.
| Stage | Typical setup |
|---|---|
| Early | One app instance, one managed database, CDN for static files |
| Growing | Indexes, caching, background jobs, bigger instances |
| Busy | Several stateless app instances behind a load balancer, Redis, read replicas |
| Large | Specialised data stores, service extraction where it helps teams, sophisticated observability |
Many successful products live happily in the "Growing" or "Busy" stage for years.
Measure first, then fix slow database queries, add caching, move slow work to background jobs, scale servers up, and make the app stateless so you can run multiple instances.
Vertical scaling gives one machine more resources. Horizontal scaling adds more machines or instances and spreads traffic across them, which requires a stateless application.
Rarely, and late. Indexes, caching, bigger instances, read replicas and specialised stores handle the vast majority of apps; sharding is for very large data or write volumes.
DNS lookups, TCP and TLS handshakes, HTTP requests, servers, and the browser's rendering pipeline. The whole journey of a web page, explained so it finally clicks.
Read →There are dozens of HTTP status codes, but about fifteen cover nearly everything. What each one means, when to return it, and the mix-ups (401 vs 403, 301 vs 302) that confuse everyone.
Read →A, AAAA, CNAME, MX, TXT and NS records in plain English, why DNS changes seem slow, and the troubleshooting commands that tell you what is really going on.
Read →