Notes on software engineering, the JVM, AI, and building products that ship.
A test that depends on Set iteration order often won't fail locally — which is exactly what makes it dangerous.
I asked a senior engineer how they always seem to know which pattern fits a problem they've never seen. The answer reframed everything: it isn't talent, it's an index — and most engineers build the wrong one. How to build the right one.
An afternoon ticket — add a Jackson serializer — turned out to be hiding a security decision nobody had written down. The story of building Ihawu's masking serializer, and the judgement call that kept a breach from shipping.
Tools come and go; the principles don't. Nine ideas every reliable CI/CD system is built on — five for how work flows to production, four for making the automation itself trustworthy.
Before the pipelines and the tooling, one question: why bother? The case for CI/CD, what the letters actually mean, and the counterintuitive truth that shipping more often makes software safer — not riskier.
Every language has an accent — and most Kotlin code is full of Java's. What idiomatic Kotlin really looks like, and why writing it the Java way costs you the gains you switched for.