I have friends working at Lyft and I've heard good words from them, so to clarify this review only reflects my personal interview experience at Lyft. I was referred by a friend who works at Lyft, it took roughly a week for the recruiter to contact me. Had the initial phone screen (a quick infinite multi-stream processing coding question) and invited on-site right after.
On-site is when the experience went from an 8 to a 3. The day was originally scheduled with 5 tech interviews (2 coding, 2 arch designs, and one closing) and one lunch interview. The first two interviews were conducted with engineers (both nice and polite but lack of interviewing experience). The first interview question was to coding for LRU cache functionalities. While talking through the process one solution was proposed with a runtime of O(lgN) for maintenance- having a heap to keep track the LRU item and a hash for each item and MRU time. When the solution was agreed upon from both parties the interviewer asked to implement the get() function. Before white-boarding the codes down, he asked for the runtime for get(). Given the solution that was proposed previously, the get() will have a runtime of O(1) (hash table lookup). The next 15 min the interviewer was trying to skew the mindset to repeating "is there any other possible runtime for get()?" - "no, unless you have a different solution in mind." - the communication was the first struggle of the first interview. The second struggle was after the 15 min juggling through nowhere - the interviewer simply paused and asked to code the get() function out. Given the established solution the get() implementation goes:
def get(url)
if hash(url)
hash(url)
end
end
Then (when 5-8 min left) he finally said - is there a more optimal solution? That's when the solution was changed from hash&heap to hash&(pointer and array), which will give a runtime of O(N) for general maintenance. In this case, the get() function includes multiple steps:
1. get the data if it's stored in cache O(N)
2. update the pointer of hashed item to the end of the array
In this case, the get() has a runtime of O(N) instead of O(1).
That called for the first interview. The second interview was a good experience. Even though the interviewer is a junior (he's the last min sub for the originally scheduled interviewer) engineer but he was quick straightforward and explicit on coding question (did the coding on his coderpad.io). He also took the extra time at the end to answer my questions (during the lunchtime) even though he didn't have to. I was impressed with his maturity and attentiveness as a young interviewer. His coding question is to write a compressor for text documents given the in and outs of a decompressor.
Then the 30 min lunch *interview* - nothing. The interviewer was busy eating with his two giant plates of food as opposed to have *useful* conversations; I would have preferred to eat by myself. The general protocol of lunch interview is to converse with the interviewee with intros to the company and culture. No, none of it.
The third interview was conducted with a fairly experienced engineer/HM. That's the most enjoyable interview session I had that day. The question is on arch design. We spent 20 min talking about work experience (same specific field of engineering so granted lots of conversations) and another 25 on numerous cases of arch design. The design question is on design for a promo code based system (with same promo code, randomly generated promo code, and promo code with conditions).
When the fourth interviewer is supposed to show up - no he didn't. The recruiter did - ended the interviews early. A sign that is easy to spot, asked me if I have any questions. I said no - replied that if the interview is cut short it's generally not a good sign. She tried to explain that it wasn't the case - but I left early as well and went to grab coffee with my friend working there.
It wasn't a pleasant experience for me - with the combination of inexperienced interviewers, abruptly cut-short interviews (understandable, but definitely baffled), and lack of enthusiasm from the employees (lunch chat) - none granted a near sufficient respect to interviewees. I speak as someone who also conducts interviews with software engineers on weekly basis, regardless of their level, background, or positions - interviewers should always own the responsibility for providing the time for interviewees who took their time for the interviews.