Microsoft India Senior Software Engineer L63
Summary
I applied directly for a Senior Software Engineer L63 role at Microsoft and underwent several technical and managerial rounds. Despite successfully navigating algorithm-based coding, system design, and behavioral questions, the hiring manager raised concerns about my years of experience, ultimately suggesting a role downgrade.
Full Experience
Microsoft India Senior Software Engineer L63 Interview Experience
I applied directly via the portal for a Senior Software Engineer (L63) role. The interviews were scheduled to be conducted within a single day. The recruiter initially shared invites for the first two interviews, and upon clearing those, I received invites for the remaining rounds.
Round 1: Data Structures & Algorithms and System Design Discussions
This round started with a coding problem:
- Problem: Given a list of packages with dependencies, where
dependency[i] = [a, b]means package 'a' requires package 'b' to be installed before it. I needed to provide the order in which these packages would be installed.
Since I finished the coding problem early, the interviewer moved on to some open-ended system design discussions. We covered:
- How to reduce system latency.
- Strategies to handle high throughput.
- Techniques to improve scalability and fault tolerance.
Round 2: Custom Trie Problem
The interviewer spent the first 15 minutes discussing a complex problem I had solved previously, focusing on how I identified the issue and arrived at the solution. Following this, I was given a coding problem:
- Problem: Implement two functions:
addWord(string word)to add a word to the dictionary, andgetWords(string pattern)to return the three lexicographically smallest words that start with the given pattern. - Follow-up: Handle cases where the pattern contains a dot (
.), representing a wildcard where any character (a–z) can appear at that position. The solution still needed to return the three smallest lexicographical matches efficiently.
Round 3: High-Level System Design (HLD)
This round focused on High-Level Design. I was asked to design a Key-Value store similar to DynamoDB. The interviewer was excellent, engaging in a collaborative discussion rather than a direct interrogation. He listened closely to my responses, asked probing questions, and explored alternative approaches and in-depth concepts. I truly enjoyed this round, despite feeling nervous with all the questions. The interviewer gave me positive feedback, mentioning I had good knowledge of system design, which made my day.
Round 4: Hiring Manager Round
The hiring manager reviewed my resume and noted that I had less experience for the L63 role. They quickly asked if I was open to a downgrade. I was asked to describe my strengths and weaknesses from the perspective of my manager, peers, and myself. Additionally, I had to draw a detailed diagram for one of my current projects, including its throughput, latency, and other relevant details. We also discussed the project in depth. Generic questions were asked, such as the difference between a thread and a process, an explanation of the CAP theorem, and some network protocol-related questions.
I felt I answered all questions fairly well. However, at the end of the interview, the hiring manager provided feedback that I might not meet the bar for L63 and reiterated the question about considering a downgrade. This felt quite disheartening after performing well in all the preceding rounds, to be low-balled due to my years of experience.
Interview Questions (9)
Given a list of packages with dependency on other packages. You need to provide the order in which you would install these packages. The list of package was such that dependancy[i] = [a, b], which meant that package a requires package b to be installed before it.
Problem link provided for reference: https://leetcode.com/problems/course-schedule-ii/
Discussion on techniques and strategies to reduce system latency.
Discussion on methods to handle high throughput in a system.
Discussion on techniques to improve system scalability and fault tolerance.
Implement two functions: addWord(string word) which adds the word to the dictionary, and getWords(string pattern) which returns the three lexicographically smallest words that start with the given pattern.
Follow-up: If the pattern contains a dot (.), it represents a wildcard where any character (a–z) can appear at that position. We need to handle this case efficiently and still return the three smallest lexicographical matches.
A similar problem link was mentioned: https://leetcode.com/problems/implement-trie-prefix-tree/
High-Level Design (HLD) for a Key-Value store similar to Amazon DynamoDB. The discussion focused on the design principles, alternatives, and in-depth aspects of such a system.
Discuss strengths and weaknesses from the perspective of my manager, peers, and myself.
Explain the difference between a thread and a process.
Explain the CAP theorem.