Skip to content

010-mobile-framework-selection

Status

Accepted

Context

The project requires the development of a mobile application that replicates the core functionalities and user experience of the existing frontend application. The mobile application needs to support both iOS and Android platforms efficiently, leveraging a single codebase to ensure consistency and reduce development overhead.

Decision

We have decided to use React Native as the primary framework for developing the mobile application. The business and functional requirements for this application are detailed in the Mobile Application feature document.

Supported Platforms

The mobile application built with React Native will support the following minimum operating system versions:

  • iOS: 15.1
  • Android: 7.0 (API 24)

Rationale

  • Cross-Platform Development: React Native allows for building native mobile applications for both iOS and Android from a single JavaScript/TypeScript codebase, significantly reducing development time and cost compared to native-specific development.
  • Developer Familiarity: Leveraging JavaScript/TypeScript aligns with the existing frontend development skill set, facilitating easier onboarding and code sharing between frontend and mobile teams.
  • Performance: React Native provides near-native performance by rendering UI components directly to native views.
  • Ecosystem and Community: React Native has a large and active community, offering extensive libraries, tools, and support.
  • Feature Parity: React Native's capabilities are well-suited to achieve feature parity with the existing web frontend.

Alternatives Considered

  • Flutter: While a strong contender for cross-platform development, React Native was chosen due to existing team familiarity with JavaScript/TypeScript and a desire to maintain a consistent language stack where possible.
  • Native iOS (Swift/Objective-C) and Android (Kotlin/Java): These options offer the highest level of performance and platform-specific control but would require separate codebases and development teams, significantly increasing development time, cost, and maintenance complexity.

Consequences

  • Positive:
    • Faster time-to-market for both iOS and Android applications.
    • Reduced development and maintenance costs due to a single codebase.
    • Consistent user experience across web, iOS, and Android platforms.
    • Leveraging existing JavaScript/TypeScript expertise within the team.
  • Negative:
    • Potential for platform-specific quirks or limitations that may require native module development.
    • Dependency on the React Native ecosystem for updates and new features.
    • Debugging can sometimes be more complex than native development.