Facebook/Google/Microsoft/Amazon Interview

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.

eggbegging Aug 4, 2017

If he was rejected he didn't design it well.

Microsoft alpha12 OP Aug 4, 2017

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?

Google bau Aug 4, 2017

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.

Microsoft alpha12 OP Aug 4, 2017

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.

Google bau Aug 4, 2017

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.

Amazon poconos Aug 4, 2017

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"

Microsoft alpha12 OP Aug 4, 2017

Will read the paper. Thanks for sharing ☺️

Cisco WalterW Aug 4, 2017

Now system design questions are also asked at phone screen?

Microsoft C. Kramer Aug 4, 2017

Got one in Amazon phone screen.

Amazon zPxi23 Aug 5, 2017

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.

Amazon qpaW50 Aug 11, 2017

How could a system design end up with just a bunch of classes?