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.

HTTP Interfaces in Spring Boot 4: Say Goodbye to Boilerplate
· 19 min read

HTTP Interfaces in Spring Boot 4: Say Goodbye to Boilerplate

Learn how HTTP interfaces let you define declarative HTTP clients in Spring Boot, and discover how Spring Framework 7 eliminates the configuration boilerplate with @ImportHttpServices.

Java
· 22 min read

Stop NullPointerExceptions Before Production with Spring Boot 4's Null Safety

Discover how Spring Boot 4 and JSpecify annotations catch NullPointerExceptions at compile-time instead of runtime. Learn to implement @NullMarked and @Nullable for bulletproof Java code with practical examples.

Spring Boot 4's Bean Registrar: A Cleaner Way to Register Beans Programmatically
· 12 min read

Spring Boot 4's Bean Registrar: A Cleaner Way to Register Beans Programmatically

Learn how Spring Boot 4's new BeanRegistrar interface simplifies programmatic bean registration in Spring Framework 7. This tutorial demonstrates dynamic bean creation based on environment properties, conditional registration with complex logic, and performance optimization techniques. Discover when to use BeanRegistrar vs @Bean annotations with practical code examples and testing strategies...

Testing Spring REST APIs with RestTestClient: A Complete Guide
· 22 min read

Testing Spring REST APIs with RestTestClient: A Complete Guide

Explore the new Rest Test Client in Spring Framework 7, a modern replacement for RestTemplate that provides a fluent API for testing REST APIs with improved type safety and better integration with modern testing practices.

Building MCP Clients with Spring AI: Augmenting LLMs with Custom Context
· 14 min read

Building MCP Clients with Spring AI: Augmenting LLMs with Custom Context

Learn how to build MCP (Model Context Protocol) clients using Spring AI to augment Large Language Models with custom context and functionality for your applications.

Evolving your API without Versioning in GraphQL
· 15 min read

Evolving your API without Versioning in GraphQL

Explore modern approaches to API versioning in GraphQL, including schema evolution strategies, deprecation patterns, and best practices for maintaining backward compatibility while evolving your API.

First-Class API Versioning in Spring Boot 4
· 25 min read

First-Class API Versioning in Spring Boot 4

Learn how to implement API versioning strategies in Spring Boot 4 applications, including best practices for managing backwards compatibility and evolution of your REST APIs.

My CYC 2025 Demo: Why Building MCP Servers in Java Just Got Ridiculously Simple
· 21 min read

My CYC 2025 Demo: Why Building MCP Servers in Java Just Got Ridiculously Simple

Learn how Spring AI 1.1.0-M2 makes building MCP servers in Java incredibly simple with just annotations. No callbacks, no complex setup. Includes complete code from my Commit Your Code 2025 conference demo, showing how to expose your Java application's data to Claude and other AI assistants.

Spring Boot 3.x Features: Complete Guide to Major Updates (2022-2025)
· 52 min read

Spring Boot 3.x Features: Complete Guide to Major Updates (2022-2025)

Explore the transformative features introduced in Spring Boot 3.0 through 3.5, from Java 17 requirements and GraalVM native images to virtual threads and enhanced observability. This comprehensive guide covers each release's major improvements, including Docker Compose integration, Testcontainers support, structured logging, and SSL certificate management. Learn how Spring Boot 3.x...

JDK 24's Major Improvement: Virtual Threads Without Pinning
· 18 min read

JDK 24's Major Improvement: Virtual Threads Without Pinning

Discover JDK 24's breakthrough enhancement that eliminates virtual thread pinning with synchronized blocks and methods. This comprehensive guide explores how this change revolutionizes Java concurrency, dramatically improving scalability for Spring Boot applications with legacy synchronized code. You'll learn about the technical details of thread pinning, see practical performance comparisons, and...