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 }
}