This article is about my experience of finding a job in Japan, the difficulties of adaptation, and some useful tips for beginner programmers!
Education
I graduated from Moscow State University with a Bachelor's Degree in the Lomonosov Faculty of Computational Mathematics and Cybernetics. This program is something like a hybrid of Math and Computer Science education.
The first two years cover the basics of Higher Mathematics and Programming very comprehensively. A more specific direction is chosen in the 3rd year upon admission to one of the 16 programs. When it was my turn, I rather accidentally chose the Department of System Programming, where we took such courses as: operating systems, databases, compilers, natural language processing, web programming, machine learning and computer graphics.
Work experience prior to Amazon
Mail Ru Group in Russia: 1.5 years. Part-time, as I combined work with studying during junior and senior years. It was there that I gained necessary experience as a novice developer, which helped me further in my career.
Rakuten in Japan: 6 months. I worked at Rakuten for only half a year and I can honestly say that I made a mistake with the team I got myself into. But you can learn something from any situation!
Applying to Amazon
Application process
The application process was fairly standard - I had my resume, created a LinkedIn profile and started adding my friends and their acquaintances from my industry as friends. I was eventually contacted by a recruiting agency and began the process of submitting my resume to Amazon and Indeed. Apart from that, I also applied to Google through their official website.
My general recommendation here is to build connections within your industry, as they will help you in the future.
For large companies, it is recommended to apply through referrals (internal employee recommendations), as this helps your resume pass the initial automatic resume screening.
Preparing for an interview
The next stage is an interview, which usually consists of 3 parts:
Tasks in programming
System design
Questions on soft skills
Programming. The book Cracking the Coding Interview is well suited to prepare for this type of interview, as well as solving problems on leetcode (section “Top interview questions”). You can also look at codeforces, algoexpert (paid). In addition, there are many YouTube channels where algorithms are explained.
System design. This is more complicated. Again, you can look at the book Cracking the Coding Interview, but I mostly ended up googling challenges for System Design Interview.
Soft skills. Here I advise you to describe all of your significant projects according to the STAR methodology, so you can quickly give examples of different situations from your professional experience. Example of questions: “Tell me about a time when you disagreed with a manager.”, “Tell me about a time when you had very tight deadlines and you didn’t have time to finish a project.” etc.
Interview
The interview process is pretty standard for all large international companies (FAANG) and consists of:
Call with a recruiter to discuss your current situation, what you are doing now, which countries you are considering, which areas of work you are interested in.
Online test. Usually you are given 1.5 hours, during which you need to solve 2 tasks of competitive programming. An example of a site you will be sent to is codility.
Video interview (phone screening). The interview takes 45-60 minutes. During the interview you are given two tasks, and you have to explain your train of thought, describe the solution, name the correct complexities of your algorithm, and write the code. Amazon also asks you soft skills questions for 15-20 minutes.
Face-to-face interviews (onsite). You come to the company's office during one of the working days and go through 4-5 interviews in a row with lunch break after the 2nd interview. Most often, one of the interviews is on System Design, and all the rest are somewhat similar to the phone screening, only this time it’s face-to-face. For lunch, you will be taken care of by one of the employees, to whom you can ask any questions about the company.
Another important point:
Interview your employer. I haven't given it much thought until now, but interviewing is a two-way process. Not only is the company trying to figure out if you're the right fit for them, but you also need to determine if you want to work for that company. Think carefully about the questions you'll ask your potential manager. You want to understand whether employees in this company are qualified? Is the working environment comfortable? Are the processes within the company fine-tuned?
Skills to develop
Soft skills
Ability to see root cause of the problem, and not brainlessly trying to solve the task you’ve been given. Why did your task even appear? Maybe it’s aimed at solving a special case that you can generalize and solve a group of problems instead? Don't limit your thinking to the task your manager has given you.
Timely communication. Remember that you are working in a team, and it’s very important to communicate the status of your task in a timely manner. Otherwise you can slow down an entire team.
Ability to work independently. It’s important to be an autonomous engineer who does not require micromanagement. You should be able to get answers to most of the questions you have on your own. Do not confuse it with getting stuck on the problem though. If you encounter a problem that you cannot solve on your own (you have already gone through all the options available to you), then contact your manager or mentor to get help.
Ability to ask for and receive feedback. Before making key decisions while working on a project, consider different approaches and list the pros and cons of both. Show your thoughts to your colleagues and find out what they think about it.
Ability to deliver information. At any stage of your career, you will have to carry out discussions and suggest your ideas to different people. It is important to be able to concisely and clearly convey your point of view. Even better if you can document it well in writing.
Technical Skills
System design. When working on a mature project, try to understand how the system works as a whole, and what were the reasons for all key decisions? System Architecture Design is one of the most essential skills for a Software Engineer. Do you cache data? How is load balancing done? What happens if one of your servers goes down?
Deployment process. Rollout is a very important part of the development process. How can you roll out the system so that your service doesn’t stop processing client requests?
Stress testing. Stress testing is very useful for high load systems. If you are working on one of these, I recommend that you learn more about this topic.
Log analysis. This is not usually taught in universities, but it’s a very important skill. Why is your system giving incorrect results on some inputs? How to understand where the error is? How to parse logs and process them correctly?
Getting used to Japan
My first company in Japan (Rakuten) is considered to be one of the leading Japanese companies in terms of creating an international working environment. Therefore, adaptation to Japanese culture was much easier for me than if I worked in a typical Japanese company (I heard that it’s pretty bad there).
Despite the above, I still encountered inefficient Japanese management. Here are some negative characteristics of the Japanese work culture in my opinion:
Strong hierarchical system. The boss is always right.
Focus is not on the result, but on the process. This leads to the fact that people stay at work for 12 hours, working sooooo not efficiently. Many people stay in the office from morning to night.
Unclear responsibility. In the Japanese working culture, it’s very difficult to get a person to take responsibility for anything.
Despite this, there are also advantages:
High quality work. Japanese will do everything as they are told, they strictly follow the instructions. Most likely it will be slow, but double-checked 100 times.
Fewer disputes, since the decisions of management are usually set in stone.
I personally encountered all the above issues, but thanks to Rakuten in a milder form.
Speaking about work itself, I can not identify any issues. There was nothing extraordinary that would differ from my work in Mail Ru. The only inconvenience was that I had to adapt to working in English language.
It is worth saying that in such large companies like Rakuten, Amazon and Mail Ru, a lot depends on the team you get placed into. In two teams within the same department, everything can be arranged completely differently.
In the case of Amazon, the situation is entirely different. Since I work in a department headquartered in Silicon Valley, we have a very western atmosphere. I didn't see any signs of Japanese work culture described above.
My typical day at Amazon
Working hours. Before the whole story with coronavirus began, I used to work from about 11AM until 7-8PM. Twice a week we have morning meetings with part of our team from Silicon valley, so we had to start at 9AM.
Total working hours usually depend on the project’s deadlines. In general, the working day is 9-10 hours (including lunch), but if deadlines are tight, it can go up to 12-15 hours and extra work on weekends. Again, a lot depends on the team you work with.
Meetings. At the moment, our team has only 2 weekly meetings, during one of which we report on current status of the tasks we are working on. Kanban Board (like Trello) is used for visualization, and some tasks are also broken down into scrum sprints.
During the second meeting we practice knowledge sharing, which can be useful to other colleagues. We often discuss possible solutions to problems that affect all team members.
In addition, I have weekly one-on-one meetings with my manager and mentor, where we can discuss anything from today’s weather to next year's plan to get promoted.
Work responsibilities. All teams are structured differently, but in my case, each of the developers works on their own project, or sometimes 2 developers on one project. In addition, we have responsibilities that are divided evenly among all team members. For example, updating the configuration of some systems.
Each Amazon team has something called “oncall” - a person who is responsible for processing all requests received by the team. It could be explaining how your system works, or checking why one of your components failed. Usually oncall duty is rotated once a week among all team members.
Gym. I try to go to the gym before work 2-3 times a week. Fortunately, I live 12 minutes walk from the office and there is a gym along the way, so I don’t spend much time on commute (this was one of the main criteria for choosing an apartment).
Cafeterias. Well, food in Japan is very delicious and low in calories. Therefore, I usually eat in two internal cafeterias in our office (available only for employees).
Schedule. The schedule is fully free. The main thing that is required of you is the result of your work. As long as you meet all of your responsibilities, no one will force you into a schedule.
Of course, it is desirable that you meet with your colleagues during work, as you may be needed to urgently discuss some work issues. Besides, it would be nice to maintain good relations with your colleagues and spend more time with them!
Salary
I can't disclose the exact amount, but for Tokyo, pretty accurate salary range can be found on Japan Dev. If you are interested in other cities, I would recommend checking salaries on Glassdoor.
The salary is enough for a comfortable life for me and my wife in Tokyo. This includes rent in one of the central areas, weekly gathering with friends, going to cafes and karaoke :) At the same time, during months without large expenses, you can save up to 30-40% of your salary.
Diversity at Amazon
Sometimes I get a feeling that only foreigners work at Amazon Japan, especially among the Software Engineers (on business side, of course, there are many Japanese). For example, in our search department, there are only 5 Japanese out of about 40 people. A year ago, when I first got a job at Amazon, there were 5 Russian-speaking developers in our department.
Pros and cons
What I like the most about my job is the fact that I learn something new ever day. These are not necessarily some innovative technologies, but often you learn very important soft skills - project management, business skills, communication among team members for the most efficient result.
In addition, you can always take the initiative in choosing projects you want to work on. Interested in high-load systems? The manager will try to find the most suitable task for you, and in some cases will support you when moving to another team within the company.
I think, like everyone else, I don't really like working on repetitive tasks that I have to dedicate a certain amount of time to weekly. These are the tasks that are quite difficult to automate.
Also, in situations where you are working on important projects, you may encounter bureaucracy in one form or another, which undoubtedly slows down your work.
Last words of advice
You need to understand what interests you and what exactly you want to built. Thinking in terms of which language should be learned first is not entirely correct. Do you like websites? Start by creating a simple page! Ever wanted to be a game developer? Try to implement a simple game. Now there is so much information on the Internet, you just need to want to use it!