Quick Takeaways
What you'll learn in this article
- 1
Android: Kotlin is the default. Java is legacy maintenance only.
- 2
Backend (new services): Kotlin is growing (28%) but Java still dominates (52%). Go, TypeScript, and Python claim the remaining 20%.
- 3
Backend (existing systems): Java dominance is overwhelming (72%). Migration is slow because working Java code doesn't benefit enough from Kotlin conversion to justify the cost.
- 4
Kotlin Multiplatform: Emerging at 12% adoption for new cross-platform projects. Still experimental for production workloads.
- 5
Cold start: Java is slightly faster because Kotlin adds compilation overhead from its standard library. On AWS Lambda, this difference matters for serverless workloads.
Keep reading for detailed implementation, code examples, and real-world results
The Migration Nobody Expected to Take This Long
When Google announced Kotlin as the preferred language for Android development at Google I/O 2019, the industry assumed Java's decline on mobile was a fait accompli. Seven years later, the reality is more nuanced than anyone predicted.
New Android Projects in Kotlin
95%
Of new Android apps started in Kotlin in 2025
On mobile, Kotlin has won decisively. 95% of new Android projects start in Kotlin, and Google's own documentation is Kotlin-first. But the enterprise backend — where Java processes trillions of dollars in transactions daily — tells a different story. Java remains the backbone of financial services, healthcare, logistics, and e-commerce, and the migration to Kotlin on the server side is proceeding at a pace that frustrates Kotlin advocates and reassures Java loyalists.
For CTOs making language decisions in 2026, the question isn't "Kotlin or Java?" — it's "Kotlin for what, Java for what, and where does the investment make sense?"
The 2026 Landscape
| domain | kotlin | java |
|---|---|---|
| New Android apps | 95 | 5 |
| Existing Android codebases | 68 | 32 |
| New backend services | 28 | 52 |
| Existing backend systems | 8 | 72 |
| Kotlin Multiplatform | 12 | 0 |
The data reveals a split market:
- Android: Kotlin is the default. Java is legacy maintenance only.
- Backend (new services): Kotlin is growing (28%) but Java still dominates (52%). Go, TypeScript, and Python claim the remaining 20%.
- Backend (existing systems): Java dominance is overwhelming (72%). Migration is slow because working Java code doesn't benefit enough from Kotlin conversion to justify the cost.
- Kotlin Multiplatform: Emerging at 12% adoption for new cross-platform projects. Still experimental for production workloads.
Head-to-Head Comparison
Language Features
Kotlin Advantages vs Java Advantages
Kotlin Advantages
Java Advantages
Kotlin's language advantages were revolutionary when they launched. Null safety alone eliminated an entire category of runtime crashes. Coroutines made async code readable. Data classes reduced boilerplate by 80%.
But Java hasn't stood still. Java 21's virtual threads (Project Loom) are a direct response to Kotlin coroutines — and in some benchmarks, they outperform coroutines for high-throughput server workloads. Records address the boilerplate problem that data classes solved. Pattern matching with sealed classes brings some of Kotlin's expressiveness to Java.
The gap between Kotlin and Java has narrowed significantly since 2019. Kotlin is still more concise, but Java is no longer the verbose, ceremony-heavy language it was when Kotlin first gained traction.
Performance
| benchmark | kotlin | java |
|---|---|---|
| Cold start (Spring) | 3200 | 2800 |
| Cold start (serverless) | 1800 | 1200 |
| Throughput (HTTP) | 92 | 95 |
| Memory (idle) | 180 | 150 |
| Coroutines vs Loom | 88 | 94 |
Performance is effectively a tie for most workloads. Kotlin compiles to JVM bytecode, so runtime performance is nearly identical. The differences:
- Cold start: Java is slightly faster because Kotlin adds compilation overhead from its standard library. On AWS Lambda, this difference matters for serverless workloads.
- Throughput: Within 3% for equivalent code. Not a meaningful differentiator.
- Memory: Kotlin's coroutine machinery adds modest overhead compared to Java's virtual threads.
- GraalVM native compilation: Both languages support native compilation, but Java's support is more mature. Kotlin native compilation via GraalVM has edge cases that require workarounds.
For most applications, performance should not be a factor in the Kotlin vs Java decision. The differences are measurable but not meaningful at the application level.
Hiring Market
| year | kotlinDevs | javaDevs |
|---|---|---|
| 2022 | 1.2 | 9.5 |
| 2023 | 1.8 | 9.2 |
| 2024 | 2.5 | 8.8 |
| 2025 | 3.2 | 8.3 |
The hiring market tells a clear story: Java developers outnumber Kotlin developers roughly 3:1. This ratio is improving but won't reach parity for years. For organizations that need to hire quickly at scale, Java's larger talent pool is a genuine advantage.
However, the salary premium for Kotlin developers (roughly 15% above equivalent Java roles) means that Kotlin positions attract more motivated, self-selecting candidates. Kotlin developers typically have more recent training, stronger opinions about code quality, and higher engagement with the language community.
The CTO calculus: Java offers easier hiring at lower cost. Kotlin offers higher-quality candidates at higher cost and with smaller pools. For a startup hiring 5 engineers, Kotlin's smaller pool is a problem. For an enterprise hiring 50, both pools are sufficient.
Migration Cost
New Code in Kotlin
Write all new files in Kotlin. Java and Kotlin coexist in the same project. Minimal risk.
Automated Conversion
Use IntelliJ auto-converter for mechanical translation. Review and fix idiom issues.
Idiomatic Rewrite
Refactor converted code to use Kotlin idioms (coroutines, sealed classes, extension functions).
Java Removal
Remove remaining Java files. Update build configuration. Pure Kotlin codebase.
Migration from Java to Kotlin is unique among language migrations because the two languages interoperate perfectly on the JVM. You can call Java from Kotlin and Kotlin from Java with no FFI, no bridges, and no serialization. This means migration can be incremental — one file at a time, with zero big-bang risk.
Cost estimates for migration:
- Small project (50K lines): 2-4 weeks, 1 developer. Mostly automated conversion + idiom cleanup.
- Medium project (250K lines): 2-3 months, 2-3 developers. Incremental conversion with review.
- Large enterprise (1M+ lines): 6-12 months, dedicated team. Phase 1 only (new code in Kotlin) may be the permanent strategy.
| size | weeks | risk |
|---|---|---|
| Small (50K LOC) | 3 | 10 |
| Medium (250K LOC) | 12 | 25 |
| Large (1M+ LOC) | 40 | 45 |
The Kotlin Multiplatform Gamble
The most interesting development in the Kotlin ecosystem isn't the language itself — it's Kotlin Multiplatform (KMP). KMP allows teams to share business logic across Android, iOS, desktop, and web from a single Kotlin codebase while maintaining native UI on each platform.
KMP Strengths vs KMP Risks
KMP Strengths
KMP Risks
Netflix, Cash App (Square), and Philips are running KMP in production, which provides meaningful validation. But the technology is still in its "early majority" phase — proven enough for risk-tolerant organizations, not yet proven enough for conservative enterprises.
For CTOs evaluating cross-platform strategies, KMP competes with Flutter (Dart) and React Native (TypeScript). The choice depends on existing team skills:
- Java/Kotlin team: KMP is the natural path
- Web team: React Native leverages existing TypeScript skills
- No existing preference: Flutter offers the most complete cross-platform solution
The Decision Framework
| Name | Value |
|---|---|
| Choose Kotlin | 45 |
| Choose Java | 30 |
| Mixed (both) | 25 |
Choose Kotlin When:
- Building new Android apps — there's no reason to start a new Android project in Java in 2026
- Starting a new backend service with a team that knows Kotlin — the conciseness and safety features accelerate development
- Evaluating cross-platform mobile — KMP is the strongest option for teams with JVM experience
- Modernizing gradually — Kotlin's Java interop allows incremental adoption with zero risk
- Team cares about code quality — null safety and immutability by default prevent entire categories of bugs
Choose Java When:
- Maintaining large existing systems — the cost of migration exceeds the benefit for stable, working code
- Hiring at scale in constrained markets — Java's 3x larger talent pool reduces hiring risk
- Performance-critical serverless — Java's slightly faster cold starts matter at scale on Lambda
- Regulatory environments — some industries (defense, certain financial services) have approved toolchains that may not include Kotlin
- Team prefers explicit over concise — Java's verbosity is a feature for teams that value readability over brevity
Choose Both When:
- Migrating incrementally — new code in Kotlin, existing code stays Java, they coexist perfectly
- Android + backend — Kotlin for mobile, Java for backend services is a common and effective split
- Large organization — different teams may have different preferences and that's fine; the JVM unifies them
The Honest Take
Kotlin is a better language than Java by most objective measures. It's more concise, safer (null safety alone is worth the switch), and more expressive. If you were designing a JVM language from scratch today, you'd design something that looks a lot like Kotlin.
But "better language" doesn't always mean "better choice." Java's ecosystem, talent pool, and stability represent decades of investment. The JVM ensures that both languages will coexist productively for years. And Java's recent evolution (records, sealed classes, virtual threads, pattern matching) has closed many of the gaps that originally motivated Kotlin's creation.
The CTO's job isn't to pick the "best" language. It's to pick the language that maximizes team productivity given their skills, hiring market, existing codebase, and business constraints. Sometimes that's Kotlin. Sometimes that's Java. Often it's both. The JVM's greatest achievement isn't any single language — it's the platform that lets this decision be incremental rather than binary.
Further Reading
- Programming Language Trends in 2025-2026 — where Kotlin and Java fit in the broader landscape
- Role of Rust in System Design — when neither JVM language is the right choice
- Vibe Coding and AI-Native Development — how AI tools affect language choice
- AWS Lambda Features — serverless performance considerations

