Your OrderService saves to Postgres and publishes to Kafka — two systems, no shared transaction. There is no safe order to do them in. The outbox pattern makes the write atomic and lets the broker catch up. Here's how, with the relay tradeoffs and the guarantees you actually get.
A slow request crosses five microservices and you have five log streams that don't talk to each other. This is how OpenTelemetry traces turn 'somewhere it's slow' into 'the inventory service's DB call took 1.74s on this exact request' — including context propagation, sampling, and the gotchas that split your trace in two.
Model Context Protocol turns your internal services into something an agent can call without bespoke glue. What MCP actually is, what it costs to expose one well, and the patterns that hold up when the caller is an LLM instead of a UI.
Treating LLM calls as just another upstream dependency. How to use Spring AI to build a multi-provider gateway with retries, circuit breakers, prompt versioning, and observability — the same hygiene you'd put around any external API.
Stop the thirty-PR CVE fire drill. How to centralize dependency versions across a microservice fleet using a Maven BOM or Gradle version catalog.
How to migrate a Spring Boot microservice fleet from Java 8 to Java 17 without downtime — the four layers, the order, the land mines, and the metric.