Recent Post

Your Feature Flag Bill Is a Cache Key Problem

A client exceeded their feature flag vendor’s monthly request quota by 100%.

The two fixes everyone proposed were delete the dead flags and stop calling flags inside loops. Both are sensible. Both save exactly zero requests.

Read more

The N+1 With No Query In It: JPA Fetch Types From First Principles

An export endpoint died at thirty seconds. Not degraded, died: the platform router gave up, the browser reported a CORS failure that had nothing whatsoever to do with CORS, and the UI showed a toast saying something went wrong.

I had three hypotheses inside twenty minutes of reading code. All three were wrong.

Read more

The Production Outage — Where the Fix Was Worse Than the Bug

One missing property line.

Two production outages.

The hot fix between them made the second one inevitable.

Read more

Threads, @Async, @Transactional, and Virtual Threads: What Actually Happens Inside a Spring Boot Backend

A webhook fires. One HTTP request comes in.

Ten seconds later, half the app is returning 503s.

The bug is not in the webhook.

Read more

A Customer Couldn’t Upload an Invoice. The Fix Re-Taught Me XSD, JAXB, and Maven.

A Polish customer reports their invoice won’t upload.

The file looks valid. Other Polish customers upload fine.

Three days later I’ve read more of the Polish Tax Code than I’d like to admit.

Read more

What Jackson Doesn’t Deserialize for Free: The Empty Array That Took Down a Production Endpoint

A 503. Every 30 seconds, on the dot.

Sentry was empty. The application logs said the request was fine.

Then we looked at what Jackson was actually parsing.

Read more