Navigating the System Design Interview Interview Process Scope the problem Don’t make assumptions. Ask clarifying questions to understand the constraints and use cases. Steps Requirements clarifications System interface definition Sketch up an abstract design Building blocks of the system Relationships between them Steps Back-of-the-envelope estimation Defining data model High-level design Identify and address the bottlenecks Use the fundamental principles of scalable system design Steps Detailed design Identifying and resolving bottlenecks Distributed System Design Basics System Design Basics Key Characterics Loading balancing Caching Sharding Indexes Proxies Queues Redundancy SQL vs. NoSQL CAP Theorem Consistent Hashing Client Server Communication System Designs Short URL Service Pastebin Instagram Dropbox Facebook Messenger Twitter Youtube Typehead Suggestion API Rate Limiter Twitter Search Web Crawler Facebook Newsfeed Yelp Uber Backend Ticketmaster Additional Resources