Ok! So one of my friend had a technical phone interview with Facebook last week and was asked to design/build a pizza delivery system. Interviewer asked him to write code for classes (like Pizza and Toppings etc) and methods(such as calculate price). As per my discussion with my friend, he seemed to have answered everything correctly which brings me to the question what do interviewers expect in these sort of questions because my friend was rejected. I've my interview scheduled in a week.
I am sure this problem is not about the design but about requirement gathering. Your friend is rejected because he/she didn't ask enough questions to understand the problem well. For Pizza delivery, main problems are how many orders do you expect, how many vehicles you would need, how would you optimise for faster delivery, how would you scale it. If you create classes for toppings and pizza, you would be rejected.
Honestly even I think that not asking enough questions might have been one of the main reasons. I was just curious if interviewers expect a certain level of expertise in distributed systems, concurrency, and design patterns etc.
It depends on the experience level. If you have more than 5 years of experience, it is expected that you know about and can discuss distributed systems, concurrency etc.
I have learned some valuable insights on design from this interesting paper - https://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf The conclusion of the paper is something every engineer should remember while designing any system: "... it is almost always incorrect to begin the decomposition of a system into modules on the basis of a flowchart. We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others. Since, in most cases, design decisions transcend time of execution, modules will not correspond to steps in the processing. To achieve an efficient implementation we must abandon the assumption that a module is one or more subroutines, and instead allow subroutines and programs to be assembled collections of code modules"
Will read the paper. Thanks for sharing ☺️
Now system design questions are also asked at phone screen?
Got one in Amazon phone screen.
I interview people for a specific type of technical role. System design is one of the two core competencies I need to validate before spending the money and time to bring the candidate onsite. To be fair, I don't delve into code on phone screens, but if a candidate can't talk me through a basic system design, it's not worth the time to bring them in anyway.
How could a system design end up with just a bunch of classes?
Health & Wellness
14h
888
Issues with sleep
AMA
Yesterday
3148
I have worked at TikTok US core tech for 3 years. AMA.
Cars
Yesterday
1967
Cyber truck killer: Chinese version of EV truck
India
16h
3005
Why is it so G*damn difficult to move money out of India
Ask Blinders
20h
932
Why Pronouns shit captured US ? I don’t see this anywhere else
If he was rejected he didn't design it well.
Yeah, that's the reason I am asking it here. If you had to design, how will you design the system, or what design points do you think most of the interviewees miss?