Building-A-ride-Hailing-App

Background

During a call with one of my friend he talked about a blogpost from The Progmatic Engineer where Gergely wrote about a guy named Juraj Majerik how he created an educational side project, where he implemented everything from scratch from maps to message queues.
The purpose of his series was to learn distributed systems by building real world projects.

This got me excited as I too wanted to learn a lot of stuffs from System designs, Databases, Best coding practices, Design patters, Distributed Systems etc.

So I decided to create an App, a lot similar to Juraj but adding some tweaks to it.

What I am going to work on

So I decided to create an App for the Ride hailing of bikes. I live in vasco-da-gama, Goa and here we dont have ola, uber or Rapido. We have Pilots here those are the people with yellow plates on their bikes, normally they are located throughout the goa, at their Pilot stands.
Creating an app like this would help me to learn how large applications like OLA/ UBER work and how they handle multiple concurrent bookings.

Learning outcomes

To Learn Why is Required Resources
System Design Gives a better understanding of how to proceed with the coding part, tools to use, tradeoffs and selections to be made 1. Blogs from Uber, Lyft, Ola, Rapido
2. SDFC
3. Alex xu
Design Patterns Not to reinvent the wheel, building on the existing patterns and practices
Coding Practices I need to improve my coding style as currently I do a lot of adhoc coding, which is difficult to undersatnd by others
Distributed Systems I am really Fascinated by the topic, lately have been listening to podcasts

Architecture and diagrams

  1. Simulation Engine : This is going to be a simulator that tests my application with some fake users and makes my app run
  2. Map : I am not going to use any API rather create a sample map of grid and make the app run on that
  3. Pilot Stations : Place where all the pilots are hosted, they wait their until they get an order and return to this part after the ride is completed
  4. User : User is going to book, should have name, budget, pick up & drop point
  5. Bike : A basic bike to show the movement of the bikes.
    I am also thinking to display the logs and server loads on the frontend, but havent really thought what data I would be displaying. Tools like Prometheus and other monitoring tools would be needed.

Next steps

The next step is to read about the system design then come up with a design that can be implemented that is throughly thought through. Some decisions that I need to make are

  1. Type of database to use
  2. Type of framework (i am thinking of Ruby on Rails)
  3. Best coding practices, (need to watch uncle bobs lecture)
  4. Design patterns and LLD, what type of classes should I make what fields should I add in them
  5. Setting up of server on cloud, ssl cetification, repository, CI/CD pipelines as well.

This is going to be a very long project as I have a lot to learn and implement so I am not adding any time limit to it.
Really excited for the journey ahead and lets start building.