Payment Flow & Security
Real-time payment processing with biometric authentication, transaction validation, and fraud detection. Kotlin on both Android client and backend services.
Feed & Discovery
Infinite scroll feed rendering with complex RecyclerView optimizations, image caching strategies, and offline-first architecture for millions of pins.
Backend Microservices
Kotlin-based microservices handling content delivery, user preferences, and recommendation engine integration with existing Java infrastructure.
Rider App & Maps
Real-time map rendering with driver locations, complex booking flows, ETA calculations, and deep linking for marketing campaigns.
What Kotlin Developers Actually Build
Before writing your job description, understand where Kotlin fits in your stack. The language serves distinct purposes depending on your needs:
Android Mobile Development
The dominant use case. Google's 2019 announcement made Kotlin the future of Android:
Pinterest uses Kotlin for their entire Android app—feed rendering, pin creation, and search. Their developers handle:
- Complex RecyclerView implementations with thousands of pins
- Image loading optimization and caching strategies
- Offline-first architecture for spotty network conditions
Cash App (Square) built their Android client in Kotlin:
- Real-time payment flows with strict validation
- Biometric authentication integration
- Push notification handling for transaction updates
Uber migrated their Android app to Kotlin:
- Map rendering with real-time driver locations
- Complex booking flows across multiple screens
- Deep linking and universal links
Backend/Server Development
Kotlin on the JVM is gaining traction for server-side applications:
Netflix uses Kotlin for some microservices:
- REST APIs handling millions of requests daily
- Integration with existing Java services
- Coroutine-based concurrent processing
Gradle (the build tool) is written in Kotlin:
- Plugin APIs and DSL configurations
- Build optimization algorithms
- Dependency resolution systems
Square uses Kotlin for backend services powering Cash App:
- Payment processing pipelines
- Account management APIs
- Fraud detection systems
Kotlin Multiplatform (KMP)
The emerging use case—sharing code across platforms:
Netflix experiments with Kotlin Multiplatform:
- Shared business logic between Android and iOS
- Networking code reused across platforms
- Data models synchronized everywhere
Cash App uses Kotlin Multiplatform for:
- Shared networking layer
- Common data validation
- Business logic consistency
Kotlin vs Java: What Actually Changed
Understanding this transition helps you evaluate candidates. Kotlin wasn't designed to replace Java—it was designed to fix Java's pain points while staying compatible.
The Null Safety Revolution
Java's billion-dollar mistake is null pointer exceptions. Kotlin fixes this at compile time:
// Java: This compiles fine but crashes at runtime
String name = null;
int length = name.length(); // NullPointerException!
// Kotlin: This won't compile—you must handle nulls
var name: String = null // Compile error!
var name: String? = null // OK, but you must check before use
val length = name?.length ?: 0 // Safe: returns 0 if null
Why it matters for hiring: Developers who truly understand null safety write more reliable code. Ask how they'd design an API that returns nullable values.
Coroutines vs Callbacks vs RxJava
Kotlin coroutines simplify async programming that was notoriously complex in Java:
// Old Java/RxJava way: Nested callbacks, hard to read
api.fetchUser(userId)
.flatMap(user -> api.fetchOrders(user.getId()))
.subscribe(orders -> display(orders));
// Kotlin coroutines: Reads like synchronous code
suspend fun loadUserOrders(userId: String): List<Order> {
val user = api.fetchUser(userId)
return api.fetchOrders(user.id)
}
Why it matters for hiring: Coroutines are Kotlin's killer feature. Candidates who can explain structured concurrency, coroutine scopes, and cancellation are significantly more advanced.
Data Classes: 90% Less Boilerplate
What takes 50 lines in Java takes 1 in Kotlin:
// Java: Verbose, error-prone
public class User {
private String name;
private int age;
// constructor, getters, setters, equals, hashCode, toString...
}
// Kotlin: Everything generated automatically
data class User(val name: String, val age: Int)
The Modern Kotlin Developer (2024-2026)
Kotlin has matured rapidly. Here's what separates current best practices from legacy code:
Jetpack Compose for Android UI
Compose is to Android what React was to web development—a paradigm shift:
// Traditional: XML layouts + View binding (old way)
// Jetpack Compose: Declarative UI in Kotlin (modern way)
@Composable
fun UserCard(user: User) {
Card {
Text(user.name)
Text("Age: ${user.age}")
}
}
Junior: Only knows XML layouts, never used Compose
Mid: Comfortable with Compose basics, can build standard UIs
Senior: Architects Compose design systems, understands recomposition optimization
Ktor vs Spring Boot for Backend
Two valid choices with different tradeoffs:
| Aspect | Ktor | Spring Boot |
|---|---|---|
| Philosophy | Kotlin-first, lightweight | Java-based, enterprise-ready |
| Async model | Coroutines by default | Requires explicit setup |
| Learning curve | Simpler for Kotlin devs | Steeper, but massive ecosystem |
| Best for | Microservices, new projects | Enterprise, Java migration |
Flow for Reactive Streams
Kotlin Flow replaced RxJava in most modern Kotlin codebases:
Junior: Doesn't know Flow exists, uses callbacks
Mid: Uses Flow for basic data streams
Senior: Designs reactive architectures with Flow, understands cold vs hot flows, handles backpressure
Skills Assessment by Business Need
If You're Building Android Apps
- Priority skills: Jetpack Compose, ViewModel, Room database, lifecycle awareness
- Interview signal: "How do you handle configuration changes without losing data?"
- Red flag: Doesn't know the difference between Activity and Fragment lifecycle
Companies hiring: Pinterest, Uber, Cash App, Instacart, DoorDash
If You're Building Backend Services
- Priority skills: Ktor or Spring Boot, database integration, API design, coroutines
- Interview signal: "How would you handle 10,000 concurrent requests?"
- Red flag: No understanding of structured concurrency or coroutine scopes
Companies hiring: Netflix, Square, Gradle, Atlassian
If You're Migrating from Java
- Priority skills: Java interop annotations, gradual migration strategies, team training
- Interview signal: "How would you introduce Kotlin to a 500K-line Java codebase?"
- Red flag: Wants to rewrite everything at once
Recruiter's Cheat Sheet: Spotting Great Candidates
Conversation Starters That Reveal Skill Level
| Question | Junior Answer | Senior Answer |
|---|---|---|
| "Explain null safety" | "Kotlin prevents null errors" | Explains nullable types, safe calls, elvis operator, when to use !! (and when not to), and how to design APIs with null safety |
| "What are coroutines?" | "Like threads but lighter" | Explains suspension, structured concurrency, coroutine scopes, cancellation propagation, and exception handling |
| "Compose or XML?" | "I use Compose because it's newer" | Explains recomposition, state hoisting, side effects, and when XML might still make sense |
Resume Green Flags
✅ Look for:
- Specific Android apps published to Play Store with user counts
- Backend services handling real traffic (not just personal projects)
- Mentions of coroutines, Flow, or Jetpack Compose
- Contributions to Kotlin open-source projects
- Migration projects (Java to Kotlin)
🚫 Be skeptical of:
- Lists Kotlin but only shows Java projects
- "Expert in Kotlin" with no production experience
- Only tutorial projects (Todo apps, weather apps)
- No mention of coroutines or async patterns
- "5+ years Kotlin" (1.0 was released in 2016, but adoption started ~2017)
GitHub Portfolio Red Flags
- Only Kotlin tutorial clones (no original work)
- No tests in any project
- Using deprecated patterns (
AsyncTask,Loader) - No coroutines in async code (using callbacks instead)
Common Hiring Mistakes
1. Assuming All Kotlin Developers Are Android Developers
Backend Kotlin is growing fast. If you need backend, specify "Backend Kotlin Developer" or "Kotlin Server Engineer." Testing Android knowledge for backend roles wastes everyone's time.
2. Requiring Both Android AND Backend Experience
This is rare. Someone who's deep in Jetpack Compose probably hasn't built Ktor microservices. Pick your domain and hire for it.
3. Ignoring Java Interop Knowledge
95% of Kotlin codebases interact with Java libraries or legacy code. A developer who can't read Java or explain @JvmStatic will struggle in real projects.
4. Not Testing Coroutines Understanding
Coroutines separate Kotlin developers from Java developers who learned Kotlin syntax. If a candidate can't explain suspension, coroutine scopes, or cancellation, they're likely still thinking in Java patterns.
5. Overweighting Years of Experience
Kotlin 1.0 was 2016, but most adoption started 2017-2019. Someone with 2 years of modern Kotlin (coroutines, Flow, Compose) often outperforms someone with 5 years who learned before these features existed.
Market Dynamics
Supply vs Demand
- Supply: Moderate—smaller pool than Java/JavaScript, but growing steadily
- Demand: High—especially for Android roles, backend demand increasing
- Trend: +15% YoY growth as Google doubles down on Kotlin-first Android
Where Kotlin Developers Work
- Industries: Mobile apps, fintech (Cash App), social media (Pinterest), ride-sharing (Uber), food delivery (DoorDash)
- Company types: Startups building mobile-first products, enterprises modernizing Android apps, fintech companies prioritizing reliability
Salary Expectations
Android-focused roles often command 10-15% premium in competitive markets. Backend Kotlin roles align with general backend salaries. Remote from LATAM/Eastern Europe runs 40-60% lower than US rates.