Refactoring a decade-old SpringBoot monolith with AI tooling — what took a month the traditional way took 20 days, touching 200+ files and 10,000+ lines of code.
Writing
The growing divide between traditional software engineering and AI-product teams — and how companies navigate investing in both.
How organizations become overly optimistic about AI tools, overlooking failures and misjudging actual performance improvements.
How a JVM configuration default caused significant memory waste in Docker/Kubernetes environments — and how we fixed it.
The practical distinction between mocking and spying in unit testing, with examples using mockk for Kotlin.
Step-by-step: publishing Android Archives to Maven Central using Nexus and GPG.
How SuperShare's backend evolved from serverless Firebase through semi-serverless to containerized Docker Swarm.
A deep comparison of Kotlin's Collections and Sequences — when each excels based on memory, laziness, and operation patterns.
Reified type parameters and crossinline/noinline — solving Java's type erasure through inlining.
Why Kotlin requires explicit inline declarations for lambdas — compiler internals and JVM compatibility.