← All videos

Engineering video

46:04 · 22 October 2026

System Design Interview Full Course: API Design, Caching, Scalability, Databases (Mid to Senior)

Chapters 24 sections

  1. 0:00Designing LinkedIn's job search
  2. 0:45How to structure a system design interview
  3. 1:31Functional requirements
  4. 2:48Non-functional requirements

Key concepts in this video:

1. Non-functional requirements

Non-functional requirements describe how the system should behave: how fast it loads, how much traffic it supports, when traffic peaks and where users are based. Use these questions to understand how scalable the system needs to be.

Hear it at 2:48 →

2. Back-of-the-envelope estimates

Break daily activity down into requests per second and compare reads with writes. In this example, the job-view read-to-write ratio is 500 to 1—a number that helps guide later scaling decisions.

Hear it at 4:26 →

3. REST API design

Start with a simple REST API and write out an endpoint fully. For job search, Bogdan uses a GET request to the jobs endpoint, with the URL naming the entity rather than adding an action like search.

Hear it at 7:53 →

4. Load balancing

Follow the traffic to find the first bottleneck. When the server is under pressure, distribute requests across instances instead of buying a bigger or smaller server every time traffic changes.

Hear it at 14:06 →

5. Stateless servers

The answers to a user's requests cannot depend on which server instance handles them. Keep the data needed for those requests in the shared database, so requests can move between instances.

Hear it at 15:40 →

6. Database indexes

A database index creates a parallel data structure for a specific table. Instead of going from top to bottom through every record, an index can help find matching records without a full table read.

Hear it at 17:36 →

7. Caching with Redis

When people repeat the same search, let Redis handle the cached results instead of putting more pressure on the database. This adds another layer of scalability for peaks in read traffic.

Hear it at 20:32 →

8. Latency and geographic distance

Users far from the server face extra latency when establishing a connection. Optimizing application code cannot remove that physical distance, so geography becomes part of the scaling discussion.

Hear it at 21:49 →

9. Eventual consistency

After a change, a replica may briefly return the old data. Once the replicas synchronize, the system becomes consistent again. That delay is what Bogdan calls eventual consistency.

Hear it at 24:55 →

10. Content delivery networks

A CDN serves static assets from edge locations close to users. In the job-search example, a user can load the application logo from the closest location instead of travelling back to the original storage.

Hear it at 26:04 →

11. Microservice boundaries

Split the monolith where different parts have different scaling requirements. Look for asymmetries: a high-traffic service may benefit from scaling independently while other parts stay simpler and cheaper. Complexity is a price you pay.

Hear it at 28:50 →

12. API gateways and single points of failure

The API gateway receives a request and routes it to the right microservice. Bogdan uses two gateways so one can take over if the other fails, avoiding a single point of failure.

Hear it at 31:46 →

13. Event-driven work with Kafka

Handle the synchronous request first, then publish an event when the work is done. After storing a job application, the service publishes an event to Kafka so other services can listen and react independently.

Hear it at 33:35 →

14. Specialized search with Elasticsearch

As search needs more sophisticated ranking and millions of job postings, introduce a tool specialized for that problem. Bogdan describes Elasticsearch as a read-oriented view based on the primary database, with stronger search capabilities.

Hear it at 37:15 →

15. Backend for frontend (BFF)

A backend for frontend gives a frontend team a specialized application between its client and the microservices. The team can shape the API for its own needs and reduce coordination overhead across several backend teams.

Hear it at 41:13 →

Transcript

So, today we are building the LinkedIn job search page and our final system design will look like this. So, we will have things like API gateways, load balancing, we will touch on scalability, API design, what kind of database to choose, when to use caching and load balancing, and even more in-depth topics like database indexing, using Elastic Search to scale your search, and then scaling the whole architecture by moving towards an event-driven approach. The reason why I chose this specific system is because number one, it's a real system that one of the engineers that we mentored as a senior dev got, and number