How I prepared for Tech interviews at FAANG / MAMAA / GAFAM in Japan
Recently, I was lucky enough to go through the interview process at some of the largest tech companies around the same period: Google, Amazon, Microsoft, Apple. There are already many articles and videos talking about the interview experience at these companies, but I’d like to talk about my own experience and preparation specifically for the positions in Japan. I hope this article helps anyone who is preparing for Software Engineer interviews at GAFA/GAFAM in Japan as well as those preparing for the interviews at large tech companies in other countries. Note that I cannot disclose any actual questions asked due to NDA.
TL;DR — the interview process for Software Engineer positions in Japan is mostly the same as in other countries but some interviews might be conducted in Japanese for positions requiring Japanese proficiency.
In Japan, GAFA/GAFAM is a more popular acronym than FAANG which represents Google, Apple, Facebook, Amazon, and Microsoft
Background
I have 10 years of professional experience working as a Software Engineer, mostly in the backend. After graduating from college in North America with a Software Engineering degree, my first full-time job was in Japan and all my career has been software development in Japan. My Japanese level is somewhere between business and conversational. I changed my job a few times over my 10-year career, so I already have some experience going through the tech interviews. I had already gone through the Software Engineer interviews with Google and Amazon before (and got rejected), so I knew what kind of questions to expect, in general.
Applying for jobs in Japan
I was introduced to a position at Amazon by a recruiter in 2021. I was not actively looking for a job at the time, but I always dreamed of working at one of the global tech companies and decided to give it a try. I also thought that, since all FAANG and other large tech companies ask similar interview questions, I decided to apply for positions at other tech companies as well. I applied to Google, Microsoft, and Apple via their company career page. Note that all of the positions I applied for are for Japan (I wanted to apply for the rest of the FAANG: Facebook, and Netflix, but they don’t seem to have engineering positions in Japan). I expect these companies receive tons of job applications online and I have received many rejections before with cold online applications, so it was to my surprise that the recruiters from Google, Microsoft, and Apple contacted me for the invitation to their interview process.
Preparation
Most of the recruiters were supportive to explain the interview process in detail, and from my own experience and the internet, I sort of knew what the tech interview questions consist of on a high level: whiteboard coding, system design, and some behavioral questions. I practiced on InterviewCake and LeetCode a couple of years ago when I was looking for a job last time, so I had a general idea of what to focus on. I decided to use Python for all coding interviews to take advantage of its conciseness when explaining my solution, especially with a limited time.
I only had about three weeks or so to prepare for the technical interviews, so I had to prioritize what to study. For coding problems, I decided to focus mostly on LeetCode easy level problems and some popular medium level ones, but concentrate more on the variety of problems (string, array, tree, graph, etc) hoping that I can build upon the base idea if I get asked medium/hard level questions. I found InterviewCake to be tremendously helpful in understanding the concepts behind the patterns of coding problems — it’s worth the upgrade to get access to the full course because they indeed give you a full refund if you are not satisfied for any reason (I’ve done it before in my previous job search). I recommend LeetCode for the number of problems they have for you to practice and the company-tagged questions proved to be useful. Aside from going through a list of problems, I recommend drawing a mind map of common types of coding problems and common solutions to help recognize patterns during the interviews (e.g. did I consider hashing/sorting/greedy algorithm for array problems?). A lot of times, whether you’re able to solve a problem or not depends on how quickly you can recognize these patterns — yes, interviewers do look at your thought process but being able to recognize patterns quickly will only help you succeed and be confident about your approach.
In the end, I went through all the materials on InterviewCake and I was able to solve about 109 LeetCode problems as shown below. The amount of practice you need to be confident about the coding problems varies by person but it wasn’t enough for me — however, this is the best I could do given the timeframe.
The System Design Primer was my go-to resource for system design problems. After reading through some of the problems, I found that there is a pattern for each type of problem, and a list of topics to go through regardless of the type of problem (e.g. clarify scope, use cases, number of users, req/s, input validation, trade-offs of alternative approaches, etc). Since all the on-site interviews are conducted virtually due to COVID-19, this list can be referenced during the system design interview to make sure I covered all I planned to cover. There is no perfect answer, but it also means I gotta give it my best and try to cover as many topics as possible to support my technical suggestions with convincing rationales. I found studying system design problems to be quite useful for actually doing the job, and hence I enjoyed studying it more compared to coding problems.
The last part, but not least, is preparing for behavioral questions. I have notes I have taken and updated over my career to go through the basics such as walking through my resume, why I’m looking to switch, and what I want to do in the future. This would’ve been enough for most of the interviews, but I had to prepare for a specific problem set for some of the companies, especially Amazon. They focus heavily on these behavioral questions and ask questions based on their Leadership Principles. I had to come up with stories from my own experience that demonstrates these Leadership Principles. Other companies, such as Google, have a behavioral round but even the recruiter said it is not as important as other technical rounds, and that candidates usually pass unless they show some red flag during the interview.
Again I only had about three weeks to prepare, and therefore I did not have enough time to go through the whole study materials which I would have gone through if I had more time: Cracking the Coding Interview, Curated List of Top 75 LeetCode Questions.
Interviews
My first interview was with Amazon, so I started preparing specifically for Amazon Interview.
Amazon
One major difference in their interview style from other companies is the emphasis on the behavioral questions that reflect their Leadership Principles. I even had a separate session with HR to go through what to practice for these rounds; I was advised to come up with several success & failure stories from my past work experience that either show or lack certain Leadership Principles and what I learned from it. Also, they won’t ask these Leadership Principles directly but are disguised as the usual behavioral questions.
- A total of 3 rounds: initial phone screen, coding round, virtual on-site interview loop rounds split over 2 days
- Relatively easy coding question (LeetCode easy level)
- I had to prepare quite extensively for the behavioral questions that show specific Leadership Principles as each interviewer is assigned to assess two of the Leadership Principles
- Considering the number of rounds, the whole process was finished slightly within a month so it was relatively quick.
Apple
Then I got invited for an interview with Apple for a position I applied for online. Unfortunately, I did not get so far.
- Rejected after an initial phone interview. There was not so much technical discussion but more about why I applied for the position, what I’m doing in my current role, etc, so maybe the manager did not like my explanation of my background or motivation for the position.
- I got the feeling that the interview process is different per team, but they look at the team fit as well as technical competency.
Initially, I applied for a slightly different position (TSE) online because there was no Software Engineer position available in Japan at the time. After a casual chat with the recruiter, they said I could still go through the general Software Engineer interview process and get matched to a team in Japan once it becomes available since the offer will be valid for one year or so. I did that and went through the process with a different recruiter. Previously I had an interview with Google a couple of times, and this time they allowed me to skip the initial phone round and go straight to the (virtual) on-site round. I said yes to skip as I had so many other interviews lined up and wanted to reduce the burden as much as possible.
- Virtual on-site rounds consisted of 3 coding rounds, 1 architecture round, and 1 behavioral round, split over 3 days
- The coding rounds were LeetCode medium to hard level, and it was the most difficult among the tech interviews I had. Google tagged questions in LeetCode helped quite a bit.
Microsoft
Knowing that many of the development positions at Microsoft Japan require native Japanese, I was lucky to find a position that does not require native Japanese (well, it required the knowledge of one of the East Asian languages), so I applied online and got invited for an interview.
- A total of 2 rounds and was interviewed by 6~7 people
- Relatively easy coding questions
- Their interview process was very slow perhaps due to the number of applicants, and by the time I got to the final rounds scheduled, I had already received an offer from another company, so I had to give them a heads-up to speed things up.
- It was the most balanced interview in my opinion (technical, behavioral, system design, team/position match). I got the feeling that they not only focused on my technical competency but also the team match based on my background.
Bonus: Indeed
I was also contacted by a recruiter from Indeed around the same period and was already studying the same materials (LeetCode) to prepare for other companies. Good or bad, it felt like a very long, thorough, and tiring process.
- A total of 2 rounds: coding round and interview loop round. The initial coding round was conducted by a third party instead of Indeed. I was told I could retry if I fail this round on my first attempt. The interview loop consisted of 2 coding rounds, an architectural round, a behavioral (=resume deep-dive) round, and a code review round.
- The format of the coding questions resembles more of the real-life situations working with classes and methods rather than implementing a function such as LeetCode type questions. Perhaps they changed the format to accommodate the virtual interview setup.
- The resume deep-dive interview turned out to be not just behavioral but also technical— I had to draw the architecture of the system I worked on and explain the technical decisions I made, and during this round, I needed to show technical competency as well as leadership.
- Consistently throughout the interviews, I felt that the interviewers are well-trained, however at the same time, it was tiring because I was interrupted every time I bring up some point and they would ask for more detail before I finish my explanation (and then I often lose my train of thought there).
Conclusion
The Software Engineer interview preparation for FAANG companies for positions in Japan was not so much different from other countries although some interviews are conducted in Japanese for positions requiring Japanese proficiency. Note that I have never gone through the interview process in other countries, however, my experience for Japan positions matches what is described and discussed on the internet for the interview process in other countries. I also want to emphasize that luck comes into play a lot when it comes to whether you get an offer or not; maybe the interviewer just had a bad day or you’ve seen all the questions somewhere else before. Don’t worry if you don’t get the offer you want and just try again next time as most of these companies let you retry after 6 months or 1 year (I stopped counting how many times I got rejected by these companies before). I did not get offers from all of them but I now work at one of the above-mentioned companies as a full-stack Engineer.
Here are some useful links I mentioned in the blog. (Disclaimer: I may get commissions for purchases made through some of the links in this post.)
- InterviewCake
- LeetCode
- The System Design Primer
- Cracking the Coding Interview (amazon.com, or amazon.co.jp)
- Curated List of Top 75 LeetCode Questions
If you liked above, also visit https://faangjapan.com/ for more posts like this.