My Experience Finding a Software Engineer Job in Tokyo as an Overseas New Grad (2022)

(Tokyo, credit to Derrick Brutel, under CC BY-SA 2.0)
When I was in the third year of my master’s program, I went on exchange to Milan. One of my goals was to understand whether I would enjoy working abroad. In conclusion, Milan might not be the place I most want to work, but it undeniably gave me the experience of working abroad and understanding cultural diversity. I realized that I do want to work overseas. I want to explore, I enjoy cultural shock, and I want to challenge myself.
At the beginning of 2022, something unexpected happened: I got a Japanese girlfriend in Milan. I originally planned to look for jobs in Europe after graduation, but suddenly my goal became finding a job in Tokyo. I have never worried too much about not being able to find work abroad. Software engineers have jobs everywhere, and in many places you only need English. When I was in Milan, I even tried looking for part-time software development roles, and I found one in less than a month. That made me even more confident that I could find work anywhere.
Here is my background: I did my master’s in CS at NCTU, researching offloading for parallelized JavaScript programs (broadly in the systems space). I did my undergrad in bioengineering at NTU. I cannot speak Japanese. I studied abroad in Italy; I never learned Italian, but I did speak a lot of English, so my English is decent. I have no Japanese degree, no Japanese ability (around N6 level; the baseline requirement for Japanese-speaking roles is N2), and no full-time work experience. From an external standpoint, I was at a huge disadvantage. Even if Japan likes hiring foreign engineers, they usually prefer poaching experienced engineers directly. With essentially zero Japan-related background, why would anyone hire an overseas new grad like me?
In March 2022, I returned from Milan to Taiwan. While finishing graduation, I started looking for jobs in Tokyo. In early May, I graduated from NCTU. In mid-May, I received an offer I was satisfied with. At the end of May, I flew to Cologne for vacation. Over the course of nearly three months, I was fortunate enough to get and choose a very good offer from Mujin Corp. This post shares what I learned from those three months in Taiwan while looking for software engineer roles in Tokyo. Not only were people around me pessimistic, I also carried doubts myself. But even under these conditions, I still ended up finding a job. I hope my experience can serve as a reference for others with a similar background.
¶ Overview of Japan’s New-Grad Hiring
In Japan, fresh graduates are called “新卒” (new grads). In general, new-grad job hunting involves getting an “内定” (informal offer) in the previous year and then starting work the following year. Conceptually, it is similar to campus recruiting in Taiwan. The difference is that in Taiwan campus recruiting commonly starts in the second semester, roughly half a year before graduation, and it is also common to only start job hunting after graduation.
Because Japan’s graduation season is in April, the main wave of new-grad recruiting typically starts around March of the previous year. There is usually another wave around October, but with fewer openings. As foreigners, Japan’s standard new-grad recruiting process does not help us much. But some large companies like Rakuten, Line, and Mercari recruit Japanese new grads while also opening new-grad roles specifically for foreigners. If you want to join a large Japanese company that hires foreigners, you need to pay attention to the timing.
If you go through foreign-company recruiting, recruiters, or job postings on LinkedIn, there is less of a seasonal constraint. My impression is that foreign companies rarely hire new grads, and if the title does not explicitly say “new grad”, do not even dream. Even if they do hire new grads, overseas new grads rarely make the cut. I also consulted recruiters, and my conclusion was that they were basically useless for new grads. Recruiters primarily target senior engineers. New grads either have no opportunities, or recruiters simply cannot be bothered. The most useful channel for me was LinkedIn. Companies that post on LinkedIn, whether large or small startups, tend to be more open to hiring foreigners. Most of my interview opportunities also came from LinkedIn. There are also Japanese job platforms (Quitta Jobs, Findy, etc.). I heard they can be foreigner-friendly as well, but they are mostly for people who can speak Japanese, so I tried them briefly and then gave up. Finally, there is referrals. If you know foreign engineers or Taiwanese engineers in Japan, you can ask them to refer you. But overall, even with a referral, overseas new grads often still get rejected immediately (or maybe I was just a weak candidate).
To make compensation comparisons easier, here is a quick overview of Japanese software engineer compensation. A typical Japanese university graduate makes around JPY 4M per year. Ordinary Japanese companies like Sony or SoftBank offer around that number for CS new grads; call it the baseline. Better companies like Rakuten or Line offer around JPY 5M+. Even better companies like Mercari offer around JPY 6M+; call that the “high” benchmark. Beyond that, if a company can offer JPY 7M-9M+, that is top-tier. For an average Japanese engineer, reaching top-tier compensation usually takes 4-5 years of experience. Overall, this is somewhat similar to Taiwan: most engineers start around TWD 1M per year, but CS grads from top schools can hit TWD 1.5M+ in their first year in Hsinchu. Starting compensation is still related to school and ability.
¶ Resume
Your resume is the key to job hunting. Since I was applying to English-speaking roles, I followed the standard format for English resumes. If you apply to Japanese-speaking roles, Japanese resume conventions are very different. I also have a habit of saving versions of my resume on GitHub, so you can take a look at what my resume looked like back then (Link). There are already plenty of resources online about how to write a resume, so I will not repeat them. But I revised my resume for more than a month, repeatedly getting feedback from seniors and professors, until I was satisfied with the final version.
Even though many seniors have already warned me, I still want to repeat it: whatever you put on your resume will be asked about. Do not list things you are not comfortable with. If you put something on your resume, you should be able to talk about it fluently and in depth. In most cases, I was asked about the things I wrote. Sometimes I was also asked about earlier experiences, and because they were long ago and I had not prepared, my answers were clumsy. Also, I used to describe my C++ level as Proficient, but after getting tested a few times, I changed it to Experienced. Until you have written over 100k lines of meaningful code in a language, or contributed to a truly large codebase (million-line scale), it is better not to claim that you “know” it too confidently.
¶ Interviews
If you want an English-speaking software engineering role, at the very least your English cannot be too bad, right? (lol) In my view, CS training usually gives us decent English, because programming itself is English and first-hand online resources are often English. If you participate in open source or international communities, you also communicate in English. Many Taiwanese people are fine at reading and listening, but speaking is hard because Taiwan does not have an English-speaking environment. To speak smoothly, you have to practice deliberately. Because I studied abroad in Milan and spent time with foreigners every day, I spoke English daily. It was not some extremely advanced English, but I could express my thoughts and opinions smoothly with a few thousand words.
In my interview experience, for English-speaking roles that hire foreigners, many engineers are foreigners as well, and speaking English feels comfortable. Most of them are even better at English than I am. In some cases, the interviewers are Japanese, but they often have overseas experience and their English is also good. There are exceptions: if a company wants to hire foreigners but cannot speak English (and it is an English role), I basically exclude them. I think the hardest part of English communication is discussing politics, culture, hobbies, debates, or negotiation. In contrast, describing your background and explaining “how the code works” is much easier. I believe that with practice, you do not need a TOEFL 100 to speak fluently.
In Japan, interviews are traditionally very formal and you are expected to dress properly. Early on, I wore at least a dress shirt. Later, I realized that most interviewers were foreigners, and everyone was fairly casual. Even when the interviewer was Japanese, the style tended to be more Western. So I stopped dressing up and just wore whatever.
Previously, my friend Yongyu suggested I should also apply to companies in Taiwan, even if just for practice, because if you have no interview experience, trying to get a job abroad can be brutal. That is reasonable: if a company is going to hire a foreigner, the candidate usually has to be above average. But in practice, I applied casually and basically got no interview opportunities in Taiwan. Even if I did get an interview, my mindset would have been wrong anyway. Later, I felt it was not necessary. If, like me, you have already decided you want to go abroad, you do not need to apply in Taiwan, unless you are open to both.
During the interview process, I did some LeetCode, fewer than 30 problems: mostly Easy, with some Medium and 2-3 Hard. Overall, only a small number of companies asked LeetCode-style whiteboard questions. I did not feel LeetCode directly helped me much, but it did help keep my coding “hands” warm. Some companies test implementation ability instead: for example, implementing a simple LRU cache on the spot, or doing take-home assignments, like building a fully functional RESTful server, or reading and understanding code. Seeing different interview styles was eye-opening. In the end, it is more about long-term accumulation than short-term cramming.
For interview preparation, I found jserv’s YouTube series “資訊科技產業專案” quite helpful. I think you can extract some useful experience from it. I also think talking with professors, seniors, and friends, and discussing interview topics, helps a lot.
One thing that left a strong impression on me is that no matter how many internships you have, or how many side projects you have done, having them is better than not, but from a company’s perspective they are still “playing house”. The experience and know-how required for a full-time job is far beyond what small projects can teach you. For example, I wrote some C++, but for a senior engineer that is basically hello world. Or my research was on parallelizing JavaScript, but my understanding of parallelism and concurrency was still shallow. I strongly agree with what Yongyu said: in reality, I am basically someone who knows nothing. Do not obsess over what you can do today. If a company is willing to hire a new grad, they are not hiring you for what you can do right now. It is more important to convince them that you have solid CS fundamentals and strong potential.
Overall, interviewing is continuous learning. After five or six interviews, I could answer even personality questions easily. At the beginning, the hardest question for me was “Why do you want to come to Japan?” I could not exactly say “because my girlfriend is in Japan” 😂. Later, I came up with a powerful story that even I thought had no holes: I want to see the world, I have many friends in Japan, Japan is close to Taiwan so I can visit my parents anytime, I have liked Japanese culture since childhood, and so on. In short, a reason that would not be questioned. I think interviews get smoother the more you do. I applied to 20-30 companies before getting my first interview. Before that, even if I got responses, it was usually an immediate resume rejection. Job hunting requires patience. Once you get the first interview, things slowly start to improve.
¶ Job-Hunting Process
Below is a brief summary of my experience with each company. Although my graduate lab was a systems software lab, I mainly targeted Full Stack Engineer or Backend Engineer roles. Only those two titles led to interviews. I also applied to various random Developer/Engineer roles, but got no response. The companies below are those where I had at least an interview opportunity, or those I think are worth mentioning. There were many more companies I applied to that never responded or rejected me. Apart from a few well-known large companies where I checked openings directly on their websites, most of my applications came from scrolling LinkedIn daily.
¶ Plain and Unremarkable Failure Cases
Mercari, Line, and Rakuten are famous companies known to hire foreigners, and new grads can have a chance. Mercari started new-grad recruiting in March, including roles for foreigners. I got eliminated immediately because I could not solve a single question on the online assessment. I applied to Line’s foreigner new-grad role in late March, got the assessment in late April, and was told in mid-May that I could proceed to the next stage. But by then I had already accepted Mujin’s offer, so I dropped the process. Line felt slow and dragged out. My girlfriend applied to a design new-grad role at Line as well, and their process was also slow. I do not even remember exactly how I entered Rakuten’s interview process. I applied through their website, through Connect Job, and via a Taiwanese recruiter. In the end, I got a Junior role interview. The process was the same as described in this article: first, an extremely easy online question that had no discriminative power, then two interview rounds that were just chatting. The first round was three foreign engineers asking about resume experiences. The second round was two Japanese managers asking background questions and more behavioral questions, like how you learn new things or solve problems. I felt I spoke smoothly in the second round and thought I was in good shape, but I still did not get accepted. I do not know why.
No matter how I applied to Amazon and IBM, I never got any response, even after trying many roles and even getting referrals. I also got nothing from SmartNews even with a referral. TeamLabs ghosted me after the online assessment. Hennge seems like a decent company, but they require new grads to join their full-time internship program before considering them for full-time roles. By the time I got to that point, I had already found a job, so I did not pursue it. Their internship program runs multiple cohorts each year, so juniors who want to work in Japan can plan early. Ridge-I required an online assessment: three Easy problems. I finished in under half an hour, but I still failed the assessment. I was completely confused. Ascent Robotics is in the factory robotics space. After talking with the foreign CEO, I got ghosted. Preferred Network also required an online assessment, but the problems were too terrible (overly complex and meaningless), so I gave up. NABLAS Inc. is an AI research-oriented company, similar to an HPC research institute, and the office is right across from the University of Tokyo. I think it is a good company; if you want to dig into AI or high-performance computing, it is worth considering. Their first interview was an overview chat, and the second would have been a three-hour technical interview to decide the result. The compensation is probably around the high benchmark. But at that time I already had the Mujin offer, so I dropped the second round. I also encountered some terrible companies: for example, a CEO who cannot speak English but wants to hire foreigners (and it was an English role), or a CEO who cannot even introduce their own company. If the CEO cannot sell the company, I do not know how they expect candidates to want to join. Some companies could not even offer JPY 6M; those were eliminated immediately.
By the way, I also applied to a foreign Company N in Taiwan for interview practice, and got destroyed. I applied to a parallelization-related role. I thought it would be a standard algorithms interview, but instead they started with debugging basic C++ class operations, then asked about OpenMP usage. I could not answer, so the interview ended early. It seems they would have asked GPU programming as well. I do not think my ability was properly evaluated. In my view, when you need OpenMP, you just look up the syntax; and when I do GPU computing, I also copy an example and modify it. The funniest part is that at the end, the interviewer asked if I had never taken a parallel programming course. Luckily they did not look closely at my resume. If they had realized I was a TA for parallel programming and even won an outstanding TA award, I do not know what they would have thought. Also luckily they did not seriously read my resume, otherwise it would have embarrassed my professor. Another thing: the junior manager at Company N did not turn on their camera. That was the first time I had seen such an impolite interviewer. During the interview, they kept urging me with comments like “most people can solve this in 10 minutes”, etc. It was the worst experience in my entire job search.
¶ Failure Cases Worth Mentioning
Japan Computer Vision was the first company that gave me an interview opportunity during this job search. I found a Taiwanese engineer in the “矽谷輕鬆談” Slack channel and asked for a referral. At the time, I had applied to many companies with no responses. This referral gave me my first Japan interview and boosted my confidence a lot. The interesting part is that although it is a Japanese company, most of the engineers there spoke Chinese. Later, I found this is not uncommon in Japan, probably because Chinese engineers are everywhere. I applied for a Full Stack Engineer role. The first round was two frontend engineers testing some JavaScript behaviors and operations. The second round was two backend engineers: one asked DP, and the other asked an implementation question about a multi-threaded key-value data structure. I did not do well in either round. My thesis was on JavaScript, but I realized my understanding of JS was still somewhat narrow. And algorithms have always been my weakness: I got crushed by DP. (And yes, I still never seriously practiced DP afterwards 🤪.) This company is a SoftBank subsidiary startup. I think it is a good company, and they do not recruit new grads directly. If a new grad can get in, compensation is probably between the high benchmark and top-tier.
Boostdraft is a startup of around 6-7 people. Their product is a specialized legal document editor for lawyers, which I think has strong potential. I interviewed three times. The first was a chat with the CEO. The second was an algorithm interview focused on string processing. They asked a question I had never considered: if I were to write tests, how would I design tests to most effectively validate correctness? It is not just “write unit tests”. The third interview was an algorithm interview with another engineer. After the third interview, I was rejected. I think they still wanted a senior engineer as an immediate contributor. I am quite optimistic about their future. If you are strong enough, you might want to consider them. I guess their compensation is around the high benchmark.
Asprova builds factory workforce scheduling software. New-grad compensation is above top-tier (JPY 8M to 10M). You can refer to this and this for context. Their employees do not speak good English. Although they are willing to hire foreigners who cannot speak Japanese, it is best if you already have some Japanese, or at least have the mindset that you will definitely learn Japanese later. I was actually moved by their process. My interview flow was different from what I had seen online. The first round was directly with the manager. The manager basically could not speak English, so we communicated mostly through DeepL. Because communication was inefficient, I interviewed with him for almost three and a half hours. It was the longest interview I have ever had with a single person. They tested code-reading ability: they gave a long code snippet and asked me to spend half an hour analyzing its memory layout. The manager was kind, and you could tell they were eager to hire. Even with the language barrier, I was deeply impressed. Later, I interviewed two more times, or rather, I chatted with two different engineers: one Chinese and one Singaporean. The manager seemed to tell them to just chat with me and not do coding tests. I think Asprova is very sincere to candidates and willing to spend a lot of time talking. Through those conversations, I also realized the company was not for me, so I declined further interviews. My considerations were twofold: first, the product is relatively mature, mostly maintenance with less innovation; second, the company requires Japanese, and I think it is hard to do good work when communication itself is a barrier.
Cogent Lab is a startup with some scale, applying AI to document processing. They are also mostly foreigners, with a more British style of English. The first interview was a simple chat about my background. Then they gave a take-home assignment: implement a RESTful server in Node.js. They asked me to consider architecture concerns like multi-process support, DBMS integration, and adding a message queue. They gave two weeks, but I spent about three to four days. In that assignment, I encountered Docker Compose for the first time. You can see my submission here. The second interview was a discussion of the implementation, which I found fun: we discussed the architecture, and they asked me to make changes on the spot or fix issues I had not anticipated. Compared to being tested on algorithms, this style of system implementation evaluation felt less stressful to me, and I got through the two hours pretty easily. But after the second interview, I received a rejection. Maybe my assignment quality was not good enough, or maybe something else was not a fit. My impression is that they wanted a senior engineer.
Paidy is a fintech company. They are also mostly foreigners. I interviewed for a backend engineer role. The first round was a chat with the manager to understand each other’s background, and then they gave a take-home assignment: implement a RESTful server, but with requirements to use Rust and functional programming. I had not written Rust since university. When I used Rust before, I also had not written multi-threaded programs. The assignment was still fun. I essentially learned how to write concurrent programs in Rust. I am quite satisfied with what I built (repo). I think my Rust was probably terrible, and I probably did not use FP much, but as a project it was complete: everything worked, and it included full tests. By then I already had the Mujin offer, but because I found the assignment fun, I still spent a lot of time finishing it. After submission, I got rejected without even another interview. Maybe they judged my level as insufficient from the assignment alone. I think Paidy would be a good company to join. Backend work at a scaled fintech company is unlikely to be boring. Their stack is mainly Rust + Go, and I guess their compensation is around the high benchmark to top-tier.
¶ Offer Cases
Monoid is a software consulting company founded by a group of Chinese international students. They have five full-time employees. The company has only been around for a few years, but by taking consulting work they reached JPY 200M in annual revenue. The team members have strong academic backgrounds. For such a small startup to generate that level of revenue, I think they must be very capable. The interview process was a single round, a little over an hour: they asked some basic programming concepts and algorithms, and then spent the rest of the time introducing the company. I was surprised how fast it was. But they seemed to have already researched me, including my blog and GitHub, so the interview might have been final confirmation. Soon after the interview, I received an offer. The compensation was at the high benchmark. They were willing to compete offers, and it sounded like they could go higher. They gave off a vibe of “we are not afraid of paying; we are afraid you are not good enough.” I am grateful to this company. When I received the offer in early May, it instantly boosted my confidence, because at minimum I now knew I could work in Japan, and the compensation was good too.
If you apply to Monoid, please explicitly mention that you came from “Neutrino’s Blog”, so I can negotiate a nice meal out of them!
Mujin, Inc. builds controllers and management platforms for factory robots. I initially applied for Full Stack Engineer, but HR coordinated it to Backend System Engineer. The first round was a chat with HR to learn about the company (additional note: since 2024 there is also an online coding test before the first round). Then I waited about two weeks. I thought it was over, but it turned out to be an internal process issue. The second round was with the department manager. They skipped small talk and immediately tested C++. The coding question was simply implementing an LRU cache. I felt there were no major traps. The coding test took about 40 minutes, and then I talked with the manager for another 40 minutes about their tech and what I could do and learn there. After the second round, there was a take-home assignment with 48 hours to complete. I think the second round was moderate plus personality evaluation; the real differentiator was the assignment. The assignment had strong discriminative power. I almost gave up at one point because I thought I would be eliminated. Briefly, Mujin used an open-source robotics project internally. The first step was to build that project. The hard part was that it was not TensorFlow or Chromium with tons of docs. For this project, the documentation was basically the code itself. I was required to compile it on a specified OS. Along the way, there were many build errors, and I had to rely on experience to explore and debug. The assignment instructions were basically just one sentence: “figure out how to build it”. It was like being given a task at work and having to deliver it independently with no guidance. I got stuck for 7-8 hours with no progress (remember, I only had 48 hours), which really made me want to give up. Fortunately, I eventually made it work. After building it, the next part was to implement a simple RESTful server that used the previously-built code to do some work. In other words, the build step was by far the hardest; the server implementation itself was not that difficult. I went from nearly giving up to submitting early. The manager seemed happy with my results. There might originally have been another interview to discuss the assignment, but it seemed to be skipped, and I got the offer. HR told me early that new-grad compensation was around JPY 6M to 9M; my offer did hit the top end. There were also additional benefits. For example, joining Mujin directly gives you +20 points in Japan’s permanent residency points system (there is a points table; at 70 points, you can get PR after three years of work; at 80 points, you can get PR in as little as one year). And at Mujin, I could continue working on systems software. Overall, I thought it was a great opportunity, so I signed soon after receiving the offer.
If you are applying to Mujin, let me refer you. It increases visibility and also lets me get some bonus.
Email: [email protected] Contact me and I will send you a referral link. It can improve your chance of passing the resume screen.
¶ Conclusion
I am currently on vacation in Germany. Looking back, everything feels unbelievable. If not for my girlfriend, I never would have imagined that my first full-time job would start in Tokyo. As an overseas new grad with no advantageous background, I was fortunate to find a satisfying offer within three months. I once thought that if I could work in Japan at all, I would accept even baseline-to-high-benchmark compensation. In the end, I am very happy that I found a company that appreciated me and offered strong compensation.
I think sometimes you just have to be brave and go for it. Everyone who heard that I, as a new grad, wanted to find a job in Japan thought there was little hope. But even if it seems hopeless, I believe that if you push forward without hesitation, you still have a chance. I am also glad I studied CS and targeted software engineering roles. In today’s world, if you are willing, you can find software engineering positions anywhere. That was my biggest advantage in this job search.
I learned a lot during the process: how to handle interviews with foreigners, and how to complete take-home assignments from different companies. I especially like companies that give interesting assignments. That made me enjoy the job-hunting process. I had fun building things and I learned new things. I am also grateful to interviewers who pointed out my shortcomings, which helped me continue improving.
My only small worry now is that my expected start date is three months later. I just hope nothing changes during this period, so I can start smoothly and begin life in Tokyo. I hope this post helps future new grads who, like me, want to find software engineering roles in Japan.