Platform Selection

Possible Platform Components:

Flutter:

Pros:

  • Can be used across different platforms (Android and iOS)
  • Changes can be made instantly to the app, reducing the amount of time it takes to fix bugs

Cons:

  • Large learning curve because nobody on our team had experience in it
  • Need to develop from scratch because we wouldn’t be able to leverage previous team’s code
  • Cannot be used for web apps, so could not use if we wanted to expand beyond the mobile app

React Native:

Pros:

  • Can be used across different platforms (Android, iOS, and mobile web apps) 
  • Code reusability
  • Supported by Expo, making deployment, navigation, integration with back-end services, and testing extremely easy
  • Quick onboarding because most team members have experience

Cons:

  • Not as performant as fully native apps

JavaScript:

Pros:

  • Previous team’s code uses JavaScript, so we would have quicker development time
  • Compatible with React Native
  • Widely supported

Cons:

  • Minimal experience with JavaScript on our team
  • No static typing, making it harder to catch errors and maintain

TypeScript:

Pros:

  • Allows for static typing for improve code quality
  • Easier to debug
  • Easier to maintain
  • React Native apps now default to use of TypeScript
  • Widely used

Cons:

  • Diverges from previous team’s code
  • Not all React Native libraries support TypeScript

Firebase:

Pros:

  • Real-time database connection
  • Handles most backend functionalities, functions, authentication, and real-time databases
  • Can leverage previous team’s code as an example
  • Easy to set up

Cons:

  • Limited knowledge, more onboarding needed
  • More difficult to debug
  • Not as flexible for database queries
  • Scaling costs money

MongoDB:

Pros:

  • Flexible schema
  • Scalable

Cons:

  • Not the best for structured relational data
  • More difficult to set up
  • Lack of experience means longer onboarding times for our team

Expo:

Pros:

  • Unified development environment
  • Integrates with React Native, makes it easier to develop
  • Great documentation
  • Easier to test and build
  • Big set of tools/SDKs for developers

Cons:

  • Can’t use native SDKs
  • Larger app size

Final Selection:

We will be developing using FirebaseExpoReact Native, and TypeScript. The goal of our project this semester is to create a minimally viable product for our client to present to potential investors, so we prioritized production speed in our platform selection. The only client requirement we had to consider was that the app we develop needs to be compatible with Android and iOS devices. We also have access to previous group’s work, which utilized React Native, Firebase, and JavaScript code. We landed on React Native because it allows us to reuse previous team’s components, leverage teammate’s previous experience, and deliver a flexible app that can be run on Android and iOS devices. To speed up development time, we decided to use the Expo platform, which will provide us with pre-built components, libraries, and development tools. We will be able to test and demo our project using the Expo Go app. We also decided to use TypeScript because of the advantages of static typic like improved code quality and debugging. Additionally, we have more experience working in TS. Lastly, we decided to use Firebase to simplify our backend work. Since Firebase handles backend servicing like authentication, cloud functions, and data synchronization, we won’t need to write as much backend code. Additionally, the cloud databases are scalable as the app grows.

Sources: