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 Security Lambda DSL vs Chaining Configuration
Spring Security's Lambda DSL vs the older chaining style with and(). Configure a SecurityFilterChain both ways in Spring Boot and see which reads cleaner.

Notion API File URLs Expire: Fixing 403 Errors on Images
Notion API file URLs carry an expiry_time and expire after 1 hour, so your images start returning 403 Forbidden. Here's how I fixed it in a Nuxt 3 static site.
Learn Spring & Spring Boot: A Free Crash Course for Beginners
New to Spring? This free crash course shows you where to start, whether to learn Spring or Spring Boot first, and how to build your first Spring Boot app.

Building Command Line Applications in Spring with Spring Shell
In this introduction to Spring Shell, you will learn you how to build CLI applications in a familiar programming environment using Java + Spring.

Building Native Images in Java with GraalVM
Learn how to handle GraalVM Native Image reflection errors in Java by using the tracing agent to generate reachability metadata and fix ClassNotFoundException.
GraphQL Scalars - How to use Custom Scalars in Java
Learn how to use GraphQL custom scalars in Java. We build a Spring Boot 3 app with Spring for GraphQL and register the BigDecimal and LocalDateTime scalars.

Easily Implement UUIDs as Primary Keys in Spring Boot 3
In this tutorial you will learn how to use one of the new features in Jakarta EE 10 in a Spring Boot 3 application.

Happy New Year 2023
Happy New Year! I want to take a few minutes and talk about a few of my priorities as we head into the new year.

2022 Reflections
In this article I am going to spend some time reflecting because I believe it's a good reminder of the good and the bad as I began to set some goals for next year.