• Where are all the staff+ Android product engineers?

    Over the years I’ve heard (and experienced) both sides of a rather odd coin in the Android developer world. Side 1: Companies, particularly startups and small teams, want staff+ Android product engineers and struggle to find them. Side 2: Staff+ Android engineers struggle to find jobs if they involve product work. Companies/non-Android folks in general…

    Read More

  • Re: Dependency Injection vs. Service Locators

    This is a port of a write-up I did in the Kotlin Lang slack here in response to the question “Dagger vs. Hilt vs. Koin vs. Metro vs. <what comes next>. Serious question: Are there any compelling reasons to switch from Koin to Metro in a Compose Kotlin multiplatform project?” I think it’s largely better…

    Read More

  • Gradle Footguns: Don’t add potentially-empty providers to collection properties

    After pairing with Tony Robalik on a recent weird behavior I was seeing in Gradle, we encountered a deliciously evil bug in Gradle. It’s documented a little in Gradle 8.7’s release notes (see Better API for updating collection properties), but the basic premise is below. abstract class MyTask : DefaultTask() { @get:Input abstract val listProperty: ListProperty<String>…

    Read More

  • One Last View of Mom

    We said goodbye to mom in May after a five year battle with cancer. She left on her own terms, under the care of the wonderful University of Vermont hospice network and Act 39. The day mom passed, my dad and sister asked me to stay with her after she went to sleep. Everyone has…

    Read More

  • Introducing Metro

    Metro is a compile-time dependency injection framework that draws heavy inspiration from Dagger, Anvil, and Kotlin-Inject. It seeks to unify their best features in one, cohesive solution while adding a few new ones and implemented as a compiler plugin. For some time, it’s felt like the Kotlin community has wanted for a library at the…

    Read More

  • Don’t use Type-safe Project Accessors with Kotlin Gradle DSL

    Gradle 7.0 introduced the type-safe project accessors feature for IDE support of referencing projects in dependencies. This allowed you to replace this: dependencies { implementation(project(“:lib1”)) } with this dependencies { implementation(projects.lib1) } This is great! Improved IDE support is always a good thing for developer experience and it’s super convenient to have autocomplete like this.…

    Read More

  • Forklifts Require Training

    A lot gets covered in today’s discourse about AI in software development. Most of it is noise, ranging from nihilism that we’re all writing mediocre code anyway so why does it matter to endless wannabe AI influencers doing engagement bait on Twitter. Every new model release gets a bunch of threadicles 👇 amounting to the…

    Read More

  • Metro’s Design Doc

    Back in December 2024, I was around a month into working on Metro (at the time still called Lattice) and realized it crossed the threshold from “is this anything” to “oh shit this has wheels”. I’d been talking informally with a few folks in the community at the time, but it was ready for a…

    Read More

  • Migrating 25-year-old legacy code to Kotlin

    How can Kotlin help teams build safer financial software, migrate legacy systems, and move faster without increasing risk?In this episode of Kotlin Conversations from KotlinConf 2026, we talk with Yuri Geronimus, Senior Staff Engineer and Chief Architect at Verifone, about using Kotlin in the world of payments and financial technology — where software defects, compliance…

    Read More

  • Building Full-Stack Web Apps Entirely in Kotlin

    In this Kotlin Conversations episode from KotlinConf 2026, Dan Kim shares how he’s building full-stack web apps entirely in Kotlin using Ktor, Compose, and WebAssembly. He talks about KMP, the future of WASM on the web, and whether Android developers can finally become frontend developers without writing JavaScript. The conversation also explores AI tools, vibe…

    Read More