What is a Modern Software System Actually Made Of?
In the previous lessons, we explored what System Design is and internalized a 12-step mental framework to approach any system. Now, we confront the structural reality of modern platforms:
“When we look behind the curtain of Netflix, Uber, Amazon, or Stripe, what discrete physical and logical components are actually running?”
A student project or local prototype runs on a single laptop with one server script and a local SQLite file. But when millions of users interact across continents, a single machine collapses under CPU thrashing, memory limits, and disk I/O bottlenecks.
To survive at scale, systems are deconstructed into specialized, modular building blocks.
Today, we will dissect the twelve core building blocks of modern computing, uncover the precise crisis each was invented to solve, and interconnect them into an authoritative planetary blueprint.
The End-to-End Anatomy of a User Request
Consider a routine action: a customer types an address into their mobile browser and taps enter:
The product catalog renders in 65 milliseconds. But that request did not travel directly to a database server. It traversed a highly orchestrated distributed highway:
Let us examine each component in isolation: its operational definition, internal mechanics, and architectural value.
1, 2 & 3: Client, Server, and API
The Client is any software running directly on an end-user device. It encompasses web browsers (Chrome, Safari), native mobile applications (iOS Swift, Android Kotlin), desktop apps, or IoT appliances. The client's core duties are rendering graphical interfaces, collecting user inputs, validating form fields locally, and dispatching structured network payloads over HTTPS or WebSockets.
A Server is not alien hardware; it is simply a networked compute environment (physical machine, virtual machine, or container) configured to listen for and process incoming requests. When a client requests product 42, the server authenticates the caller, evaluates business authorization, queries data stores, executes computations, and serializes the response.
An API (Application Programming Interface) is the standardized protocol defining how external clients interact with server capabilities. By formalizing endpoints (e.g., GET /products/42, POST /orders), headers, and JSON schemas, the API creates strict architectural decoupling. A React web frontend, native iPhone app, and third-party logistics partner can all interface cleanly with the same backend.
4 & 5: Database and Cache
Data that must survive process crashes, power failures, and server migrations (orders, financial ledgers, user accounts) resides in the database.
When 10,000 users query the same viral trending product simultaneously, hitting disk storage 10,000 times will exhaust database IOPS. Redis / Memcached retains hot data directly in volatile RAM.
6, 7 & 8: Load Balancer, Object Storage, and CDN
When user traffic exceeds what a single server can process, we deploy multiple identical application instances. The Load Balancer (NGINX, HAProxy, AWS ALB) intercepts incoming connections and distributes requests across healthy backend nodes using algorithms like Round Robin or Least Connections. It constantly runs health checks; if Server 2 dies, traffic is diverted away in milliseconds.
Never store user-uploaded avatars, 4K video clips, or PDF invoices as binary BLOBs inside a relational database. Doing so causes massive database bloat, slows query scans, and turns database backups into nightmares. Cloud Object Stores are purpose-built to store billions of files cost-effectively with 99.999999999% (11 nines) durability.
If your application server is in Virginia, users in Singapore or Berlin face 250ms of speed-of-light network latency on every image fetch. A CDN (Cloudflare, CloudFront, Fastly) caches static media across hundreds of worldwide Points of Presence (POPs), serving European customers from Frankfurt and Asian customers from Singapore in < 10ms.
9 & 10: Message Queue and Background Worker
The golden key to responsive distributed systems is never making human users wait for work that can happen in the background:
[ User Checkout ] ──> [ App Server ] ──> (Save Order in DB)
│
├─(Push Job)─> [ Message Queue: Kafka / RabbitMQ ]
│ │
(< 75ms Fast Response!) ├─> [ Worker 1: Email Dispatcher ]
│ ├─> [ Worker 2: SMS Gateway Push ]
▼ └─> [ Worker 3: PDF Invoice Renderer ]
[ Order Placed ✓ ]
11, 12 & 13: Search Engines, Identity, and Observability
Running SELECT * WHERE title LIKE '%running shoes%' across 10 million rows forces an un-indexed full-table scan that locks database tables. Dedicated search engines use Inverted Indexes to deliver typo tolerance, synonym matching, facet filtering, and relevancy ranking in single-digit milliseconds.
Manages cryptographic credentials, validates JWT signatures or session cookies, and enforces Role-Based Access Control (RBAC). It guarantees that customer A cannot inspect customer B's delivery telemetry.
Without telemetry, engineers fly blind during outages. Prometheus, Grafana, and Datadog ingest structured logs, measure P95/P99 latency, and track error spikes across every component in the topology.
Assembling the Master Distributed Architecture
Now, observe how these individual building blocks seamlessly interconnect into a modern, production-grade cloud topology:
[ Global Users ]
│
▼
[ Web & Mobile Clients ]
│
┌──────────────────────┴──────────────────────┐
▼ ▼
[ Global CDN Edges ] [ DNS & Anycast ]
(Static Images, JS/CSS) │
│ ▼
│ [ Load Balancer ]
│ │
│ ┌──────────────────┼──────────────────┐
│ ▼ ▼ ▼
│ [ App Node 1 ] [ App Node 2 ] [ App Node 3 ]
│ │ │ │
│ └──────────────────┼──────────────────┘
│ │
│ ┌─────────────────────────────┼─────────────────────────────┐
│ ▼ ▼ ▼
│ [ In-Memory Cache ] [ Primary Database ] [ Search Cluster ]
│ (Redis: Hot Catalog) (PostgreSQL Master) (Elasticsearch)
│ │
│ ├─(Replication)─> [ Read Replicas ]
│ │
▼ ▼
[ Cloud Object Storage ] [ Distributed Message Queue ]
(AWS S3: User Avatars, Media) (Apache Kafka / RabbitMQ)
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
[ SMS Worker ] [ Email Worker ] [ Invoice Worker ]
The Architect's Axiom: When Should You Use Each?
The most dangerous architectural sin is cargo-cult engineering: deploying every tool simply because tech giants write blog posts about them.
- A 100-user internal CRUD tool: Needs only a Client, a single App Server, and a PostgreSQL database.
- A 10,000-user boutique e-commerce shop: Add a dedicated Database instance and a Redis caching layer.
- A 1,000,000-user platform: Introduce a Load Balancer, horizontal stateless app auto-scaling, CDN, Object Storage, and asynchronous Message Queues.
1. “What exact problem does this component solve?”
2. “Does my system currently suffer from that exact problem?”
Interactive Workbench: The Building Blocks Lab
Toggle components on and off in our live assembler to observe throughput and latency telemetry, match real-world production crises with their architectural antidote, and trace the 10-step request lifecycle.
Building Blocks Concept Check
Verify your grasp of modern distributed components
1. Why is storing 5MB user profile images directly as BLOBs inside a PostgreSQL database considered a serious architectural flaw?
2. Can an In-Memory Cache (Redis) replace the primary database entirely?
3. Which component is specifically engineered to reduce geographic network latency for static media (images, stylesheets, scripts) across worldwide users?
Scalability — How Systems Scale
We have unlocked our architectural toolkit. Now Part 2 begins! Learn how systems scale under pressure: Vertical Scaling vs. Horizontal Scaling, the secrets of stateless application tiers, and automated elastic auto-scaling groups.