In Kotlin Multiplatform, a high percentage of shared code is not a success metric by itself. Moving every similar Android and iOS implementation into commonMain can introduce interfaces, expect/actual declarations, and extra layers that make the project harder to change. Before sharing code, the important questions are whether the business rule is genuinely the same, whether it can be tested independently of the platform, and whether the abstraction is actually simpler than two small platform implementations. Domain logic, networking, and data transformations are often strong candidates for sharing. Permissions, navigation, lifecycle behavior, and UI details can be clearer and easier to maintain when they stay platform-specific. The goal of KMP is not to maximize shared code; it is to reduce real duplication without making platform-specific changes more difficult.
Journal
How to Review AI-Generated Code Without Slowing Down
A practical workflow for reviewing AI-generated code: smaller diffs, explicit assumptions,...
MVC, MVP, MVVM, and MVI: They Didn’t Replace Each Other. They Evolved...
Compare MVC, MVP, MVVM, and MVI by the problems they solve, the costs they add, and the UI...
Let Your AI Agent Debug the Browser Instead of Guessing: Chrome DevToo...
Give your AI agent controlled Chrome access to inspect console errors, network requests, r...
Use AI to Become a Better Software Developer, Not Just a Faster One
Use a Think, Challenge, Build, Verify, Reflect loop to strengthen engineering judgment wit...
Small Pull Requests Are a Technical Strategy, Not a Team Preference
Learn how small pull requests improve review, feedback, rollback safety, and architecture—...
Your Portfolio Should Explain Decisions, Not Display Screenshots
Build a developer portfolio that proves engineering judgment through constraints, trade-of...
Offline-First Kotlin Multiplatform with Room, Ktor, and Shared ViewMod...
Build an offline-first Android and iOS task feature with Room, Ktor, queued sync, a shared...
MCP Went Stateless: What Changes for Agent Tooling
What MCP 2026's stateless core, explicit state handles, MRTR, caching, Tasks, and OAuth ch...
Claude Code Meets Android CLI: Build, Run, and Test
Use Claude Code with Android CLI to create, build, run, inspect, and test a Jetpack Compos...
Claude Code is not a Chatbot… It is an Execution Engine
Many people use Claude Code as a chatbot… they write a prompt, wait for the reply, modify...
Jetpack Compose Animation
Jetpack Compose simplifies animation by integrating it directly into the component lifecyc...
Test Driven Development
An overview of TDD, its philosophy and core principles. How it reverses the traditional de...
How to create custom annotations in Kotlin
Annotations in Kotlin can significantly enhance the readability, structure, and maintainab...
Effective UI/UX Design in Android Apps (3/3)
Explore the importance of user interface and user experience design in Android app develop...
Effective UI/UX Design in Android Apps (2/3)
Explore the importance of user interface and user experience design in Android app develop...
Effective UI/UX Design in Android Apps (1/3)
Explore the importance of user interface and user experience design in Android app develop...
Kotlin's Interoperability with Java (3/3)
Explore how Kotlin works seamlessly with Java. For Java developers looking to transition t...
Kotlin's Interoperability with Java (2/3)
Explore how Kotlin works seamlessly with Java. For Java developers looking to transition t...
Kotlin's Interoperability with Java (1/3)
Explore how Kotlin works seamlessly with Java. For Java developers looking to transition t...
Security in Android App Development (3/3)
Various security challenges in Android development and how to mitigate them.
Security in Android App Development (2/3)
Various security challenges in Android development and how to mitigate them.
Security in Android App Development (1/3)
Various security challenges in Android development and how to mitigate them.
Introduction to Kotlin Functional Programming (3/3)
Continue with the third and final part of our talk about Functional programming in Kotlin
Introduction to Kotlin Functional Programming (2/3)
Continue with the second part of our talk about Functional programming in Kotlin
Introduction to Kotlin Functional Programming (1/3)
Functional programming in Kotlin is all about treating functions as first-class citizens a...
OkHttp Interceptors
Interceptors in Retrofit's OkHttp Client. When and How to use them.
Kotlin Delegated Properties
What are delegated properties? What are their benefits? How do we use them?
Android Memory Leaks
What is memory leak? What causes it? How to avoid it?
Kotlin Coroutines (3/3)
Our final article in our series. More Coroutines components.
Kotlin Coroutines (2/3)
Continue our Coroutines talk. Let's discuss Coroutines Context.