システム設計は根本的にトレードオフに関するものです。すべてを同時に最適化することはできないため、優れた設計には、トレードオフを理解し、特定の要件と優先順位に基づいて意識的な選択をすることが含まれます。トレードオフについて適切に推論することがシステム設計の本質です。
完璧な設計は存在しない
Every design decision involves TRADE-OFFS → improving one thing often costs another:
→ you CAN'T maximize consistency, availability, performance, cost, simplicity all at once
→ "it depends" → the right choice depends on the specific REQUIREMENTS and priorities
→ system design = making informed trade-offs, NOT finding a universal "best" design.
一般的なトレードオフ
CONSISTENCY ↔ AVAILABILITY (CAP) → strong consistency vs high availability
LATENCY ↔ CONSISTENCY → caching/replication (fast but possibly stale) vs always-current
PERFORMANCE ↔ COST → more resources/caching cost money
SIMPLICITY ↔ SCALABILITY/flexibility → monolith (simple) vs microservices (scalable, complex)
READ ↔ WRITE optimization → denormalization (fast reads, harder writes) vs normalized
SPACE ↔ TIME → precompute/cache (more storage, less compute) vs compute on demand
→ understanding these lets you choose deliberately.
