what sets these videos apart from other system design interviews is that not only is your thought process thorough and well thought out, you give clear distinction between mid/senior/staff level answers which is insanely valuable
I think everyone has already left wondeful comments here but I cant stop myself from giving a huge shout-out for creating such helpful videos. It is so straightforward and cohesive to understand the flow of this problem. Really appreciate the hard work you are doing!
I normally don't comment on youtube videos but this is f*cking incredible. I'm literally building.a map-based social media application as a personal project and you opened my eyes about how these things can actually scale. The structure and content of this video is immaculate. Well done.
This video is excellent! What makes it stand out from similar ones is its authenticity - it's created from the perspective of a real, experienced interviewer rather than an imagined scenario. It aligns with my own understanding and experience of system interviews, offering practical suggestions with clear reasoning behind them. Many interview videos focus primarily on functional requirements, which can feel superficial, especially for senior positions. For such roles, much more depth is needed, and this video captures that perfectly.
You should continue doing these videos man, you are the ONLY one I ever saw that makes distinction on a psosible solution beween Jr, Senior, Staff, this is pure GOLD.
Junior-to-mid-level dev here, got my first system design interview coming up soon for a new gig. I feel so much more confident thanks to you! Please keep it up!
This series is one of the most helpful system design resources that I've found. Many candidates understand the concepts but struggle to structure their thought process in a 40-minute interview. Thank you on behalf of the entire development community!
Went through your channel's videos and oh boy! they are amazing. One big takeaway for me which you have clearly demonstrated "Keep it Simple". Got yourself a follower for life.
One of the best system design interview video I have watched in a long time. I really appreciate how you break down the level of "depth" expected of senior/staff. Super helpful to know where to emphasize for someone preparing for that level. 10/10 absolutely gold content.
Been watching youtube for at-least 10 years now, and this might be my first comment ever. This was really really helpful without any fluff. And the way you explain the entire design was just so fluent and coherent. I've got a couple of interviews lined up and found this just in time. Thanks a lot!!
You are sending a clear message to us. Keep it simple, build the design from basic building blocks. Great video. Even if someone encounters a question, which they have not seen, this principle works. Reg the question, I believe 1. Notification service design (talking about web sockets, long polling, SSE) might be value add 2. Also, driver matching algorithm (K Nearest neighbor etc.) can be expanded 3. How to scale DynamoDB -apply sharding on Rider can be also be added to data point
Correct me if I'm wrong. Didn't Evan choose DynamoDb because he wanted to utilize TTL for matching the requests? I naturally landed upon a timer with 10 seconds witch then landed me on queue to Redis. Now if I had used message queue with TTL 10 seconds, I'd stick with a relational Db for Driver/User/...... Basically, main entitles don't grow as much as locations and a relational dB would have been just fine. Anyway, you mentioned about sharding DynamoDb using Rider? How would you balance your shards then? I mean in NY, you can have way too many riders as compared to some other ruler area. How sharding by Rder help to have a balanced shard? I think sharding by GeoHashes might be a better approach. If we have area that are highly dense, we'd keep a few GeoHashes regions in there but if the area is lightly populated then we can add more geoHashes. What do you think?
It is one of the best videos covering all system design concepts. Each component was well narrated. Great work, Evan. I really appreciate the hard work behind it. I learned so much from you. Please consider adding a donate button!
Totally agree with you on the Back of the Envelope Estimation! I think it's such a waste of time. As you mentioned, it's always "oh it's a lot. I need to scale it". Well duh.
This is definitely the no cruft and zero nonsense system design video. Also, suggestions to optimize time is so valuable as I have seen many candidates waste their time on things which don't add up value at the role they are interviewing.
I appreciate the longer videos and how you go into depth on the expectations for different level candidates. As a beginner to the system design world (planning to switch from a DE role), it helps to understand expectations and also see everything from a seasoned expert's point of view. I first saw a few of your posts on reddit when researching what prep material to use for the system design interview. HelloInterview has helped me tremendously with gaining knowledge, helping with behavioral stories and also just in confidence! I've been reading Alex Xu's books alongside your content. Thank you!
An incredibly high quality video. Thanks for a structured approach, level-by-level comparison and the deep dives. Together they make this (and other in the series) videos the best I've seen so far.
I can't express how much I appreciate these. I've been on a job search for a little while now, and since you've made these videos, I've been feeling a lot more confident in answering system design questions.
I really love the presentation style, and the notes on leveling staff engineer vs mid level expectations, showing the "range" discussing the expectations. these are the best system design videos on the web right now.
Please make more videos. I don't normally watch these long videos, but these videos are so informative and packed with knowledge of different domains. Thankyou.
Wow, this is an amazing explanation from someone with real world experience. If you can make a video about the limitations of every database, like for example what you mentioned about Postgres vs Redis and why we picked Redis in this example that would be great. I know those things might be covered in deep dive videos but combining them in one video will make it easier to understand the limitations in different technologies. Thanks a million!
These videos are pure gem. I knew on a high level what components are needed here, geohashing, quad tree etc, but the tradeoffs you mentioned, I wasn’t aware of them. Also the focus on low level implementation details is just awesome. Please keep these videos coming.
I am studying system design for the first time and your videos are super useful. They are not just the answer, but the framework for the thought process and how to navigate the problem! thank you so much!
Wow this might be my first ever comment on a RU-vid video. Your videos are amazing and really informative. Even though I'm not currently interviewing, I still watch your videos and I've been learning a lot from them. It's really helping me prepare for when I will be interviewing in the future. Thank you so much!
My goodness, what did I just discovered. This channel is sooo good and so underrated. Please keep going deep and go for the staff level. I would pay to be a member for a video like this.
Great Video ! Covered the required breadth and depth needed in an actual system design interview.Please keep posting videos on more different system design problems. If you keep providing content and service of this quality and level , am sure Hello Interview will reach to newer heights.
I am just starting to prepare for interviews and Uber was the first one I wanted to understand since the location based matching kept bugging my brain. After watching this, I am glad that I did. Learnt so many new things in this single video. Thank you.
Great, great content! It's shocking how simple and focused your designs are compared to nearly any other system design resources. I always wonder how it can be possible to write out/draw the designs I see elsewhere in 35 minutes and now I've watch your videos I've realized the answer is you don't need to.
Thank you so much for the video! I've spent money on other resources to actually learn sys design, and have learnt more here in a single video. Really grateful. I hope you keep making these videos. PS - This is my first comment on youtube ever in 10+ years!
Loved the content. I love the fact that you re-explain a lot of things from previous videos. 1 Small knit pick. At the end of the video where you talk about stale data cleanup (for driver who doesn't interact with ride request). You mention about using dynamo db TTL, I would actually stick to the redis way of doing it instead of using dynamo db, the ttl feature has a delay (it may also take upto 48 hrs for data to cleanup). OR we can switch to using SQL for primary DB with triggers.
@@hello_interview I disagree. DynamoDB can take some time to remove the item from the table but you can filter out the item via conditional reads. In the case where your server clocks are slightly ahead, you will run into an issue where multiple boxes think that a driver is available. To get around this you'd need to make sure that you write the lock using a conditional write predicated on the lock not existing in order to prevent multiple rides being sent to the same driver. DynamoDB has strongly consistent writes to this will work fine, and you'd need to do this in the redis case anyways.
This is the my first ever comment on any RU-vid video. Your content is so informative , class apart and you should be appreciated. I really hope you keep posting such invaluable system design content ❤
There are loads of youtube videos teaching you about system design. However most, if not all, of the video creators are not stuff or senior staff level. Their solutions are limited by their level of understanding and are actually reflecting some level that is only slightly better than entry level. This video showcase what a real system design interview should look like
This is amazing content. Great points in keeping to the important/fun stuff and not wasting time diving into the calculations (which I struggle to do on the spot). I really like how it progresses throughout with the evolving deep dive and clearly discusses the choices/tradeoffs made. Even though I have the experience (at a FAANG company), being able to structure that thought process and explain it concisely within the time frame is a skill that I need to work on and for me this content is gold. Cheers!
Hands down the best system design vid I've seen so far, been searching all over and this makes me feel like I actually have a step by step approach to doing this
Thank you very much for this. Much more concise than any of the materials I have seen thus far. I love that you call out the benchmarks as well so we can know what the standard is for this type of question.
This is by far the best system design I have seen or read. Very elegant and the way you structured it makes more sense. I wonder though if the interviewer would adapt to such format when they are particularly expecting a certain format. Subscribed to the channel with notifications 🤝
very well explained and it all made sense. thank you! i'm not applying to any jobs currently, i watched it because it helps me as a more junior developer to understand how a system should be designed :D
Very good practical advice for SD interviews. In the past, I got tripped up because I believed I had to perform steps like "back of the envelope estimations" and write out normalized data models - all of the columns and tables - before jumping into HLA. The way the design is approached here is much more organic.
I really like the depth you cover in your videos. It is the depth and the presentation style that I really love. It is amazing to watch you present. Thank you for uploading and you have a new subscriber.
My favorite section was the deep dive discussion on quadtree vs geohash with their tradeoffs based on density, write-load, and complexity. Awesome vid. A question that popped into my head is: what specific technology would we choose or name for the microservices themselves (ex ride matching service)? Is it 99% of the time perfectly fine to just call it a microservice? Or do we want to name like Sprint Boot, ECS, AWS Lambda, etc?
It was fantastic. No doubt about that, really admire your way of simplifying the design. Few things which I noted 1. When your queueing ride request and processing async, will client connection be open? I suppose not. How can a client poll for ride matching without any id? This lead us to generate some global id for ride request which we can immediately return after writing to queue and queue data will contain this global id. This has to be included in primary db as well. 2. When we are using Kafka, number of consumers are limited to number of partitions we have in a topic. So it's only horizontally scalable to extend. Just a thought! One question which bothers me a lot in lot of designs 1. I haven't worked on a product design which launched on different countries like Uber. So, this question often pops up in my mind. What's the need for all country ride details to be kept in a single database cluster? There is no need to keep all this data in a single place as we will not query driver details of USA and Europe. You may ask what's the problem? The problem is unnecessary data replication between nodes in different regions/availability zones if we want to make it highly available. Cons is that there may be multiple deployments needed when we want to launch something in different countries. Do product features release for all and feature flag switched off for some countries or the deployment itself is separate? Just curious
Love your thought process also includes why so its intuitive, and isolating out the specially difficult parts 35:36 good example of calculating only to optimize location DB# transactions. But I feel like this location DB is a core feature that should be discusssed even in HLD
Thank you for the great content. Sequentially notifying drivers is not optimal for rapid response notification to riders. In my understanding multiple drivers are notified simultaneously and then in case of a driver conflict they are arbitrated. During the non-functional requirements stage it might be beneficial to identify "analytics and operational metrics" as possible items of interest. Custodians and stakeholders live off of these.
Amazing Video Series. It makes such complex systems so clear. The deep-dives are so insightful. In terms of DB can you please point out the level of prerequisite knowledge of different options which a mid level developer must know. Thanks again for the great content
I agree 100% with you regarding the back of the envelope calculations, I too haven't really seen much value but many are doing it following as a template. Great point.
Great work! 1. DynamoDB TTL does NOT work -> "Items with valid, expired TTL attributes may be deleted by the system at any time, typically within a few days of their expiration. You can still update the expired items that are pending deletion, including changing or removing their TTL attributes." 2. You have ride matching service and location service both talking to the Location DB which is a bad practice, ideally every request to location DB would flow through the location service. 3. Why do we need a lock here? Why can't the TTL be on the location DB? When ride matching service find driver's nearby it can check the TTL field of each driver and decide whether or not to send notification to that driver. If you worry about consistency issue, you can add a version field to avoid 2 RMS trying to lock the same driver.
For #3, if we are using Redis cluster because we can't handle the load on a single leader instance due to the very high rate of location writes, that likely means we're partitioning the data geographically. Since Redis can't handle cross-slot queries we'd want it to be geographical because we want to see drivers close to a given location with a single query most of the time. But that makes using the same Redis index for locking problematic. What if the driver drives across a shard boundary and their location updates start going to a different node? There's probably going to be some time period when the driver could be on two different Redis nodes. Then they could be sent ride requests from multiple riders at the same time who locked in two different places. The usage pattern for locking is quite different. Firstly, the TPS is going to be way lower, since it only happens when we try to book a ride with a driver and not every few seconds for every active driver. We could probably handle the load on a single node. Secondly, the lock doesn't really depend on location at all, so if we did need to shard, it can be sharded consistently for a given driverId.
Really good work. Very well explained parts and great visual representation as well. I had a mock interview recently and used the Ticketmaster example as template to form my response. Waiting for you to cover more common and some unique design problems
Thank you I'm enjoying your videos! I'm subscribed since the first video. request: You mentioned in a previous video that "you'd pass as long as you answer the common scalability/fault questions well". Would love a video for mid level that covers the most common principals and themes and what candidates miss or struggle with.
Excellent video and thank you for presenting it in a real interview style. I have a question regarding how to decide or develop an intuition around deciding the core entities of a system?
@@hello_interview something similar to the system design interviews where you go through different levels of implementation, common mistakes, what to say, etc. A lot of companies are going the live coding interview route and I’m curious what makes certain candidates stand out when writing out a feature from scratch in an interview setting
Again, great content! 1. Wouldn't the driver-rider match be more of a dispatch algorithm (demand and supply). While having a ride request queue would de-pressurize the Ride Matching Service, but the driver and rider matching should be a little more smarter. Example - dispatch the driver closer to the rider rather than linking a driver who is available but rather farther than a driver who is much closer. IMHO 🙂
Wow, another excellent video Evan, I'm really enjoying these videos, these are by far the best system design videos out there. Thanks for sharing your knowledge with us Evan! By the way, you had one small typo in one of your primary database tables, you ended up having two "Ride" tables, I assume one of them was meant to be "Rider". Again, excellent video, thanks Evan!
Its really difficult to find the best quality content nowadays within so much noise. You have really set apart form the rest. Great job! Do you mind sharing what design tool are you using? is it Miro?
Thank you for making such videos, it helps a lot Have you thought about making postgres sharding based on location? I think Uber doesn't support all cities, just a predefined list of locations
Sharding by location/region is a great idea and makes the scaling challenges of this problem much more bearable. The volume in a city (even a big one) is going to be dramatically lower than globally.
Thanks a lot for such a great case study, as a Product Manager I am increasingly seeing that it is expected from PMs to have detailed knowledge of System Design, if time permits could you also have some sort of side notes that a PM should have when designing systems? It will help if you could give details of how and what engineers discuss with PMs when designing systems. I believe it'll help with interview prep for both engineers and PMs. Thanks again for such golden content.
Your content is absolutely the best. I'm subscribing to all your content. Got only one feedback though. Your huge cursor seems to be always on the current text that you are talking about. If possible when you are typing, have the cursor hidden would be great. Thanks.
Thank you for your work. I've watched a lot of system design videos but your content is definitely the most elegant. The amount of abstraction vs. depth seems perfect for actual interview settings. Quick question about using Redis as a distributed lock. Would we have to explain how Redis can be used as a distributed lock during an actual interview? It almost seems too simple to be true .
Only to the level i do here. It is straight forward! Its just a global view of a driver's state, so just saying its a simple key value pair with TTL should be enough.
Starting at 27:23: requestRide(rideId) goes to the Ride Matching Service, which does a getDriverLocations(riderLocation).... but the Ride Matching service doesn't know the riderLocation ... so we're missing a query into the primary DB to get the riderLocation from the Ride table I would suggest putting the key parameters on the function calls on the arrows instead of just "requestRide()" and "getDriverLocations()" . This would make it easier to catch these errors during the flow of design. Another way to handle this is for the client itself to have a state machine (i.e., "ride object") mimicking the Ride entity in the primary DB. So after the faire estimate, the local ride object would have the location it provided the faire estimate and can re-provide it for the requestRide() api.
Great content, and tips for junior/senior really helps. one suggestion is if you can use a font that is better readable, when we go 2X play it is little difficult to skim through