Practical writing on Java, Spring, AI, and the craft of software engineering.
If you're building with Java and Spring (or trying to figure out where AI fits into your development workflow) you're in the right place. I write practical, beginner-friendly deep dives on Spring Boot, Spring AI, and software engineering fundamentals, collected here in chronological order.

Spring AI Deep Research Agent
AI Agent Search

Getting Started with Error Handling in the RestClient
Learn best practices for error handling with Spring's RestClient, including global exception handlers, custom exceptions, Problem Detail responses, and built-in retry with resilience methods in Spring Framework 7.

Giving Your Spring AI Agents a Real Browser with the Browserbase Spring Boot Starter
Most AI agents can search the web. But what happens when they need to actually use it? I built a Spring Boot Starter for Browserbase that gives your agents a real, headless browser in three lines of configuration, plus a deep research agent to show it off.

JEP 500: Prepare to Make Final Mean Final in JDK 26
JDK 26 introduces JEP 500, which warns developers when final fields are mutated through reflection. Here's what this means for your Java code and how to prepare for the future.

Building a Spring Initializr Terminal UI with Java
How I built a terminal user interface for the Spring Initializr using Tambu UI, a new Java TUI framework, and GraalVM native images to streamline my development workflow.

Spring AI Prompt Caching: Stop Wasting Money on Repeated Tokens
Spring AI prompt caching cuts your Anthropic Claude API costs. Use AnthropicCacheStrategy to cache system prompts and tools that don't change between requests.
I Tried OpenAI's New Codex Agent. Here are my First Impressions (It's Really Good)
OpenAI released Codex, a new GUI for their coding agent. I put it to the test by building a vending machine CLI application in Java 25 with Maven, JUnit 6, and JSpecify null safety annotations.

The Ralph Loop: Automate AI Coding Tasks in Java
The Ralph Loop is a bash script that runs your AI coding agent with a fresh context every iteration. Here's how it works and how I used it to build a Java CLI.

OpenTelemetry with Spring Boot 4: The New Starter
Learn how to use the new spring-boot-starter-opentelemetry in Spring Boot 4 to add observability with traces, metrics, and logs—no Actuator required.