Building a modern Cloud Native Full stack Microservices Project: End to End — Project Idea and High Level Design
Published: 2023-11-19 07:10:45

## Recap
In the previous article I discussed about that I will be building a full stack microservice based application and discussing about all the phases that comes in building a production ready project from project ideation to deployment. I also discussed about the technology stack we are going to use. If you have not read that article go check it out:
{% embed https://dev.to/opticsquid/building-a-modern-cloud-native-full-stack-microservices-project-end-to-end-introduction-3djj %}
## The Big Idea

![A person writing something on the whiteboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gnuq5vc31cuofy9m7fjq.jpg)

> Photo by <a href="https://unsplash.com/@kvalifik?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Kvalifik</a> on <a href="https://unsplash.com/photos/person-holding-orange-flower-petals-5Q07sS54D0Q?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Unsplash</a>
  
### Problem Statement:
Suppose there is a weekend coming you and your friends want to go out somewhere and chill and a have a good time. Sure thing you do a Google search name of some places get listed with their reviews and ratings but its just one type of place at a time either it is hotels or parks or some shopping malls or a concert etc. You can not get to know the latest offers and sale going on in those places or the businesses can not directly reach out to thier customer bases or their user communities regarding their offering or to solve customer greivances.
### The Solution:
> So, I thought of building an application which you visit and see all types of places where you can go and have a good time. The lisitings will be based on the geolocation of the user and also the user’s budget. You can also filter results based on different criterias to find the best fit. The Businesses will be able to add photos and videos of their offerings. There will be a dedicated section ratings and reviews. You can rate the business based on the experience you had. Review section will be like any other social media comment section you can see what other people have to say, mention other users, mention the business itself and reply to their comments. You will be able to book the services of the business from the application itself. There will be other additional features we will come to that later.

## Divide and Conquer
After you get an idea its very important in engineering and in life in general is to break the idea or the problem solution in smaller independent ideas. In this way it becomes easier to tackle one problem at a time. So, lets break down our solution:
### Core Components:
I need to keep a record of all the businesses and their service details.
I need to store and serve the multimedia files uploaded by the businesses to the users.
I also need a way to authenticate and authorize users as I can clearly see there are two types of users in this application: i) Normal Users, ii) Businesses
I need to keep the record of ratings and reviews of every business. Review section is a bit complex better have a dedicated section for that
### Advanced Components (Optional):
I need analytics that will keep track of different metrics of the application like user interaction and behaviour, click through rates etc. This data will help the Businesses better understand their customer and performance of their offerings and do changes according to that.
It would also help us as the platform owners what features and functionalities users need and we will work according to that.
## High Level Design
From each of the bullet points above we can construct an independent application that would be responsible for that specific role only and nothing else.
> So, by dividing the idea in smaller parts we have also 
  decided how many microservices we are going to have in our 
  backend.

## Stakeholders:
In this project we can see there are two parties lets fix a term/name for each of them.

- The Businesses which registers in our platform call them Platform Vendors or in short **PV**.
- The normal users who visits our platform with the motive to book the services of any of the PV lets call them Users.

We will be using these terms through out this series and the meaning will remain same as defined here.

So, lets make a rough flowchart type sketch for the High Level Design:

![High Level design of the project](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b9e3y7sucquov6wdy5rn.png)

Now every box in this Backend rectangle can be considered as its own microservice that we are going to develop.

As we have came to a concrete idea of how many microservices we are going to build and what will be their roles we can start database modelling for each of the microservce. In the next article we will start getting our hands dirty with database modelling. Till then Goodbye!