Make Invalid Domain States Hard to Represent with Kotlin and ArrowDomain-Driven Design gives us a useful question to ask when modelling a domain: What does it mean for this object to be valid? It is tempting to answer that question with nullable properties and a vAug 24 · 7 min readblog.hbrown.dev
Stop External Services from Breaking Your Build with JUnit TagsFast, dependable tests get run. Slow or fragile tests gradually teach a team to avoid the test suite. A developer makes a small change, remembers that the build sometimes waits for an external API, an1Aug 20 · 11 min readblog.hbrown.dev
PgBouncer with Spring Boot 4: Setup, Gotchas, and the ProofEvery Postgres connection is a process on the server. That's a deliberate design choice — it makes Postgres simple and robust — but it also means connections are expensive to open and there's a hard c1Aug 17 · 6 min readblog.hbrown.dev
I Built a Spring Boot 4 App to Put PgBouncer to the TestThis post describes a small books-and-authors catalogue, but its real job is to be a testbed: it demonstrates what PgBouncer, a lightweight connection pool manager, actually buys you in front of PostgAug 17 · 9 min readblog.hbrown.dev
Guardrails for AI-Generated Kotlin with detekt and ktlintWhen we adopt agentic coding workflows, our job starts to shift from typing every line of code to defining the conditions that generated code must satisfy. An AI coding agent can produce a working imp1Aug 10 · 11 min readblog.hbrown.dev