Articles

Weekend hack: Kotlin Symbol Processing Maven plugin

KSP only works with Gradle, leaving Maven users out in the cold. I built ksp-maven-plugin to fix that - minimal setup, auto-discovers processors, integrates …

The cookie story: when build failures became sweet accountability

A deceptively simple rule transforms a chaotic development team: break the build, buy cookies. What starts as lighthearted motivation evolves into a …

LLM evaluation testing with promptfoo: a practical guide

This article shows how to implement automated testing for LLM applications using promptfoo with a real application server, addressing the challenge that …

Contract-first vs. code-first development: why API contracts matter from day one

Discover why starting with API contracts first—not code—leads to clearer, more maintainable microservices. Learn the differences between contract-first and …

From monoliths to AI proxies: real-world strategy for testing and evolving LLM integrations

Integrating Large Language Models (LLMs) into production systems presents unique architectural, testing, and operational challenges. This article shares …

Kotlin extensions for LangChain4j

Discover Kotlin extensions for LangChain4j designed to transform the synchronous LangChain4j API into a modern, non-blocking experience with Kotlin Coroutines. …

Keeping your software healthy: the critical role of dependency updates

Discover best practices for effective dependency management in software development and learn strategies to keep your projects secure, efficient, and free of …

Spring Boot starters

This post discusses Spring Boot Starters and their importance to developers, who want to make the setup and configuration of Spring Boot applications a whole …

Code review best practices

Code review is a crucial practice in software development. One can design and write great software, but we are humans after all. And all humans make mistakes, …

Running Testcontainers on dynamic ports

Running integration tests locally with Docker can be challenging when fixed ports are unavailable due to conflicts. This issue is compounded in shared CI …