My experience on giving Sr. Software Engineering interviews
Hi, this is Abhishek. I would like to share my interview experiences, how I prepared for them and the overall process. I am not sharing this to brag about how I got the best offer with less preparation, or tricks to prepare for your interviews in a short duration. One can read through this post to plan better and get a good idea of what to expect during the interviews.
Coming out of comfort zone
I was just like one of those happy software engineers in the Bay area who enjoyed working in Tech. I learned a lot during the initial phase of my career. My company kept me happy with good compensation and a work-life balance. Being a payment industry leader, my company went through huge progress amid pandemic due to a sudden boom in contactless payments. There was no reason for me to look out for other opportunities.
One day, I introspected if I was really making a progress in my professional career or just meeting the set goals. Where do I really stand compared to other folks in the Valley? This introspection shook me a bit and I figured that I am stuck in a never ending comfort zone, doing the monotonous work assigned to me and just riding on the company’s success. Moreover, I thought I would soon be out of technology if I do not make efforts to keep myself up to date. I also felt low at my confidence in giving interviews and preparing for them. Fortunately, I think I realized it soon and the lockdown situation favored me to spend some time for the preparations. Soon, I made this my top priority for late 2020 and early 2021.
Preparation
I made a separate post for my preparation, please refer to this link if you are interested in knowing how I prepared for my software engineering interviews.
Introspection and Finding Interest
I think the question every engineer asks oneself is whether he/she needs to change their role/company. And if the answer is yes, then what roles do they need to look out for? For some people, staying in the current role is a better option and that totally makes sense. But if you introspect yourself and figure out that you are stuck in the current role and just doing what you are asked to do, that probably should trigger a thought within you to explore the world outside. One should do this exercise at least every 6 months to maintain the integrity of their professional career.
I have 6+ years of experience and I worked in 3 different teams at PayPal. After doing this exercise, I realized that I do have a good product sense, so my interest lies more within product services rather than infrastructure. The domains I worked on were Checkout Products, User, and Payments, I literally wrote my accomplishments and what I learned in these 3 teams on a notepad to help understand my interest. I figured I enjoyed working in Payments the most, and I also understand how it works on a high level, this experience from PayPal will definitely be valued outside.
Applying to Companies
At this point, I was very clear about what I was looking for and what companies I should be applying to. It could be very time-consuming and confusing to decide what companies to apply to as there are nearly 1000+ companies hunting for good software engineers throughout the year. I specifically decided to apply to
1. Fin-tech
2. Growth pre/ recent IPO
3. Facebook and Netflix from FAANG
I thought the post-pandemic fin-tech domain should stay in the limelight for at least 4 to 5 years, and fortunately, I also had relevant experience. I also wanted to apply to pre/recent IPO companies which I thought could be the next unicorn in their domains. I especially applied to positions in Payments / Monetization teams to have a better chance of getting selected and to show off my knowledge in that space. I did not crave working at Google, Amazon, and Apple from FAANG and rather decided to go for Facebook and Netflix, Facebook for their initiatives in Payments and Crypto and Netflix for their culture and a role in the Payments team.
Here are the companies I applied for
Ripple, Personal Capital, Upstart, Sofi, Prosper, Checkr, Opendoor, Instacart, Facebook, Plaid, Robinhood, Affirm, Wish, Uber, Adyen, Asana, Square, Cash App, Netflix, Wealthfront, Metromile, Scribd, Confluent, Coinbase, Patreon, Mapbox, LinkedIn, AirBnB, Gemini, Dropbox and Adobe, Ebay, Intuit.
Frankly speaking, I was not sure if I was ready for giving the interviews, and instead of doing mock interviews with friends I thought it would be a good idea to give some practice rounds. The last 3 companies mentioned above were my practice interviews.
This was my list of companies and it could be totally different for someone else depending on their interest, please do your own study and make your own list.
Recruiter Calls
Recruiter call is the mandatory step for setting up your interview, I felt they are time-consuming and it’s really a struggle to set up these 30 mins calls in your current work schedule, especially when you are actively looking and applying to more than 20–25 companies. I was almost done with my preparation by February 2021 and decided to revise everything while I speak with recruiters. I used this as an opportunity to know more about the company and the role which helped me to decide whether I should really move ahead and invest my time in interviewing for this company.
The format for every recruiter call is almost the same, it starts with some information about the company and role, your introduction, your timelines, your expectations, the interview process, and logistical questions. You have to repeat this in almost every call. I would encourage you to prepare a brief introduction about yourself (4–5 mins) and get familiarized with it so that you can say it fluently at almost any time of the day. Mine was -
“I graduated in 2014 and started working for PayPal since then. I worked in 3 versatile teams in my 6+ years of experience at PayPal. My first team used to work closely with Checkout products to improve their latency and availability. I was in this team hardly for 1 year and later decided to move to User team for — . The problem statement that we were working on was — . I enjoyed working in this team and am proud of — . In 2018, I thought that I worked at PayPal and yet do not have any Payments exposure, at that time, I decided to move to a Payment Orchestration team. My team is responsible for — . I worked on — . Recently, I am working on — . I also got an opportunity to lead — and mentor — .
In my next role, I am looking for — . I feel working at XYZ company would really help me to groom myself to be a better leader and hence I decided to apply for this role.”
Almost every recruiter was impressed with my brief introduction and walked me through the next steps. I think when a recruiter asks for your availability, they always offer you an initial phone screen unless there is something that does not work for your case (e.g. location, visa etc.) I would also encourage you to go over the company’s “About Us” page and learn about the company’s core business model at least 10–15 mins before your call to put yourself in a better position to speak about your interest.
Here is the schedule I had on my black board (hung on the wall) for recruiter calls (on left), phone screens (on right), and on-sites (on the top right)
This plan may seem aggressive or overwhelming to some people but it was perfect for me, I would encourage you to prepare your own plan to set a reasonable deadline for the interview process.
Phone Screens
While you can get phone screens skipped if you convince the recruiter that you are in an offer stage for some companies or if you get a strong referral from a current employee, it’s still the way companies use to filter out candidates with whom they don’t want to spend 4+ hours of on-site rounds. In my opinion, companies having a streamlined interview process take very good phone screens and it’s fun to have a short 1-hour interview with a coding challenge. On the other hand, some un-organized phone screens can screw up your chances to get into good company. Overall, I think success in the phone screens depends on how well you have prepared for coding challenges, how fast you are, and how well your interviewer connects with you in the interview.
I gave 25 phone screens in the span of 1 month and the following is my experience with each of them. You can skip this section if it doesn’t interest you.
1. eBay: Very easy coding question, Leetcode (LC) easy and frequent medium should get you through this. [CLEARED]
2. Prosper: Coding + design round with hiring manager, I just explained my thought process and gave correct answers to the technical questions. Java seems to be the preferred language for Prosper. [CLEARED]
3. Adobe: Straightforward LC questions. [CLEARED]
4. Ripple: I hated this interview as the interviewer gave me a 100+ lines long question, it was lengthy rather than technical and the expectation was to have a running code and with a 100% pass rate. [REJECTED]
5. Checkr: Another interview where the implementation was lengthy, I wrote almost 100+ lines of code to parse a JSON. I wasn’t able to finish the challenge in time. [REJECTED]
6. Intuit: One LC medium-level question and some Q&A, pretty straightforward. [CLEARED]
7. Wish: Again a lengthy question to code, this time I was able to finish in time, but the recruiter asked for another phone screen. I was able to solve the question completely for the second phone screen and still, they rejected me. I did not understand what were they looking for. [REJECTED]
8. Square: One of the best interviews I had, the interviewer was constantly motivating me and helping me to show the right path. He asked me a graph question, I would call it a HARD LC question. [CLEARED]
9. Affirm: Another great experience for me, the interviewer was a junior engineer and worked with me to reach the optimal solution. [CLEARED]
10. Wealthfront: Straightforward Java-related question, they just wanted to test my coding abilities. [CLEARED]
11. Asana: I think this company is great, I failed miserably in this interview. It was a design + past experience question and I didn’t do well due to a lack of preparation for these types of interviews. [REJECTED]
12. Upstart: Round with the hiring manager, he asked me a simple design and coding question. He wanted to test my overall software development abilities. [CLEARED]
13. Instacart: Great company but average interview experience. There were 3 incremental challenges to the same question. I was able to wrap it up within 25 mins. [CLEARED]
14. Robinhood: They outsourced phone screens and I think it was really a bad idea. You might be matched with some random techie in the world, my interviewer actually turned off the camera and went away while I was writing the solution. He also said the working solution is more important than explaining it to him, this totally threw me off and degraded my confidence. [REJECTED]
15. LinkedIn: Great experience, the interviewer asked me LC medium-level question with a twist. I struggled for a bit but finished the solution in time. [REJECTED]
16. Patron: Super lengthy implementation for JSON Parsing, I think the interviewer confused me midway and I didn’t finish the solution. [REJECTED]
17. Facebook: FB recruiters really make sure that you are well prepared before your interview. They generally ask 2 questions, LC easy and medium. I made sure to give a naive solution and then improved it to optimal time complexity. Overall, great experience. [CLEARED]
18. Confluent: Another great company with an unprepared interviewer who was not able to understand the solution I proposed. I wrote almost 100+ lines of code and the interviewer expected me to even write the test cases, I was not able to satisfy one of the corner cases. [REJECTED]
19. Netflix: Very different interview, they are mostly looking for a good team fit and a candidate who understands their culture and is motivated for self-competence. [CLEARED]
20. MapBox: My phone screen was actually skipped after a call with the director of engineering, they were interested in my background and work experience. I feel the company is a little disorganized but has good opportunities for growth in the future. [CLEARED]
21. Coinbase: The interviewer gave me clear requirements and he was with me throughout the interview. He asked me only one LC medium question and a working solution. [CLEARED]
22. Scribd: I felt the interviewer was not knowledgeable, but he was impressed with my solution and we discussed a lot in an hour’s time. [CLEARED]
Take-Home Assessment —
1. Dropbox: Interesting problem, I had to code fast to complete the solution, the logic wasn’t complex but neat and working code was required. [CLEARED]
2. Uber: 4 Coding challenges in 70 mins, solutions were lengthy but there were points for each step, I was able to solve 3.5 problems. [CLEARED]
3. Adyen: OOP-related problem, it was too lengthy and required me to code in IDE, JAVA was preferred. [CLEARED]
4. Sofi: API design problem, I struggled to write REST APIs as I was not into a habit to write Restful APIs. [REJECTED]
I had second attempts for Robinhood, Confluent, and Wish so that totaled 25 phone screens and 4 assessments. I was able to manage all of these phone screens by taking an hour break from my work and at the end, I was so much into it, that I could give interviews for any company at any time of the day.
On-site Rounds
From the above list, I was invited for a virtual onsite by 17 companies and I selected 12 of those. I took 3 weeks off so that I could manage on-site interviews every alternate day. I wouldn’t recommend giving on-sites on consecutive days as it could really be tiring to sit in front of a computer for 5+ hours straight and a bad interview’s effect can easily be cascaded to your next interview if it is consecutive.
In general, on-site rounds are mainly divided into the following sections and each company has its own way to evaluate candidates, but you are in a good position as long as you are prepared for each of the following sections.
1. Greet: Generally, a 15 min meet and greet call with the recruiter to check your internet connection, light, and comfort level. Just be yourself and show that you are excited about the interview.
2. Coding: For software engineering interviews, there are generally two coding rounds. I have not seen any difference in the two rounds, both of them focus on your coding abilities. Make sure to start with a brute force / naive solution and improve it to the optimal time complexity. If you are comfortable coding one LC medium-level question in 30 mins, you should be okay with this round. Some companies often call this a pair programming round, and that makes sense as you should consider an interviewer as your teammate rather than someone who is judging you.
3. System Design: There will mostly be 1 system design round where you are required to address functional and non-functional requirements of the design problem. Make sure you address functional requirements first and get a buy-in from the interviewer before jumping on scaling or improvising your solution. If the interview is virtual, ask the interviewer if you can use the tool you are comfortable with. My favorite is Excalidraw. This round generally decides if a company is interested in hiring you.
4. Past experience: This round may be blended into other rounds, the interviewer might ask you to pick your past project and explain the details and your contribution to it. Do not throw unknown jargons here as the interviewer might decide to grill you more on those. I kept a system design diagram for my project ready so that I could share it and use it as a reference while going into the details. Also, make sure you are aware of the problem statement, development procedure, estimations, team size, challenges, and the overall outcome.
5. Behavioral: This is often treated as a trivial round by candidates, but it’s mostly conducted by senior faculties and they can put either a good or bad remark on your profile about your personality. The interviewer wants to know how you will react to some situations and how you communicate your thoughts to them. Make sure to remember some of your situational experiences from the past to use them as a prop for this round.
6. Q&A: This might be carried out in the hiring manager round, hiring manager might ask you a few questions on your work style and judge if you will be a good fit in his team. Half of the time is also given to you to understand the team and ask more questions. Please keep 2–3 general and 1–2 company-specific questions handy that you could ask in this or any other round to impress your interviewer. I would suggest not to ask questions for which you can get answers from the web or from the recruiters, e.g. is there a work from home option, is there an annual bonus for this position etc.
Here are my on-site experiences,
1. eBay: I wanted to start with eBay as I thought it might be the easiest of all. Unfortunately, the position was offered to someone else and the recruiter canceled my interview and asked me if I am interested in some other position. I didn’t have time and interest, so I just skipped it.
2. Adobe: Everyone on the panel seemed unprepared. The same question was repeated in two coding rounds, I asked to change it the second time. A system design guy came without a thought process and gave me vague requirements to start with. I stayed positive and noticed where I was making mistakes, this was crucial for me to prepare myself for further on-sites.
3. Prosper: Decent coding and system design rounds, I felt I was not prepared and didn’t do my best. Coding rounds were full of technical questions, I enjoyed the conversation with everyone. The hiring manager was friendly and gave me a lot of insights about the company and the role.
4. Wealthfront: I found Wealthfront engineers smart and humble. They asked me Java 8 related OOP questions in the coding round and helped me throughout the interview. The system design round was too easy for me as it was a famous question and I had practiced it several times. The hiring manager was interested in me because of my background and the interview performance. I also got a chance to talk to the VP of engineering which gave me an opportunity to ask him about the future of the company. The recruiter and hiring manager also gave me enough time to complete the rest of my interviews.
5. Affirm: Coding questions were unique and brilliant; I think I would have failed if I hadn’t practiced coding that much. I really enjoyed the system design rounds in Affirm, interviewer gave me a unique situation and we brainstormed the solution together. Overall, I felt everyone in affirm were welcoming and excited in general (maybe due to their recent IPO :))
6. Square: All of my experiences with Square’s coding round were great, I think the interviewers were talented and interested to show me the right path. The system design was the only interview where I struggled to communicate with the two interviewers. They seemed to be asking from a set of questions that they had and didn’t show much interest in exploring other aspects. Coding questions definitely had a quality and I felt confident after the interview. Moving from PayPal to Square didn’t make much sense to me, but I was still interested to work with the talented people Square had and the innovative products they come up with.
7. Upstart: Interview questions were pretty average, there was just one coding round, one system design, one application development, and a hiring manager round. Coding and design questions were pretty straightforward. The application development question had a prerequisite to be ready with a boilerplate code, fortunately, I had a working code for RESTful APIs and a database connection. This helped me to excel in that interview and the interviewer told me that no one was able to reach the point I did. Overall, I had a positive experience from this interview.
8. Instacart: Onsite coding rounds of Instacart were similar to phone screenings, there were 3 incremental challenges to the same problem and the task was to finish all of them. Unfortunately, I misread the requirements for one of the challenges and that ate up a lot of time and I wasn’t able to complete the solution. The system design round was boring, the problem was not big enough to discuss for 45 mins and I guess the interviewer was looking for specific answers. The behavioral round was average, the guy asked me a set of questions and didn’t show much interest in the conversation, I felt like I was talking to a robot. I had high hopes from the interviews and the company, but I think my interview went bad.
9. Facebook: The process was streamlined, each round was 45 mins and they finished within a blink of an eye. I was determined to give my best and made sure to solve everything at a rapid speed. 2 coding rounds had 2 LC medium-level questions, the goal was to make sure you write a solution that will work and make sure that the interviewer is convinced. I didn’t need to actually execute the code, and interviewers told me to ignore syntax errors and assume the existence of method definitions, which simplifies things. The system design round was interesting, I was able to give the solution for all functional requirements, addressed non-functional requirements, and also communicated my thoughts to scale further. The behavioral round was good as well, the interviewer asked me a set of questions, observed how I communicated, and noted all of my answers. Overall, this experience was way better than I expected.
10. Netflix: Everyone will agree that Netflix interviews are different. I spent almost 3+ hours on the culture memo and used its reference in most of my answers. I was very impressed with the hiring manager and that helped me to start on a positive note. I was not required to actually code in the coding round and the interviewer was okay with pseudo code, he asked me several questions and captured my thoughts on the implementation. The system design round was just the back and forth communication, I thoroughly enjoyed this round. There was another round on my past experience, and I think it wasn’t good for me. PayPal’s payment system is pretty complex, and the interviewer took a lot of time to understand it, I think I could have simplified it a bit. Furthermore, there were two rounds with the Director of engineering and product, I guess both were okay for me. Overall, I was really impressed with the people at Netflix and would love to work with them in the future.
11. Scribd: Very easy interview, I think I would have cracked it without any preparation. Coding rounds were a piece of cake and I think I was overpowering the interviewers. System design rounds were okay too, I was able to communicate well and address most of the problem requirements.
12. Coinbase: I wish I would have given this interview, but I backed out as I was happy with the other offers and made my decision at this point.
Offer Selection & Negotiation
I didn’t think of getting more than 2 to 3 offers but I received a total of 6 offers after my on-site rounds. Here is what I was prepared with for negotiations.
1. Calculate your current total compensation (TC) correctly, use this calculator.
2. Decide on how much hike are you expecting, I assume people target a 15 to 20% hike while switching companies.
3. Know different components of your salary/offer: Base Pay, RSUs, Annual Bonus, Sign-On Bonus, 401K Match, ESPP Benefit, Stock Options for start-ups.
4. Know the level you are offered at the company and what is the maximum pay for that level. Use levels.fyi for pay comparisons across different companies.
5. Evaluate the role vs salary compromise you are willing to make.
6. Prioritize the companies before hearing their offers.
When a recruiter calls you to give good news, always try to ask for your interview feedback, most of them will share it. If you get a feeling that the feedback was very positive, you can aim to negotiate for the best they can offer.
Some companies won’t offer higher pay but may have good growth potential, you can do your own research on the company and decide if you are willing to take a risk on the RSUs that they are offering. You might also want to consider the role/level offered to you, if it’s something that excites you, it probably makes sense to take it with a bit less pay.
My top companies were Confluent, Robinhood and Instacart due to their growth potential and the role they were hiring for. Unfortunately, I was not able to secure an offer from any of them. My second preference was a fintech company if they would have offered me a competitive salary.
I got offers from Affirm, Upstart, Wealthfront, Scribd, Facebook, and Netflix (contingent). Affirm and Upstart offered the same TC of what I was currently making at PayPal, I thought of negotiating with them after hearing the other offers. Wealthfront and Scribd offered stock options portraying a much higher valuation in the future, I didn’t do much research on how stock options work but please do if you want to consider joining a start-up. Netflix did not offer the role I interviewed for but told me that I am a good fit and they will move ahead with an offer after finding a suitable team for me. Finally, Facebook offered way beyond my expectation and with my research, I figured that it’s actually the best they could offer.
I chose Facebook for the following reasons
- Higher pay
- Freedom to join any team in FB family
- Facebook brand value
- Global presence of the company
- Lower P/E ratio (28) at the time of joining
- Other offers were not worth taking the risk
Post Procedure
I think the real journey starts from this point, cracking the interview doesn’t give you a penny, performing well in your role actually realizes the compensation you were offered.
I took a nice 2-week break before jumping into my next role. I know there will be a lot of expectations from me and I need to justify the salary offered to me. I continued learning about the tech stack of FB, new technologies and contacted my friends at FB to help me with a smooth onboarding.
I hope this post helps you to get a good idea of what to expect in your onsite software engineering interviews…