Go 1.23 Iterators: The Hand-Rolled Boilerplate I Stopped Writing
Go 1.23's range-over-func and the iter package killed a pile of iterator boilerplate I'd been writing for years. Here's what actually changed for me.
Go 1.23's range-over-func and the iter package killed a pile of iterator boilerplate I'd been writing for years. Here's what actually changed for me.
After two years of running Diesel and sqlx in Rust production services, here is how I actually pick between them in 2026, and what each…
I picked axum for a Rust service and spent a weekend on basics nobody documents. Here's the axum + sqlx production setup I actually ship,…
Go generics turned four. Here's where I actually reach for type parameters in real Go code, the constraints I lean on, and the patterns I…
gRPC vs REST in 2026, decided by who calls your service and how often. Real Go and proto code, where each one wins, and the…
The API design defaults I argue for at project kickoff: noun-based URLs, honest HTTP status codes, RFC 9457 error shapes, real pagination, and versioning.
Five Laravel queue habits I changed after years of failed jobs, with the maxExceptions, Horizon, and idempotency configs I now reach for on every new…
Six Docker habits I dropped from production in 2026, the ones I kept, and the small changes that cut image size, build time, and CVE…
My one-line rule for SQLite vs Postgres, the four PRAGMAs that made SQLite production-ready for me, and the cases where I still pick Postgres without…
How I split thiserror and anyhow inside Axum handlers, then let IntoResponse map domain errors to real status codes without leaking internals to callers.