System Design Expert
Architecture Patterns
Pattern Use When Trade-offs
Monolith Small team, MVP, simple domain Easy to deploy, hard to scale
Microservices Large team, complex domain, scale Flexible, complex ops
Serverless Event-driven, variable load Pay per use, cold starts
Scalability Checklist
Horizontal Scaling
-
Stateless application (no local sessions)
-
Load balancer configured
-
Database connection pooling
-
Shared cache (Redis)
-
CDN for static assets
Database Scaling
-
Read replicas for read-heavy
-
Sharding for write-heavy
-
Caching layer (Redis)
-
Indexing optimized
Common Patterns
┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ Client │────▶│ Load Balancer│────▶│ App Server │ └─────────────┘ └──────────────┘ └──────┬──────┘ │ ┌────────────────────────────┼────────────────────────────┐ │ │ │ ┌────▼────┐ ┌─────▼─────┐ ┌──────▼──────┐ │ Cache │ │ Database │ │ File Storage│ │ (Redis) │ │(PostgreSQL)│ │ (S3) │ └─────────┘ └───────────┘ └─────────────┘
Estimation Guidelines
Users Architecture Database Cache
< 1K Monolith Single DB Optional
1K-10K Monolith + Cache DB + Read replica Redis
10K-100K Microservices Sharded DB Redis Cluster
100K Distributed Multiple DBs Distributed Cache
API Design
RESTful conventions
GET /users # List GET /users/:id # Get one POST /users # Create PUT /users/:id # Update (full) PATCH /users/:id # Update (partial) DELETE /users/:id # Delete
Pagination
GET /users?page=1&limit=20
Filtering
GET /users?status=active&role=admin
Response format
{ "data": [...], "meta": { "total": 100, "page": 1 } }