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 →Microservices solve organisational and scaling problems, and introduce plenty of new ones. Why a well-structured monolith is usually the right start, and the signals that it's time to split.
Microservices became the default "serious" architecture in a lot of conference talks and job descriptions. Then many teams discovered that splitting a small app into a dozen services made everything slower to build and harder to debug. Both architectures have their place. The trick is knowing which problems each one actually solves.
A monolith is one application, deployed as one unit, usually with one database. All features live in the same codebase and call each other directly.
Strengths:
Weaknesses (at larger scale):
Microservices split the system into small, independently deployable services, each owning its own data and communicating over the network (HTTP, gRPC or messages).
Strengths:
Costs, which are easy to underestimate:
The biggest benefit of microservices is organisational: letting many teams work and deploy independently. If you have one team, or a handful of developers, you pay all the costs without getting that benefit.
Start with a monolith, but organise it into clear modules with boundaries:
src/
modules/
billing/ # owns its tables, exposes a small interface
catalog/
orders/
users/
shared/
You get the simplicity of one deployable app with most of the structure of separate services. If you ever need to extract a service, a well-bounded module is easy to pull out. (Structuring projects for growth.)
Even then, extract one service at a time, starting with the clearest boundary, and keep the rest as a monolith. Background workers that process queues are often the easiest first extraction. (Background jobs.)
Usually not. Start with a well-structured modular monolith, which is simpler to build and run, and extract services later when there's a clear organisational or scaling reason.
A single deployable application organised into well-defined modules with clear boundaries and owned data, combining monolithic simplicity with much of the structure of microservices.
No. Many successful, large-scale products run on monoliths. The architecture should match team size, product maturity and real scaling needs, not trends.
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 →