System Design Interviews : What do the interviewers look for ?
I've been reading through Grokking the System Design Interview, System Design Primer for past couple of days but I'm still not sure how to approach the interviews(or rather, what the interviewer will be looking for)
For e.g if the question is Design a video distribution system, there are so many assumptions which I can make that can go wrong. For eg, my approach would be as as follows
i) Get the requirements i.e to upload video by a user and they get added to the catalogue and other viewers can stream the videos on demand. Then talk about additional requirements(playlists, searching for videos etc), privacy options(i.e private videos,) ==> I can easily miss out a lot of things here
ii) Get the sense of scale and formats. I can make an assumption that 1 machine will serve 5000QPS(aggregated, for all types) and adjust the number of machines as per my QPS request. Specify supported formats, (.raw, .flv) and make a claim that 1 video will be on an avg 10MB. for 10 billion videos(youtube scale), I would need ~10 peta bytes of storage for current needs and would scale for double i.e 20 peta bytes considering future growth. . . ==> I can be wrong on so many levels here i.e I can so easily over/underestimate in an interview..
iii) Design the architecture with Reverse Proxy/Load balancer/Application Servers/Data stores(object storage for saving videos themselves, and a structured DB for saving video hash, user related information, video catalog), a distributed cache for popular items, Talk about sharding here ==> Again, I can go horribly wrong in designing the schema.. I might miss out some crucial information or make it slow for a critical information by not indexing on some fields or index on a lot of unnecessary things . .. etc..
iv) Talk about general things like healthcheck, analytics, etc and the internals of how 1/2 things would work and specify the contracts/API/s (HTTP for establishing the connection and a long lived connection for streaming the videos). .for e.g about a primitive algorithm regarding how to rank the search results.. Possibly psuedocode here and talk about ranking by metadata etc .. OR talk about how user handling/session management and sticky sessions are handled .. OR about video compression techniques etc ==> Problem is, I know barely enough to scratch the surface of these topics and can't talk about anything for more than 5 minutes. .
Finally, focus on anything specific an interviewer wants me to talk about.. For context, I've 3 YoE experience and most of time, I've spent writing application specific code and my experience has been limited to AWS and it's related ecosystem(R53, Load Balancers, Redshift i.e mostly managed databases for anything closely at scale.. ) and most recently Kubernetes on Google Cloud.. ==> I'm not an expert in any of these, for e.g I still cannot confidently answer how containers are correctly scheduled, etc.. I've an interview in 2 weeks at FB and feeling a bit overwhelmed by number of things that can go wrong in a system design interview..