# Architecture system-level design issues causing performance problems. ## Approach - understand holistically → components, data flow, communication - identify bottlenecks → serial vs parallel, tight coupling, unnecessary indirection - challenge assumptions → latency, throughput, reliability often misunderstood - redesign interfaces → batch, reduce round-trips, parallelize independent work ## Patterns - **serial → batched** → processes one at a time; batch for latency/throughput - **tight coupling → loosening** → extract independent components to run parallel - **sync → async** → offload blocking to background workers - **monolithic → modular** → split for independent optimization + scaling ## Example client/server API serial (one request at a time) because latency/throughput not understood. fix: batch requests → amortize latency, increase throughput. ## Pitfalls - over-architecting → don't redesign whole system for small gain - operational complexity → deployment, monitoring, debugging overhead - premature scale → optimize algorithm + implementation first - local metrics ≠ end-to-end latency → what users experience