Software engineer interviews 101
Tags: japan, career, webdev, interview
Published: 2022-06-05 16:05:12

This post is intended for you who have just entered the market and for the experienced one as well because even an experienced software engineer who has 7+ years of experience who hasn't done some prep would be caught off guard.

Previously I've written the tips on [how to pass the coding interviews test](https://dev.to/preemz/tips-on-how-to-pass-coding-interviews-tests-35ep), and this time I would dig deeper into each topic.

> Disclaimer: Why did I put 'Japan' on the tag? Because I'm only speaking with my own experience as a Tech Recruiter who work in a Japanese headhunter agency for ~3 years by the time I wrote this article.

Those interview processes are usually used by Japanese who accepts international employees, so not all Japanese tech companies will go through those kinds of processes.

The interview processes (including the preliminary tests) would be:
1. Take-home test - algorithm test
2. Take-home test - project assignment
3. Live coding test
4. System design interview
5. Manager/Head interview - cultural check

Quick note: some companies give algorithm test OR project assignment. As far as I've known, there is no companies who gives algorithm test and project assignment in the same time.

### 1. Take-home test - algorithm test.
On this test, they will check how you do 'basic' problem solving with your preferred programming language on doing the test. Why 'basic'? Because it will only cover the runtime and memory load.
* The test will cover around array, tree, sorting, list, queue, etc. The questions will cover your DSA knowledge.
* The deadline usually will be 1 week from the day you've got the test. Make sure you're familiar with the coding test platform and have adequate preparation before taking the test.
* When you hit 'start', the countdown will start. The time span would be around 30-60 mins. And you sometimes will face more than one exercise test.

### 2. Take-home test - project assignment.
You can take many references as many as you can to do the project assignment. But since because of the more flexible time constraint, the test usually would be more complicated than the algorithm test. 
* The deadline would be one-two week. Sometimes due to the complexity of the test, you can't do it on the last one-two days before the deadline.
* Usually there would be a specific request that needs to be done on the assignment. Make sure that component requested is on the assignment you will do. Eg: the data should be encrypted when it's stored, the password should be validated on the client-side, etc.
* Make sure you made the **documentation** before you submit the test. Learn how to make good documentation, because it will show how you communicate in text with your teammates later.

### 3. Live coding test.
Similar to the algorithm test that you might have done before, but right now you will do coding in front of the team.
* The interviewers want to look at how you solve the problem while **communicating** with your team.
* Learn to **think out loud**, don't just do the code in your head. Tell the interviewers what you are gonna do, what is your ideas, and how to do it step by step.
* Sometimes you will be stuck in the middle of the process, and it's fine. Don't hesitate to ask the interviewers for a clue.
* Similar to the algorithm test, there would be a time limit. Usually, it will around 30-60 mins.

### 4. System design interview.
The questions would be around system architecture. Usually, there would be no coding involved in this round.
* On this round, they will test your backend knowledge. How you ask the right questions and communicate would be playing the biggest part here.
* Lead the discussions, ask actively. Eg: how much traffic would be expected?

### 5. Interview with the manager/head level.
Last but not least, cultural check with the manager/head level. Sometimes this round is happening in the early stage, sometimes in the late stage.
* Make sure you know what is the product or scope of the work that you will do, what is the division that you will join, and look out on how is the culture there.
* Some of the questions might revolve like this: “let's say, there are 2 colleagues are having an argument (e.g debating about a specific implementation approach), what would you do? which approach you will take?”
* At the end of the interview, there would be a time to ask questions. Capitalize on this moment to impress the interviewer. You can use something like, “What are the top 2-3 problems you are currently trying to tackle?” And if you have the knowledge to solve the problem, try to communicate your proposed solution.


Useful links to prep for your interviews:

1. Back-end engineer prep https://www.techinterviewhandbook.org/
2. [Grind 75](https://www.techinterviewhandbook.org/grind75). Solve 75 problems in LeetCode.
3. Front-end interview prep https://www.frontendinterviewhandbook.com/. Start from [here](https://www.frontendinterviewhandbook.com/introduction/)
4. Learn all the things you need from the basic https://teachyourselfcs.com/
5. System design primer - all you need to know on designing a system https://github.com/donnemartin/system-design-primer
6. Grokking the system design interview (paid) https://www.educative.io/courses/grokking-the-system-design-interview?aff=x23W