Performance
Most performance problems are not algorithmic, they are operational: cold caches, pool exhaustion, replication lag, GC pauses, query plan regressions. These posts cover the diagnoses and the fixes that actually moved the p99.
The Postgres Index That Never Gets Used
Postgres indexes accumulate. Every perf push adds one. Almost no team removes any. How to find the unused ones and why their write cost is the bigger problem.
Read more BackendThe Long Transaction That Ate Your Postgres
An idle transaction pins the xmin horizon. Autovacuum cannot reclaim anything newer than it. Tables bloat. Queries slow. Here is the fix every install needs.
Read more BackendYour Async Code Is Still Single-Threaded
Async lets one thread do more I/O. It does not let one thread do more CPU. Most async-related performance disappointments come from confusing those two.
Read more BackendThe Cache-Control Header You're Probably Ignoring
Most developers set max-age and call it done. The directives that matter for CDN behavior, revalidation, and stale content are all sitting there unused.
Read more BackendWhy Your Service Slows Down at 9am Every Day
Your service slows every morning for the same five reasons: JVM warmup, cold caches, pool growth, clustered crons, deployment timing. Here's how to fix each.
Read more BackendThe Composite Index Nobody Can Read
Your composite index covers every column but EXPLAIN still shows a full scan. Column order, not column presence, determines whether PostgreSQL uses the index.
Read more BackendThe Hibernate Query You Didn't Write
Hibernate writes SQL you never see. Three repository lines execute a 2,100-character query that is usually worse than anything you would have written by hand.
Read more BackendEXPLAIN ANALYZE Lies to You
PostgreSQL's EXPLAIN ANALYZE tells you the plan looks fast. It doesn't tell you the timing is cached, the estimates are stale, or the cost isn't milliseconds.
Read more BackendDatabase Partitioning: The Decision You Can't Undo
Range vs hash partitioning, hot spots, and the re-partitioning trap. Partitioning looks like a scaling win until you find out you cannot undo the choice.
Read more BackendConnection Pool Tuning: A Practical Guide
HikariCP's defaults look sensible until your app hits production load. Here's how to actually size your connection pool using Little's Law, not guesswork.
Read more BackendCaching Is Easy Until It Isn't
Redis, in-memory, CDN: caching feels simple until invalidation ruins your week. Here's how each caching layer bites you and what I learned the hard way.
Read more BackendConnection Pools: The Thing You Never Think About Until Production Burns
Connection pools sit quietly until they break. Here is what happens when they fail, the warning signs to watch, and how to catch it before production burns.
Read more BackendDatabase Indexes Explained for People Who Keep Forgetting
You've read about database indexes before. You've forgotten most of it. Here's the practical guide you'll actually remember, with PostgreSQL examples.
Read more ToolsDebugging iOS Memory Issues from Your AI Chat Interface
I built an MCP server that lets Claude inspect iOS simulators from the chat window. Crash analysis, memory risk scoring, log streaming, and leak detection.
Read more BackendHikariCP in Production: Tuning, Monitoring, and pgbouncer
Tune HikariCP for production Spring Boot 4 services on Postgres. Little's Law sizing, the properties that matter, monitoring signals, pgbouncer fronting.
Read more DatabaseDatabase Indexes Explained: A PostgreSQL Walkthrough With EXPLAIN ANALYZE
B-tree, composite, partial indexes proved with EXPLAIN ANALYZE on 500k Postgres rows. Plus the three ways EXPLAIN ANALYZE lies to you. Tests in the repo.
Read more DatabaseThe N+1 Problem: All Four Fetch Strategies Explained
A hands-on walkthrough of all four Hibernate fetch strategies with real query counts. Each fix is verified by a test that proves the N+1 problem first.
Read more