Platform Selection

Client requirements for the platform selection: None.

*The platforms we chose are highlighted in the following table.

TechnologiesProsCons
MongoDB– Supports many programming languages (Java, Node.js, Python)
– Has good support for VS Code
– Cloud database that supports AWS and Google Cloud Platform
– Well documented
– Group members are more experienced in relational databases
– Free version storage is limited
MySQL– Group members have relational database experience
– Well-documented website and Node.js module
– Offers cloud service with AWS and Oracle Cloud Infrastructure (OCI)
– Complexity establishing a cloud database connection
– Tables may end up storing duplicate data
Docker– Containers are the go-to method for microservices.
– Will allow isolated application services such as authentication and model creation.
– Will allow services to operate consistently and more efficiently.
Containers management, as well as service orchestration, can be difficult to implement.
Kubernetes– It delivers application load balancing and monitoring.
– Provides the ability to build, run and scale containerized applications.
– Adaptable, extensible, and cost-effective at the time of computing resources.
– Steep learning curve.
– Might delay developing process as it requires more planning ahead of time.
Typescript over Javascript– Typescript provides strict and structural typing that will make code management easier.
– Will allow us to define type annotations and avoid bugs when writing code. (Type inference)
– Will ensure our Javascript-generated code is correct and free of type bugs.
– Increased team performance since defined data structures and type annotations make it easier to understand code implementation.
– Working with other libraries and tools, such as MongoDB, can be a challenging typing system.
Python– simple syntax
– lots of available packages online
– imperative and functional programming
– the machine learning part of the project is completed by python
so using python can have better consistency
– not quite efficient
C++– more efficient on running time and memory– complicate syntax
– not lots of available packages online
GCP– lower price
– $300 credits for free trial
– highly integrated with Google-owned and other open-source projects
– TPU and Vertex AI available on GCP
– better for ML
– not as popular as AWS
AWS– more popular over GCP
– 1-year free trial
– good integration with other amazon-owned services, API
– higher price
– not as friendly to ML as GCP
Relational Database– easily structured into categories
– consistent in input, meaning
– easy to navigate
– defined between data points
– higher requirement for hardware
– dynamic changes affect all the tables
– Up-front schema definition
Non-relational Database– not confined to a structured group.
– perform functions for greater flexibility
– dynamic changes
– variant inputs
– Low reliability
– Manual query language
– hard to verify data integrity and consistency
React JS– Rich Javascript Library.
– Easy to test, and developer contest and debug codes with the native tools help.
– Less coding and more functionality for dynamic applications.
– Run on server, and virtual DOM will be rendering to browser as a regular web page.
– Only cover VI layers
– React JS update so fast, so there is no up on time and proper documentation sometimes.
– Beside Javascript, The language used also include JSX.
Node JS– People always use Node JS for building backend service, such as APIs like Web App.
– Easy for javascript programmers, because.
– It can handles requests and authentication from browser, make database calls.
– Reduces performance when handling computing tasks.
– the developers are forced to continually change the access code to match the compatibility with the frequent changes of Node.js API.
Next JS– React users can handle Next JS easily.
– Popular than React JS and Node JS these days.
– Next.js was actually created to fill in some of the gaps left by React. 
– reduces data security problems.
– The built-in fast refresh feature and CSS support.
– Next.js allows page constructors to be grouped as components and reused. 
– Next.js is not very flexible when it comes to routing. 
Github– Easy to remotely accessed by any authorized person.
– Built-in control and task management tools.
– Good for group cooperation and backup.
– Git repository hosting online.
– Because it is easy to access, there might be security/ intellectual property issue.
– Some features have to pay.