Skip to content
JM
.
Home
Work
Blog
About
Résumé
Writing
Notes on Node, Kafka, Postgres, and the parts that turned out harder than they looked.
RSS feed
2026.09.02
Why your Kafka consumer lags
Consumer lag is usually not a throughput problem. How to read the number, the five causes that actually produce it, and how to tell healthy lag from a consumer that is falling behind.
kafka
nodejs
performance
7 min read
2026.08.14
The Postgres indexes you're not using
Partial, covering, expression, and BRIN indexes solve problems a plain B-tree can't — and pg_stat_user_indexes tells you which of your existing indexes are dead weight.
postgres
performance
sql
6 min read
2026.07.30
GraphQL N+1, actually solved
DataLoader is the answer to GraphQL's N+1 problem — but only if you scope it per request, keep the batch contract, and know the one case it can't handle.
graphql
nodejs
performance
5 min read
2026.07.11
Strapi in production: what the docs don't tell you
Schema as code, media that survives a redeploy, queries that don't populate the world, and keeping slow work out of lifecycle hooks — running Strapi for real products.
strapi
nodejs
devops
5 min read