Week 5?
need to see if we can make a project that they can work on
So far, we talked a lot about frontend and backend as seperate pieces. The frontend is what the user interacts with, and the backend is what handles logic, data, and communication behind the scenes.
This week, we are taking a step back from focusing on just one thing. Instead, we are going to look at the whole system and how all the pieces connect.
What is system design?
System design is just the process of thinking about how an application works as a whole. When we build an app, there are a bunch of questions beyond "How do I code this?"
You have to answer
Answering these questions is pretty much what system design is. It isn't just for big companies or complicated apps. You have probably "done" system design if you've ever worked on a project, because anytime you have a frontend, backend, database, auth, file storage, or deployment, you implemented a system.
Thinking in System Design
The best way to think about system design is to break an app into pieces (and break each piece into smaller pieces if you can)
For most web apps, you usually need
Not every project needs all of these, but these are the most common things most projects have.
For example, with DuckLink, they have
Once you think about apps like this, it becomes much easier to understand what you need to build
Usually, projects go through three primary stages during development: the local development stage, the deployment stage, and the scaling stage.
Local Development
This is where everything runs on your computer. You typically have
At this stage, you just want to make sure the app works properly
Deployment
Once your app runs properly locally, it needs to be hosted somewhere so people can access it (Either on the internet or an App Store). This means you need to think about
Once a project gets deployed, system design matters a lot more because the app isn't just running in one place, its running like a system (system design).
Scaling
Let's say your app had tons of users showing up. Tons of problems will also start showing up. Things that were fine can become bottlenecks. Let's say
This is where ideas like caching, CDNs, load balancing, and horizontal scaling matter. To further show this, lets take a look at an example
The Youtube Example 😁