I'll giving system design in one of FAANG in next few days. I've 4 YoE (current 2 in a sinking startup as of now, and 2 in a large publicly traded company). With regards to the preparation, So far, I've completed 1) relevant parts of Klepmann's book 2) Grokking the system design interview 3) System Design Primer (it's mostly a repeat of 2 though).. I've prepared a rough draft of my plan so far and want you experienced folks to review my plan and give me some feedback/what can I improve in my presentation. When I get a question, my plan is as follows 1. First 5 mins : Clarify functional(features in the product) and Non functional requirements(reliability/availability/acceptable latency etc). List down the features. 2. Next 5 mins: Get estimates (back of envelope calculations) and arrive at the scale of problem we are talking about. Specifically, I plan to first arrive at storage capacity needed(for primary data store, for object storage if we need it in the application, distributed cache, for message broker), QPS/throughput needed, bandwidth needed, in case of key generation(like url shortner or anywhere else we are assigning id's to objects) ==> talk about number of keys needed, encoding, hashing techniques. List down the requirement estimates. 3. Next 15 mins: Draw a couple of big boxes (gateway, couple of microservices along with load balancer for each of them, data store, redis, config server if needed, queuing system if needed, CDN etc). My plan is to keep it abstract here i.e not to specify concretely which DB/queuing system I'll be using. Just draw abstract boxes along with specifying explicit contracts between each of the boxes. 4. Next 5-10 mins. Define database schemas. Make a choice between SQL/NoSQL and talk about them. Discuss possible partitioning(sharding/federation, range based v/s hash based) and replication schemes. Talk about CAP. Talk about what ACID guarantees we want to relax to allow high availability and scalability. Also define how much normalization we want to allow. At this point, I can name the abstract boxes in step 3. i.e which DB, queuing system, cache to use. Also formalize the front tier i.e use nginx for reverse proxy, node/expressjs for microservices etc and so on. i.e filling up the boxes. 5. Next 5 mins. Leave them as a buffer. Will review (3) and (4) and run through "what happens if X" for few cases. 6. Remaining time: For Q/A, drill down more into (3) or any of the other layers..
4) Check some presentations by FAANG company you applied to.
I’ll
I've 4
Dude, what is your question in all this?
Talk about the REST interfaces your product is going to publish.
TL; DR ?