Sharing only business logic keeps the app feeling native because each platform still uses its own UI and interaction patterns. Sharing both logic and UI maximises consistency and reduces duplicate front-end work, but it also narrows platform-specific flexibility. Teams usually choose the first model for native experiences and the second when identical flows matter more than custom platform behaviour.
Why This Matters for Security Teams
The choice between sharing only business logic and sharing both business logic and UI in Kotlin Multiplatform Mobile is not just an engineering preference. It changes how much of the user experience is standardised across iOS and Android, how quickly defects can be introduced or fixed, and how much platform-specific hardening remains possible. For security teams, that affects review scope, release governance, and the consistency of authentication, consent, and error handling paths.
When only business logic is shared, teams usually keep platform-native UI layers, which can make it easier to apply OS-specific privacy patterns, accessibility controls, and secure input handling. When UI is shared as well, engineering effort can drop, but so does flexibility to adapt security-sensitive screens to platform conventions. That tradeoff matters for login, MFA, recovery, payment, and consent journeys, where small UX differences can influence user trust and completion rates. Security and product teams should treat the UI model as part of the control design, not as a pure code-reuse decision. The NIST SP 800-53 Rev 5 Security and Privacy Controls is a useful reference point for mapping those decisions to access control, auditability, and interface-related privacy expectations. In practice, many teams discover the limitations of their sharing model only after a security review or platform-specific regression has already exposed the gap.
How It Works in Practice
Sharing only business logic typically means the app’s core rules, state management, network calls, validation, and data transformation live in a shared Kotlin module, while each platform implements its own UI. This model is often preferred when the product needs a native look and feel, or when iOS and Android must follow different interaction conventions. It also keeps platform teams free to adjust navigation, accessibility, biometric prompts, and permission flows without waiting on a shared design layer.
Sharing both business logic and UI extends the shared module to include presentation components, screen structure, and often state-driven rendering. This can speed up delivery when the same workflows must appear almost identically on both platforms. It can also reduce duplicated front-end logic, which is attractive for teams with limited mobile resources. The cost is a narrower design envelope. Security-sensitive user journeys may become harder to tailor for platform-specific guidance, and debugging can be more complex when a shared UI layer behaves differently under native constraints.
- Use shared logic only when native UX, accessibility, or compliance-driven screen variation is important.
- Use shared UI when the business flow is stable, repetitive, and needs consistent behaviour across platforms.
- Keep sensitive actions such as authentication, recovery, and consent reviewable at the platform boundary.
- Validate that shared components still support secure state handling, input masking, and error feedback.
For governance, teams should define which controls remain platform-owned and which are safe to centralise. That usually means deciding where security assertions, audit events, and validation rules live, then testing those paths on both operating systems. These controls tend to break down when the shared UI layer becomes tightly coupled to platform-specific authentication, accessibility, or navigation frameworks because the abstraction no longer matches runtime behaviour.
Common Variations and Edge Cases
Tighter UI sharing often increases coordination overhead for design exceptions, release sequencing, and platform-specific security review, requiring organisations to balance consistency against flexibility. There is no universal standard for this yet, so the right model depends on product risk, team structure, and how much divergence the platform experience must preserve.
Some teams adopt a hybrid approach, sharing the business rules and only the most stable presentation components while leaving security-critical or highly branded screens native. That can be a sensible compromise when identity verification, biometric enrollment, or payment confirmation needs separate treatment on each platform. In these cases, the real issue is not just reuse, but control over where users are asked to trust the application and how failures are explained.
The edge cases usually appear when feature parity is expected but the platforms do not behave identically. For example, a shared UI may look consistent yet still require native wrappers for push permissions, system dialogs, or credential manager integration. Best practice is evolving here, especially for teams that want shared navigation and styling without losing OS-specific protections. The safest approach is to decide upfront which flows can tolerate abstraction and which should remain explicitly native.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
NIST CSF 2.0, CIS-Controls and NIST Zero Trust (SP 800-207) set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| NIST CSF 2.0 | PR.AC-4 | UI model choices affect how consistently access paths enforce least privilege. |
| CIS-Controls | 16 | Application security testing is needed to catch regressions in shared logic and UI layers. |
| NIST Zero Trust (SP 800-207) | Platform-specific trust decisions still matter when shared UI touches authentication flows. |
Keep sensitive screens aligned to least-privilege access rules and review platform-specific exceptions.
Related resources from NHI Mgmt Group
- What is the difference between SQL injection and business logic vulnerabilities?
- What is the difference between operational priorities and business goals in IAM?
- What is the difference between access review and sharing revocation?
- What is the difference between centralized authorization and application-level access logic?