Platform Selection

Platform Components

The system being developed is a web app using JavaScript as the primary programming language and the JavaScript augmentation framework React-native for the front-end. The back-end is built using Firebase, a Platform as a Service (PaaS), which provides a range of backend services such as a real-time database, authentication, and cloud storage. The system is not graphing/charting data or processing images or video at this time. The application is being developed specifically for Android and iOS operating systems.

Client Requirements

The client has given the development team complete freedom to choose a platform and select the component technologies that best fit their needs for the web application. This approach enables the team to choose the most appropriate components for each aspect of the system, such as the front-end frameworks, back-end services, and databases, based on factors such as performance, scalability, and ease of use. By removing any restrictions or limitations on the choice of platform and components, the team can create a customized solution that is optimized for the unique needs of the project, which can result in a more efficient and effective development process and a higher quality end product.

Documentation

The process of choosing a platform was done in two phases: first producing a list of alternatives, and then making the selection. The reason for the two-step process is to assure that we are considering the broadest alternatives.

TechnologiesProsCons
JavaScript*– Wide adoption and availability
– Rich ecosystem of frameworks and libraries
– Fast and responsive user interfaces
– Server-side rendering
– Cross-platform development
– Team is experienced in using the language
– Debugging challenges
– Performance issues
– Complexity
React Native*– Cross-platform development
– Native performance
– Easy and familiar
– Limited third-party libraries
– Platform-specific requirements
Firebase*– Easy to use, has a lot of accessible documentation
– Base services are free
– Provides a realtime database as well as user authentication
– Limited control in the application, no customizability with the provided services
– Very limited query capabilities compared to other alternatives
– Is not free once the application begins to scale up
VueJS– High Performance
– Relatively easy to learn
– Flexible/versatile
– Lightweight
– Limited ecosystem
– Limited tooling
– Limited adoption
– Component complexity
AngularJS– Integrates well with other technologies
– Allows for dependency injection
– Has two-way data binding which allows for dynamic and responsive systems
– Steep learning curve
– Performance issues since it requires manipulating the DOM
– Limited compatibility with other systems
React Bootstrap– Integrates easily with react
– Quick and easy to use
– Easily customizable
– Limited compatibility depending on the mobile application being built
– Does not function well in extremely complex mobile applications
– Isn’t optimized for large applications
Express– Extremely popular and vast documentation available
– Lightweight and flexible
– Great integration with already available NodeJs modules
– Extremely steep learning curve
– Doesn’t have great built in security features
– Limited functionality for very complex applications
GraphQL– Strong typed schema
– Efficient queries compared to other query language APIs
– Simplified data fetching
– Increased complexity: Using GraphQL can introduce additional complexity to the application – – Bad learning curve
Post SQL– Allows for a relational data model
– Allows application to have constraints, triggers, and transactions which protects the data integrity and consistency of the application
– Scales very well
– Requires a lot of resources (disk space and memory) to operate well
– Doesn’t scale well horizontally
– Does not migrate well
MongoDB– Allows for a flexible data model
– Can horizontally scale very easily
– Data is stored in a JSON-like format which is easy to parse and manipulate
– Unlike Post SQL, mongo does not have great relational data capabilities
– Queries are complex
– Requires a lot of resources to operate well
* denotes chosen platforms