Coding Interview Advice from a Software Engineer at Microsoft
Intro
Hackpack founder Daniel Habib interviews Hackpack alumni Leo, who has just secured a position with Microsoft. They discuss Leo’s path to becoming a big tech software engineer and the obstacles that he faced along the way.
This interview is rich in advice for software engineers aspiring to secure a job in a big tech company. Throughout this article, a self-made Microsoft software engineer, Leo, will describe the hurdles and triumphs that he endured to obtain his position, as well as how having a community of like-minded individuals and mentors benefited him on his journey.
When Did You Decide to Become a Software Engineer?
Leo explained that he became a software engineer in 2005 when he was just 18 years old in Brazil, having just begun attending university and completed a .NET course.
Leo then began his programming career by joining a Microsoft partner company for one year, where he became very passionate about working with Java. He began studying Java in parallel with his work and passed two Java certifications during his time with the company.
Halfway through Leo’s time studying information systems in university, he began receiving a lot of job offers, and decided that it would be in his best interest to drop out of college and start working right away. At this point in his career, Leo was working as a software consultant, saving up money so that he could move to Canada and learn English.
Experience With Ericsson
After having fully mastered reading, writing, and speaking in English, Leo returned to Brazil where he completed his degree in information systems and subsequently received an offer to work for Ericsson in Ireland.
He describes the Ericsson work site as an elaborate campus where approximately 600 like-minded engineers thrived and worked together, located in a small town an hour and a half drive from Dublin. Leo very much enjoyed his time with Ericsson; however, he became bored of the small-town life and wanted to experience the big city in Ireland, which brought him to Dublin.
When Did You Start Shifting Your Focus Towards Working in Big Tech?
Inspecting Leo’s journey, Daniel asks Leo when he began shifting his focus towards working for a big tech company. Leo explains that he had always thought that he had no chance at having a career in big tech, and assumed that these companies would only hire graduates from elite colleges in the U.S.
When Leo was contacted by Facebook for an interview in 2019, he realized that, with all of his experience, there is no reason that he would not be able to secure a job in big tech. Unfortunately, he didn’t get an offer, but the experience and confidence that Leo gained from making it to the onsite interview with Facebook would prove invaluable.
Early Obstacles
A year or so later he applied again to several different companies and got interviews, but they did not end up going as well as he had hoped. Reflecting on what went wrong, Leo noticed that he would get hung up on the things that he didn’t normally see in his day-to-day work, and topics from university that he could not fully recall.
Daniel acknowledged this and highlighted how there are a lot of programmers who become disenchanted with the process of landing a position in big tech, noting how interviews test candidates on fundamental and math-heavy topics that they may have never seen in their decade(s) of software engineering experience. He further explains that this mentality stops some people from even trying, but candidates must accept that this is the way things are.
Leo explains how people learn best at their own pace, and in order to successfully acquire a position in this field, they must take the time to learn and practice frequently asked interview problems and not succumb to the aforementioned mentality that the process is too difficult. Daniel describes how when people pursue these jobs, they notice and accept that there is a ‘game’ afoot, and candidates must play the game instead of trying to change it.
Most Useful Tools
Reflecting on the very beginning of Leo’s journey, Daniel asks what tools were most useful to him when he was just starting to prepare for interviews. Leo first discusses Leetcode, which first challenged his efficiency and made him aware of programming errors to which he was susceptible. He also highlights that even while having years of experience being a software engineer, he still learned many new things while preparing for interviews and doing Leetcode problems that he now leverages at work today. Another tool Leo found particularly useful was the book Cracking the Coding Interview by Gayle Laakmann McDowell, which helped him learn how to most efficiently solve interview problems.
Furthering this reflection, Daniel poses the question to Leo if he could give himself a piece of advice when he was beginning his interview prep, what would the advice be? Leo’s answer was to focus on the fundamentals. He explains that having a solid foundation of fundamentals prepares you for the wide range of possible problems that may be thrown at you.
What Resources were Essential for Mastering the Fundamentals?
Following up, Daniel then asks what resources were essential for Leo when mastering the fundamentals and why they were so useful. Leo reiterates the usefulness of Cracking the Coding Interview and highlights how the book describes what fundamentals to focus on. Furthermore, Leo again harped on grinding Leetcode problems and ‘keeping those muscles warm’, as well as reading through The Algorithm Design Manual by Steven Skiena and completing exercises there. Elaborating on Leo’s answer, Daniel points out that practicing implementing a data structure from scratch gives you a lot of background knowledge and depth to lean on when you have no idea what to do.
Biggest Roadblocks
Stepping back, Daniel asks Leo what topics posed the biggest roadblocks for him and were the most challenging to master.
Data Structures
Leo said that he encountered the most trouble in chapter 3 of The Algorithm Design Manual, which focused on data structures. Daniel acknowledges the potential difficulties in complex data structure questions but furthers this conversation by probing about another one of Leo’s struggles, which was Dynamic Programming.
Dynamic Programming
Specifically, Daniel asks what obstacles Leo faced when he started DP, and how he overcame them. Leo explained that initially he was very intimidated by the difficulty in Dynamic Programming and was reluctant to have to learn about it.
However, he soon realized that ‘you must learn to love something that you hate’, which was the mentality that eliminated his apprehensions and encouraged him to take on the challenge.
Leo also mentioned another resource that he found useful when studying DP, which was the book Grokking Algorithms by Aditya Y. Bhargava. Furthermore, Leo explains that the learning process, especially for difficult subjects like DP, takes time and information does not become truly ingrained in one’s mind until they have spent days studying and refamiliarizing themselves with the material.
Interview Loop
Moving on from Leo’s preparation for interviews, Daniel inquires about Leo’s experience as he first began interviewing with companies.
Covid Struggles
Leo recalls that he first applied for a staff position with Coinbase. He had passed the first round, but when it came time for the onsite interview, his interviewer contracted COVID-19 and was unable to interview him on their originally scheduled day. Leo reached out explaining that he had his wedding in two weeks and would not be able to do the onsite interview for another month but received no reply from Coinbase.
Daniel remarks that he has heard of this happening with candidates at Coinbase, but preached to not let those things distract you too much. Daniel explains that companies are well within their rights to ‘ghost’ you and that the company will always side with their recruiter, so it is best to just send a follow-up email and hope that they reach back out to you.
How Did Your Perspective Change As You Interviewed More?
After Coinbase Leo moved on to apply for positions with other big tech companies, and Daniel asks how his experience changed as he interviewed more. Leo first notes how he stopped taking the feedback that he received from interviewers personally and rather focused just on how to improve his coding. He had acknowledged that other than your ability, there are many factors out of your control that determine whether you will get the job, so at the end of the day, it is best to focus on doing all that you can.
Hackpack Community
Leo also points out how joining the Hackpack community helped him to be as prepared as he could and to stay fresh, as well as keep his hope for landing a job in big tech alive.
Application Procedure
He then recalls how he heard about an opening at Microsoft from a friend who disclosed that there had been a new vacancy in his team. Leo decided to give it a shot and see how far he could make it in their interview process, applying for two open positions with Microsoft. While undergoing the interviews with Microsoft, Leo also applied for positions at Reddit and Docusign to give him a better chance.
Reddit Interview Questions and Experience
Leo recalled how Reddit was very quick in communication and got his interview process off to a fast start. Within a week Leo had passed his first screening interview with Reddit which was only on systems design and made it to the onsite interview where he, unfortunately, did not pass.
He recalls that Reddit’s onsite interview questions had 5 parts, 2 of which were focused on systems design, and another 2 were coding questions. Leo explains that the coding questions were different from Leetcode problems and that he felt that even the interviewers weren’t prepared as there were unavoidable errors when solving their own proposed interview questions.
Apple Interview Questions
Leo also recalls applying for a position at Apple in November of 2021, but he did not pass the phone screening. He recalls that he was asked to implement a score system, when to use a concurrent hashmark, how to use concurrency and a lot of multi-threading questions.
Docusign
He then began his process with DocuSign, passing their coding interviews, then their system design interviews, and then behavioral interviews to ultimately receive an offer from them.
Microsoft Interview Questions and Experience
Leo then goes on to discuss his Microsoft interview questions and the Microsoft interview process. He recalls how he was applying for two different positions, and even though they were at the same level, the two interview processes were completely separate but similar. He also notes how one of the Microsoft interviews had 3 general coding questions (not specific to data structures) to be done in 2 hours, which he did very well on.
He then recalls how the onsite was composed of three interviews: one of which focused on coding, another on systems design, and another on general systems design. He also mentions that there was a final behavioral interview. Leo then notes how the interview process for the security team was similar in that he had an initial chat with the manager, then a systems design interview, another systems design interview, and a data structure test.
Hard Work Pays Off
After months of hard work, Leo’s efforts finally began paying off, as he received offers from both positions that he applied for with Microsoft. Knowing that this was still not the end of the process, Daniel asks Leo where he went from there. Leo was interested to see if he could actually get the two teams to compete with each other on Total Comp, but unfortunately, they just gave him the same offer for both positions. Leo ultimately decided to go with the security team and entered negotiations with them.
Negotiations
Using the leverage of his competing offer from Docusign, Leo was able to negotiate with Microsoft into increasing his compensation and increasing his level in the company. Daniel notes that this is a huge takeaway: everything is negotiable, even things that may appear to be set in stone.
How Powerful of a Tool is a Competing Offer in Negotiations?
Daniel also notes how powerful of a tool a competing offer is, and asks Leo for any advice that he may have for someone entering negotiations with two offers. Leo explains that having competing offers gives you a lot of confidence in negotiations, and to not be afraid to ask for more if you feel that your work deserves it.
What Tone Do You Establish in Negotiation Emails?
Furthering this discussion, Daniel asks Leo what tone he tries to set in his negotiation emails. Leo describes that he wants to appear very interested in the position, but also wants to make it clear that it is a very important decision in his life and there are other people in his life that will be affected by his decisions. Daniel adds that even if you do not have a competing offer you can still negotiate, but you just have less leverage.
Daniel makes a key point noting that as long as you strike the tone of your email correctly when trying to negotiate, the hiring manager(s) will not pull the offer off the table just because you tried to better your compensation, they will just say that they cannot do that and leave it up to you. Ultimately, he says that negotiating is a much lower risk than people may think.
Interview Prep Time Wasters
Shifting gears a little bit, Daniel asks Leo to look back on his interview preparation and try to identify anything he may have been doing that turned out to be a waste of time. Leo replied that although some topics may be more important to be studied, everything that you have learned will only go to enrich your knowledge. So there wasn’t anything that Leo did that he could confidently advise others, ‘Don’t do this’.
Mock Interviews
Leo then goes on to mention that everyone should do mock interviews in their preparation, spurring Daniel to ask how many mock interviews Leo did.
Leo said that he completed 5 mock interviews during his preparation and that they were very helpful in showing him how to confidently present himself and clearly convey his thoughts in an interview. He further preaches that mock interviews are a way that all candidates should prepare for their interviews because of the specific feedback that is given to them. Not everyone will have the same struggles in interviews, but when you can receive advice that is tailored to your interviewing weaknesses it goes a long way in helping you prepare for the actual job interview.
Key Advice
Daniel then asks Leo what other key pieces of advice he has for people who are preparing for big tech interviews. Leo first says to understand that the learning process is not linear, and to give yourself sufficient time to absorb the information you need to learn. He also mentions that rest is important and you need to take breaks to do things for yourself to prevent burnout.
Furthermore, Leo notes how we are the worst judges of ourselves, and having a mentor who sees your progress and can reassure you that you are on the right track, is very helpful in keeping you motivated. Since your evolution in software engineering will be gradual you may not notice any progress in your abilities in the day-to-day, having someone who has seen exactly what you have been able to do from the moment you entered Hackpack to any point in your preparation allows you to know exactly where and how you’ve grown and what you still must do better.
Daniel notes an issue that he has been seeing with people preparing for interviews in the late stages of their studying, at a point where they have a lot of information in their minds, but they cannot immediately recall perfect answers to randomly selected interview questions when quizzing themselves. This frustrates people, but Daniel notes how this is part of the preparation experience, and that all you need is more practice. Daniel notes that at this point you have already made it over this huge hump of ingesting all of the information that you need to know, but now you must let it sit, then revisit it, rephrase it, and rearticulate it.
One thing that Daniel has found helpful for people is having them record interviews of themselves, that way they can see where they stutter or hit walls, and identify types of interview questions that you may need more practice with.
He further acknowledges that there are many topics people get stuck on, as well as phases of their preparation, but showing up every day is important as it adds up and only works toward your goal, even if you can’t give 100% every day.
Leo adds in noting that oftentimes people will compare themselves with others, but rather they should compare themselves with themselves a week ago, to ensure that they are on the right track and doing the right thing. He explains that when comparing yourself with others, you may be jealous that someone can do things that seem difficult to you very easily, but you do not know this person’s background and experience, making comparisons unfair.
Leo also recommends applying for more interviews to see how far you can go and get practice solving unique interview questions. This gives you confidence and makes you more familiar with the unique types of interview problems that you cannot find on leetcode or anywhere else. Daniel strongly agrees and notes that protecting your own mental health and being kind to yourself is very important.
Questions from the Live Audience
At this point in the interview, Daniel and Leo ask those watching the live interview on zoom to send in questions and they will answer them.
What Role Did Networking Play in Getting a Job?
Leo explains that he has had a lot of experience so he usually does not have problems getting interviews, but rather had difficulty passing interviews, which networking will not help with. He further explains that networking can definitely help you get interviews for open positions, but ultimately the hiring manager or recruiter must see that you have the ability necessary to fulfill the position.
Leo also notes how networking is important in staying up to date on tech, and how attending tech events will help expand your network. Daniel agrees and notes how if you are having trouble getting interviews, then networking could help you get your foot in the door with some companies, but once you get the interview you just need to focus on passing, as that is all they really care about. He also highlights how networking is definitely not a dealbreaker.
What Would You Do the Night Before an Onsite Interview?
Leo notes how you will never feel 100% prepared, and to try to cram random topics the night before is futile. Daniel preaches that anything you try to cram the night before isn’t going to stick in your memory.
Daniel says that the best approach rather is to take a run and take your mind off of things and focus on getting a good night's sleep. He notes that a lack of sleep before an interview can be detrimental. Leo recommends chamomile tea to keep you alert but calm.
Leo’s journey to becoming a software engineer in big tech is certainly unorthodox, but it goes to show that through consistent hard work, remaining dedicated, and setting attainable and notable goals you can accomplish anything.
Join the community
Looking for a study partner? Hackpack is the most active community. of engineers studying for programming interviews. We hold each other accountable, provide support, and fight burnout to study more efficiently and get the job faster.
You can apply on the site.
Big Tech Interview Prep Newsletter