Recent Post

Your Message Broker Has a Schema: Freezing RabbitMQ Topology in a Build-Time Manifest

Every backend engineer knows you don’t change a column type by editing the entity and shipping. You write a migration, it gets reviewed as a migration, and Flyway refuses to let history rewrite itself.

Then the same engineer changes an exchange from topic to direct in a @Bean method, and nothing anywhere blinks.

Read more

The Deploy That Took Down Prod and Staging at Once: a RabbitMQ 406 War Story

11:09, a routine deploy goes out.

11:14, every web and worker dyno on production is crash-looping. So is staging.

The database is fine. Memory is fine. The app simply refuses to boot.

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