Performance & Optimization
Performance is a feature: fast software improves user experience, conversion, and cost — and slow software quietly undermines all three. But optimization done wrong wastes enormous effort on code that doesn't matter. The discipline that separates effective performance work from flailing is measurement: profile to find the real bottleneck, fix the thing that actually dominates, and verify the gain. Intuition about what's slow is famously unreliable; data is not.
This hub ties together the measurement tools (profiling, benchmarking) and the high-leverage fixes (caching, database optimization, scalability) — with the consistent message that you measure first, then optimize the bottleneck, not your guess.
TL;DR
- Measure first — profile/benchmark; the bottleneck is rarely where you'd guess.
- Fix the biggest hot spot — most cost lives in a few places (the 80/20).
- The usual high-leverage fixes: caching, database tuning, algorithms, async.
- Validate every change by measuring again — and guard against regressions in CI.
The Optimization Method
Every effective performance effort follows the same loop:
💡 The biggest wins usually come from a better algorithm or data structure or a fixed database access pattern — not micro-optimizing constants.
Featured Topics
Measurement & Diagnosis
- Profiling & Diagnostics — Measure where time and memory actually go
- Benchmarking — Compare implementations rigorously
- Tail Latency & Percentiles — Why averages lie and the p99 is what users feel
Capacity & Headroom
- Capacity Planning — Finding the knee, the USE method, and forecasting
Caching Strategies
- Caching — Avoid repeated work; the highest-leverage fix
- Caching Layers — Where caching lives across the stack
Database Optimization
- Query Optimization — Faster queries, fixing N+1
- Database Indexing — Indexes that make queries scale
Load Testing & Benchmarking
- Performance Testing — Load, stress, and spike testing
- Scalability Patterns — Performance under growth
Front-End Performance
- Web Performance — Fast pages and Core Web Vitals
- Compression — Trading CPU for bytes: gzip, Brotli, and Zstandard
Common Questions
Where do I start optimizing performance?
By measuring, never guessing. Profile the system under a realistic workload to find which code actually dominates the time (and memory) — the bottleneck is almost always somewhere other than where intuition points. Then optimize that specific hot spot, and profile again to confirm the change helped. The most common and costly mistake is optimizing code based on a hunch while the real problem (an unindexed query, an N+1 loop, an O(n²) algorithm) keeps dragging. Measure → optimize the hot spot → measure again is the whole method.
What are the highest-leverage performance fixes?
In rough order of impact for typical applications: fix the database (missing indexes, slow queries, N+1 patterns), since data access usually dominates; add caching to avoid repeating expensive work; improve algorithms and data structures (an O(n²) → O(n) change beats any micro-optimization — see Big-O); and parallelize or move slow work async off the request path. Micro-optimizing constants is the lowest-leverage option and the last resort. Profile to confirm which of these your specific bottleneck calls for.
How do I know if my optimization actually worked?
Measure before and after under the same realistic conditions, and compare honestly — using benchmarks with proper warmup and statistics, or production metrics (p95/p99 latency, throughput). Don't trust the change "feeling" faster; subtle regressions and noise routinely fool intuition. Report distributions, not just averages, and ideally track key benchmarks/metrics in CI so a future change that regresses performance gets caught automatically. Confirming the gain with data is as important as making the change.
Should I worry about performance from the start, or optimize later?
Avoid both extremes. Premature micro-optimization wastes effort and complicates code before you know what matters — so don't optimize blindly upfront. But "performance later" isn't a license to make architecturally bad choices (an O(n²) algorithm on growing data, an N+1 query pattern) that are expensive to undo. The balance: choose sound algorithms, data structures, and data-access patterns from the start (cheap to get right early), but defer fine-grained tuning until profiling shows it's needed. Design for performance at the architectural level; optimize details with measurement.
Related Hubs
- Architecture — System-level performance design
- Databases — Query and storage optimization
- Observability — Measuring production performance
- SEO Engineering — Performance for search/Core Web Vitals