I am a member in a group that is planning a project that will ideally have users on the web and store some data in a database. We want to make this project one people can actually use, so it must be able to scale, have a nice user interface, be reliable, and work as expected. We are in the planning phase of the project and are trying to choose technologies that will help us create the product we are hoping to, while not having a learning curve that will make us miss our deadline. Following is a list of technologies that we considered using, and our rational for what we are deciding to use moving forward.
Frontend
React
React is a frontend framework all team members wanted to learn how to use. While this framework can be complicated, it is a valuable technology to learn because it is often used in industry. Many other choices of which technologies to use stemmed from this starting point.
React Native
While our team is hoping to make mobile applications using the skills we learn using React, we ultimately decided the mobile app should only be developed once we have the web app working, and therefore it will not be a core requirement for the project.
Redux
We decided to use Redux for state management as a way to simplify a problem called “Prop Drilling” in React, and as a way to more easily manage state.
Material UI, Tailwind, or plain CSS
We wanted to be able to lean on tools to help with styling the application because none of us wanted to create an entire design system from scratch. We ultimately decided to go with Tailwind because it seems like it could easily be added into components that have the functionality we want without having to do too much refactoring.
Testing
Jest
Jest is a popular testing framework we decided to use in order to ensure our website is reliable and also to make sure new additions to the website don’t break preexisting features.
Server
Next.js
Next.js is a tool to help React applications be production ready. It’s a new and popular tool that would make connecting our frontend to the firebase API more simple, so we decided to use it in our project.
Database
Mongo DB, AWS Amplify, or Google Cloud Firestore
We considered these three options to store data and decided to go with Google Cloud Firebase for its ease of use, scalability, and built in authorization and authentication tools. Mongo DB was also considered, but not chosen because of its lack of authorization and authentication tools. AWS Amplify was not chosen because it did not seem as user friendly as Firebase.
Here is a video that helped me think about how to plan a project:(https://youtu.be/Sxxw3qtb3_g)