Data structures, algorithms, system design, have you ever wondered what big companies like Microsoft ask when you try to join as a senior developer?
Index
I wasn't planning on making this post, but a while ago I was talking in a podcast with a colleague, this topic came up, and I talked about what happened to me specifically. The clip went viral and even made it to trending topics so I decided to expand on it.
I'm going to explain not only which steps you need to follow and what each interview is like, but also how things went for me in particular.
1 - Applying for the job
Microsoft, like many big companies, has both a website where you can apply and also employees or external companies actively searching for candidates that fit their needs.
The website is: https://careers.microsoft.com/v2/global/en/home.html
One thing to keep in mind at Microsoft is that entities (or whatever they're called internally) are completely independent. That means if you work for Microsoft Ireland and want to move to Spain, you can't just request a transfer, you need to apply for a new role and go through the whole selection process from scratch.
The same goes for moving to Seattle or any other office, they're entirely independent.
In my case, I sent my CV in April 2024 and that was that for a while.
2 - Hiring manager
Months later, around mid-September 2024, I got a message saying they liked my CV and wanted to interview me.
That same afternoon we have a call, he explains a bit about the process, the position, and we talk about my CV and how it fits at Microsoft.
Everything goes well, and they send me the next step in the process: the coding test.
3 - Microsoft code test for senior software engineer
We could say this is the first real interview, although technically it's the second step and nothing's really happened yet.
This is the typical step where they send you a problem to solve at home. Specifically, Microsoft sends you a link to the Codility platform where you'll get two problems, the second clearly harder than the first.
You can expect any sort of question similar to those on Codility, LeetCode, or HackerRank. You get an hour and a half, and you must code directly in the platform itself, which is usually a pain because most of these platform editors are not great.
Four years ago I had an interview with Microsoft and this is where I failed, in fact I have a video on it (https://youtu.be/Ltd5nteVSEc). I failed because my solution's performance wasn't optimal (it worked, but the performance tests took too long), and the feedback was to not use LINQ, Microsoft's own library for working with collections. So I had this in mind already.
In my case I had two similar problems to these:
Robot room cleaner - https://algo.monster/liteproblems/489
Parallel courses https://algo.monster/liteproblems/1136
You could put one in the medium group from LeetCode/HackerRank and the other in the high difficulty group.
From my point of view, they aren't as simple as what you see on LeetCode, they make them harder with their statements. My guess is this is to keep people from using AI to solve them. But anyway, if you do advent of code every year, any coding challenge you get will be simpler than those.
Once you submit your solution, you won't find out if you passed or not until Microsoft shares it, on the site there are two or three test cases, but internally they have many more, including performance ones. So even if everything shows green at first, you might still not pass.
In my case, I thought I didn't pass, but by mid-November, the recruiter from Microsoft told me my code was good and I had to do the next part of the process the next day or so.
To be clear, it was over 60 days from when I took the test to when they got back to me with the result.
4 - Second round of the Microsoft process
This part of the process is split into three parts, all happening on the same day. You do all of them regardless of how you perform in each. The order can vary.
These parts are:
4.1 - Microsoft technical coding interview
This interview focuses on solving a problem similar to the one in step 3, but at medium or hard level. For me, it was clone graph, a common exercise you’ll see on these platforms.
https://leetcode.com/problems/clone-graph/description/
During the interview you’re pair programming with another Microsoft developer, whom you can ask questions to, and if you get stuck, they’ll give you hints to keep moving. Treat them as you would a coworker while solving a real problem together.
An important part of these interviews is to mention and cover edge cases, those that happen rarely but can still occur.
And just like in the take-home test, you need to aim for the most optimal solution, they have more internal tests than what you see.
If you know the solution by heart, these problems can be solved in ten minutes, so there’s plenty of time, even to start with a suboptimal solution and gradually improve it. That’s not a negative, as long as you don’t get stuck.
I recommend reviewing or knowing how to work with graphs, trees, arrays, and when in doubt, use a hashmap.
4.2 - Microsoft object-oriented programming interview
For me, this was the weirdest one because I didn’t know what to expect. Honestly, I thought it would be an hour of object-oriented programming questions.
But no, it's really about designing an application, not a system, that comes next, but an application applying OOP principles.
A clear example would be a parking lot or a library. You need to think about the entities and the relationships between them. The system’s actions and how they’re carried out, user actions and what effects they can have, etc.
During the interview, you’ll get questions and have to adjust your implementation as you go, and you’re expected to ask questions, too.
The main goal of this interview is to see if the candidate can design maintainable, extensible, and clean software, as opposed to the focus on optimization and performance in the other interview.
4.3 - Microsoft system design interview
The system design interview is done using a whiteboard, or what’s called a whiteboard exercise. In this case, you don’t write code, you explain architectures and their components.
Basically, you need to design a web application from scratch, and the question will be something like a messaging app, or an app for reviews and critiques similar to Google Reviews or TripAdvisor, both examples can be found in my book Building Distributed Systems.
There are several key points to this type of interview. First, and most important, is that there isn’t a single right answer, so everything has pros and cons. This means you must communicate with the interviewer at all times about what you’re thinking.
Something as simple as placing a queue somewhere, you don’t just say “I’ll put a queue here,” but rather, “I’ll put a queue here for reason X so we can do Y more efficiently or to make it scalable.”
Split the application and your reasoning, do you use serverless? If yes or no, why? The idea is to keep a constant conversation as you design, justifying every decision you make.
If you focus too much on tiny details, you’ll be told to speed up so you don’t spend the full 45 minutes on that, as many people make the mistake of focusing too closely on the small stuff.
Always think about scalability and be sure to mention it in every decision, that can be key.
And, after a while, in my case, I had an answer 25 days later.
5 - Behavioral interview
If you pass the previous rounds, you’ll get to the Behavioral Interview. From what I’ve heard, not every team/org does this, but in my case they did.
In this interview, you have to sell yourself as an engineer who solves problems, not just someone who does whatever tickets you’re told to do.
They’ll ask you questions about your past, with your CV in hand, like explaining problems you’ve had and how you solved them or what you learned from them.
When was the last time you messed up at work? Maybe you haven’t in a long time, depending on your current company’s testing level, so try to remember, because in this situation you can’t reply with something like “I never deploy bugs to production” or “my code never fails,” because not only is it not true, it’ll make you fail this interview.
Of course, they’ll also ask if you’re capable of adapting to unexpected changes. Like if a requirement changes at the last minute, or if you had to learn something fast to implement a solution.
The recommendation for this type of interview is to use the STAR method (Situation, Task, Action, Result). That means telling a story to explain the situation, stating your responsibility (task), describing the specific actions you took (action), and finally, the result. The idea is to focus on what YOU did and learned. Personally, I don’t care for this method, as I see it as teamwork, but companies like it so that’s just how it is.
6 - Offer
If you pass all the interviews and a team wants you, you’ll get an offer.
In my case, in January 2025 I got a message saying my application was not selected. I asked the internal Microsoft recruiter and he told me the reasons field was blank in the system.
Two days later a lot of people were laid off, so personally I connect the two and think that’s the reason, but I’d like to know for sure. But if the internal recruiter said no reason was given, I guess nobody will ever know. And since it only matters to me, that’s how it goes.
After a process that lasted from early April 2024 until late January 2025, I can’t expect much more.
Overall, a pretty bad experience as a candidate, to be honest.
If there is any problem you can add a comment bellow or contact me in the website's contact form