Big Tech's Secret Weapon: How Netflix, McDonald's & Cash App Ship Faster with Kotlin Multiplatform (2025)
Netflix, McDonald's, and Cash App are shipping faster with Kotlin Multiplatform. See real metrics: 6.5M monthly purchases, 80%+ code sharing, and 7 years in production.
Posted by
Related reading
Can a Swift developer learn Kotlin Multiplatform?
Yes, a Swift developer can learn Kotlin Multiplatform efficiently due to language similarities. Discover a practical roadmap and syntax comparisons.
Kotlin Multiplatform for startup MVP: Is it right for 2026?
Discover if Kotlin Multiplatform is the ideal choice for your startup MVP in 2026, comparing it with native and other frameworks.
Kotlin Multiplatform vs Flutter vs React Native: The 2025 Developer Guide
Looking to build cross-platform apps in 2025? This comprehensive comparison of Kotlin Multiplatform, Flutter, and React Native will help you choose the right framework for your project based on performance, development speed, and real-world data.

When the stakes are billions, what do tech giants choose?
The FAANG Pioneer: How Netflix ships faster for TV and movie production
The challenge: Building mobile tools for Hollywood
Why Netflix chose Kotlin Multiplatform
What Netflix built with KMP
- Prodicle mobile app - Full production management system
- Hendrix mobile SDK - Lightweight, platform-agnostic SDK
- Shared business logic - Authentication, data synchronization, API clients
- Native UIs - Platform-specific interfaces for optimal user experience
kotlin// Shared Kotlin code (runs on Android & iOS) class ProductionRepository( private val api: ProductionApi, private val database: ProductionDatabase ) { suspend fun syncProduction(productionId: String): Production { // Complex business logic written once val remoteData = api.fetchProduction(productionId) val localData = database.getProduction(productionId) return mergeProductionData(remoteData, localData).also { database.saveProduction(it) } } suspend fun updateSchedule( productionId: String, schedule: Schedule ): Result<Unit> { return try { api.updateSchedule(productionId, schedule) database.updateSchedule(productionId, schedule) Result.success(Unit) } catch (e: Exception) { Result.failure(e) } } } // This code compiles to: // - Kotlin library for Android // - Native Universal Framework for iOS via Kotlin/Native
Results and impact
- Eliminated code duplication for platform-agnostic logic
- Faster, more reliable development in the fast-paced TV/movie industry
- Shared codebase between Android and iOS teams
- High-quality features delivered efficiently
Scale at billions: McDonald's serves 69 million daily customers with KMP
- 100+ million downloads on Android alone
- 69 million daily customers worldwide
- 6.5 million monthly purchases processed through the app
- Complex payment systems requiring bank-grade security
The challenge: One codebase, global scale
McDonald's implementation approach
- Payment processing logic - Complex transactions, validation, error handling
- Order management - Cart logic, customization rules, order status
- Loyalty programs - Points calculation, rewards redemption
- API clients - Network requests, response parsing, caching
- Data storage - Local persistence for offline functionality
kotlin// Shared domain layer for payments class PaymentProcessor( private val paymentGateway: PaymentGateway, private val orderValidator: OrderValidator, private val analytics: Analytics ) { suspend fun processPayment( order: Order, paymentMethod: PaymentMethod ): PaymentResult { // This complex logic is written once for both platforms analytics.trackEvent("payment_initiated", order.toAnalyticsData()) // Validate order before payment val validationResult = orderValidator.validate(order) if (validationResult.isFailure) { analytics.trackEvent("payment_validation_failed") return PaymentResult.ValidationError(validationResult.error) } // Process payment with retry logic return try { val result = paymentGateway.charge( amount = order.total, method = paymentMethod, metadata = order.toPaymentMetadata() ) when (result) { is PaymentSuccess -> { analytics.trackEvent("payment_success", result.data) PaymentResult.Success(result.transactionId) } is PaymentDeclined -> { analytics.trackEvent("payment_declined", result.reason) PaymentResult.Declined(result.reason) } } } catch (e: NetworkException) { analytics.trackEvent("payment_network_error") PaymentResult.NetworkError(e.message) } } } // Platform-specific implementations use expect/actual expect class PaymentGateway { suspend fun charge( amount: Money, method: PaymentMethod, metadata: Map<String, String> ): PaymentGatewayResult }
Results: Improved performance, reduced crashes, unified team
- 6.5 million monthly purchases processed successfully
- Improved performance across both platforms
- Reduced crashes through shared, thoroughly tested code
- Streamlined testing - Test business logic once instead of twice
- Unified development team - iOS and Android developers collaborating on shared code
- Faster feature development - New features developed and tested in one location
The cautious adopter: Cash App's 7-year KMP journey
Timeline: From experiment to production standard (2018-2025)
- 2018 - Started testing KMP technology with help from TouchLab
- 2019 - Began experimenting with Kotlin/Native on iOS
- 2021 - Adopted Kotlin/JavaScript for shared presentation logic
- 2025 - KMP now powers critical features in production
The Cash App approach: Feature flags and organic growth
- Persistence layer - Database access with SQLDelight
- Pure functions - Business logic without side effects
- Money formatting - Critical for financial accuracy (now in production on Android)
- Network APIs - Protocol buffers with Wire
- Data validation - Shared validation rules for financial transactions
- SQLDelight for type-safe database access
- Wire for protocol buffers
- CrashKiOS for better iOS stack traces
- Redwood for multiplatform reactive UI (in beta rollout)
kotlin// Real production code from Cash App (simplified) class MoneyFormatter( private val locale: Locale, private val currencyCode: String ) { fun format(amount: Long, currency: Currency): String { // This exact logic runs on Android and iOS val majorUnits = amount / currency.minorUnitsPerMajor val minorUnits = amount % currency.minorUnitsPerMajor return when (locale) { Locale.US -> formatUS(majorUnits, minorUnits, currency) Locale.UK -> formatUK(majorUnits, minorUnits, currency) else -> formatDefault(majorUnits, minorUnits, currency) } } private fun formatUS(major: Long, minor: Long, currency: Currency): String { val symbol = currency.symbol val formatted = String.format("%,d", major) val cents = String.format("%02d", minor) return "$symbol$formatted.$cents" } // Additional formatting logic... } // This formatter is CRITICAL for Cash App // Any bug could cost real money to real users // That's why sharing the code (and tests) is so valuable
Cash App's open source contributions
- Redwood - Multiplatform reactive UI framework (native UI + multiplatform Compose)
- Poko - Compiler plugin now supporting multiplatform
- SQLDelight contributions - Improvements to multiplatform database access
Results: Organic adoption that scales
- 7+ years in production proves long-term viability
- Critical financial features running reliably on shared code
- Developer happiness maintained - adoption grows naturally, not forced
- Easy experimentation - Teams can try KMP without company-wide mandates
- Production-ready on Android - Money formatter and other features live
- Redwood beta rollout - Next-generation UI sharing coming to customers
Beyond the big three: More production success stories
Forbes: Publishing at scale
Philips: Healthcare-grade reliability
VMware: Enterprise productivity at scale
9GAG: Choosing KMP after trying everything
Baidu: China's tech giant goes multiplatform
- Consistent user experiences across iOS and Android
- Significantly reduced maintenance costs
- Improved team productivity
The patterns: What these companies actually share
What successful companies share with KMP
- HTTP requests with Ktor
- Response parsing with kotlinx.serialization
- Error handling and retry logic
- Authentication token management
- Local databases with SQLDelight
- Key-value storage
- Cache invalidation logic
- Offline-first architectures
- Payment processing (McDonald's, Cash App)
- Data synchronization (Netflix)
- Complex calculations (Cash App's money formatter)
- Form validation rules
- Event tracking logic
- User property management
- Error reporting
- Performance monitoring
What they DON'T initially share
- Most companies start with native UIs
- Compose Multiplatform adoption comes later
- Platform-specific animations and gestures
- Native navigation patterns
Architecture patterns that work
┌─────────────────────────────────────┐
│ Platform UI Layer │
│ (Android/iOS Native or CMP) │
├─────────────────────────────────────┤
│ Presentation Layer (KMP) │
│ ViewModels, UI State, Events │
├─────────────────────────────────────┤
│ Domain Layer (KMP) ← Perfect fit!
│ Use Cases, Business Logic │
├─────────────────────────────────────┤
│ Data Layer (KMP) │
│ Repositories, API Clients, DB │
├─────────────────────────────────────┤
│ Platform-Specific (expect/actual) │
│ Native APIs, Platform Services │
└─────────────────────────────────────┘
Team evolution patterns
- Separate Android and iOS teams
- "Us vs them" mentality
- Features ship at different times
- Duplicate bug fixes
- Knowledge silos
- Unified mobile team
- iOS developers contributing Kotlin code
- Shared ownership of features
- Synchronized releases
- Collaborative problem-solving
Decision framework: Should YOUR company adopt KMP?
KMP is an excellent fit when...
- Start with native UI (maximum platform feel)
- Gradually adopt Compose Multiplatform for shared UI
- Mix both approaches as needed
Consider carefully when...
KMP might not be right when...
The Cash App approach: Start small, prove value
- Pick ONE feature to build with KMP (something with clear business logic)
- Put it behind a feature flag so you can safely deploy
- Measure the results - development time, bug rates, team satisfaction
- Decide based on data, not hype
- If it works, expand gradually - let adoption grow organically
2025 and beyond: Why adoption is accelerating
Google's official backing changes everything
- Kotlin Multiplatform plugin now built into Android Studio - No more third-party plugin setup
- Project wizards for KMP - Create KMP projects with one click
- Compose Hot Reload - See changes instantly without restarts (game-changer for productivity)
- Improved debugging tools - Debug iOS code directly from Android Studio
Jetpack libraries gaining KMP support
- Room - SQLite database with type-safe queries (works on iOS!)
- DataStore - Type-safe key-value storage for preferences
- ViewModel - Lifecycle-aware state management across platforms
- Navigation - Type-safe navigation coming to multiplatform
Compose Multiplatform for iOS: Now stable
- iOS-native scrolling physics - Feels like native iOS
- Native text editing - Selection, right-to-left, all working perfectly
- System drag-and-drop integration
- Adaptive UI - Respects iOS font size, contrast settings
- Native gestures - Back swipes, long press, all feel right
- VoiceOver support - Full accessibility for iOS users
Swift Export: The final piece of the puzzle
- No more fighting with Objective-C headers
- Swift developers can call KMP code that looks and feels like native Swift
- Better IDE autocomplete and type inference in Xcode
- Easier to convince iOS-first teams to adopt KMP
The 2025 verdict: KMP has crossed the chasm
- ✅ Stable tooling - First-class Android Studio support
- ✅ Stable Compose for iOS - 96% of teams report no performance issues
- ✅ Google's official backing - Not just JetBrains anymore
- ✅ Jetpack libraries going multiplatform - Room, DataStore, ViewModel work on iOS
- ✅ Swift Export coming - Native Swift interop without Objective-C friction
- ✅ Proven at scale - Netflix, McDonald's, Cash App, Philips, VMware, Forbes, Baidu
- ✅ 7+ years in production - Cash App proves long-term viability
What can you learn from these pioneers?
Lesson 1: Start with business logic, not UI
Lesson 2: Clean architecture is your friend
Lesson 3: Gradual adoption beats big rewrites
Lesson 4: Team collaboration improves dramatically
Lesson 5: Performance is not a concern at scale
Lesson 6: You don't need to wait for perfect tooling
Ready to ship like the big players?
- Authentication flows (Google, Apple, Email)
- Payment processing and in-app purchases
- Push notifications setup
- CI/CD pipelines for both platforms
- Project structure and architecture
- Build configurations and signing
- 🔐 Authentication (Google, Apple, Email/Password)
- 💳 In-app purchases and subscriptions
- 🔔 Push notifications (FCM + APNs)
- 🚀 CI/CD pipelines (GitHub Actions + Fastlane)
- 📱 Complete sample app (not just hello world)
- 📚 Comprehensive documentation
- 🏗️ Clean architecture (like McDonald's uses)
- ⚡ Compose Multiplatform for shared UI
Sources and references
Official case studies and company blogs:
- Netflix Android and iOS Studio Apps - now powered by Kotlin Multiplatform - Netflix TechBlog
- Mobile multiplatform development at McDonald's - McDonald's Technical Blog
- Cash App's Summer of Kotlin Multiplatform - Cash App Code Blog
- Case Studies: Cash App - Kotlin Multiplatform Official
- Philips Case Study: Building Connectivity with Kotlin Multiplatform - JetBrains Blog
- Case studies - All Companies - Kotlin Multiplatform Documentation
2025 roadmap and feature announcements:
- Kotlin Multiplatform Development Roadmap for 2025 - JetBrains
- What's Next for Kotlin Multiplatform and Compose Multiplatform – August 2025 Update - JetBrains
- Android's Kotlin Multiplatform announcements at Google I/O and KotlinConf 25 - Android Developers Blog
- Compose Multiplatform 1.8.0 Released: Compose Multiplatform for iOS Is Stable and Production-Ready - JetBrains
- Kotlin Multiplatform Tooling: Now in IntelliJ IDEA and Android Studio - JetBrains
Industry analysis and production readiness:
- Is Kotlin Multiplatform Ready for Production 2025? - Guarana Technologies
- Is Kotlin Multiplatform production-ready in 2025? - Volpis
- Top Apps Built with Kotlin Multiplatform [2025 Update] - Netguru
- The State of Android and Cross-Platform Development in 2025 - TechYourChance
Technical deep dives and implementation details:
- Netflix Chooses Kotlin Multiplatform to Power Android and iOS Studio Mobile Apps - Touchlab
- Native UI and multiplatform Compose with Redwood - Cash App Code Blog
- Popular apps using Kotlin Multiplatform (KMP) in 2023 - and what you can learn from them - Jacob Ras
Continue your Kotlin Multiplatform journey
- Compose Multiplatform for iOS Stable in 2025: What Developers Need to Know
- Kotlin Multiplatform vs Flutter vs React Native: The 2025 Developer Guide
- How to Set Up Kotlin Multiplatform: Complete Development Guide 2025
- Building a Revenue-Generating Mobile App: Complete KMP Monetization Guide 2025
Quick Questions About KMP Development
- Do I need a Mac for iOS development? - Platform requirements explained
- How long does setup actually take? - Real timeline expectations
- What's the total cost comparison? - KMP vs traditional development costs
Build your KMP app faster
Skip the setup and start shipping with a production-ready Kotlin Multiplatform starter kit.