Talk at KotlinLeeds2026
I've spent the past few years migrating Java to Kotlin in a decade-old Android codebase. Modern converters (IDE features, AI agents) can produce logically equivalent Kotlin code in seconds. So why does my team still spend hours on each file?
Because converting and Kotlinizing are not the same thing. A converter turns syntax into Kotlin. It does not decide whether an abstract class should survive the migration or be replaced with composition. It does not ask whether your validator should keep returning resource-backed error strings, or expose a sealed ValidationError for the UI layer. It just gives you Kotlin that compiles—and nothing more.I've shipped code like that and watched it haunt code reviews for months.The compiler was happy. Nothing else was.
This talk walks through what I learned. I'll walk through two real refactors from production: a small enum-based validator that hides an Android dependency, and an abstract class whose Java-era seams resist a clean Kotlin rewrite. For each, I'll show the conversion the tool produced, the version we shipped first, and the version we wish we'd shipped. You won't leave with a checklist. You'll leave able to make these decisions yourself, on your own code, the same way I now do on mine. Conversion is fast now. The judgment behind it is what compounds: across teammates, across migrations, across whatever ends up writing our code next.