How I prepared for interviews
Tags: career, codenewbie, webdev, watercooler
Published: 2020-10-01 19:25:02

## Studying / Side Projects
Before I talk about the actual steps of applying for a position, let me talk about studying and side projects. When I was looking for my first job, I often went online and tried to find some advice on what I should focus on to prepare. I saw people saying I should go through a book about algorithms and practice some algorithm problems, but also work on side projects. The amount of work they suggested people do was overwhelming. After I experienced some job interviews and saw other candidates, I have a slightly different perspective: Focusing on studying algorithms might not be that effective, especially if you apply to a small startup.

### How much companies care about algorithms varies
How much you need to study algorithms partially depends on what kinds of companies you want to work for. For example, if you want to get a job at a FAANG company (Facebook, Apple, Amazon, Netflix, and Google), then being able to solve algorithm challenges is important. They hire people from various backgrounds, and they are usually more open toward people without a CS degree. However, in order to be fair to everyone, they focus more on algorithms because it is easier to evaluate people. It is similar to why many college applications require standardized tests. At the FAANGs there are usually multiple rounds of algorithm questions. 

However, if you want to get a job at a small to midsize company, then being able to solve a pure algorithm challenge is not that important. Smaller companies need more people who can be productive right away. They tend to look for people who can demonstrate that they can code, and being able to solve algorithm questions is not as important for them. They might have some sort of algorithm-related questions in their interview process, but not as much as FAANG companies do. If you want to know the exact interview process of a company, check on [Glassdoor](https://www.glassdoor.com/member/home/index.htm) to see whether there is some information.

### Have one well-thought-out side project
If you are looking for a job at a relatively small company and you don’t have a CS degree, then having a side project is important. As I said before, they are looking for people who can add value to a company immediately, and you have to demonstrate that you can do so. Some people think that their GitHub has to be full of side projects, but that’s not true. In fact, there are lots of senior engineers who don’t have any actively maintained projects. It also doesn’t have to be a huge project either. Here are two things I recommend doing if you already have a project you are working on.

1. Have a good README. It should at least have a summary of the project and the technologies you have used. Recruiters can only spend a few minutes on each candidate at the initial screening. They might only read the README, so it is important to have a presentable one.
2. Clean up your code. Follow a language-specific convention and remove unnecessary code. For example, it is a convention to use snake cases in Python. If your code uses snake cases and camel cases at the same time for no reason, it shows that you don’t care about details. You can find a list of best practices for a specific language or a framework, so read them and clean up your code accordingly.

If you don’t have any side projects, and you need more advice on them, then feel free to contact me. I can give you more detailed advice. But the most important thing is to work on something you are interested in, otherwise, it is hard to put your effort into it. 

### Practice algorithms while going through actual interviews
I found this piece of advice while I was applying for a job, and it changed the way I see job interviews. It takes months to study everything in an algorithms book, and I see some people wait to apply to jobs until they finish their studies. Companies are more likely to ask about certain topics than other topics. A good way for you to learn what companies like to ask is to actually go through technical interviews. I had experience with two companies who asked me to solve a really similar problem. Try to see interviews as practice. It also helps you relax in an interview.

If you are still worried about algorithms and would like to study them, here is a short list of resources that can help you get started. 
**Books**
- [Algorithm Design Manual](https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) by Steven S Skiena If you have to pick one book to read about algorithms, I recommend this book.

**Youtube**
- [Mycodeschool](https://www.youtube.com/user/mycodeschool): I didn’t know about this one until recently, but the creator is good at explaining complicated things. Watching this in your free time can help you to have a general understanding of data structures and algorithms.

**Online Courses**:  I haven’t used either of these, so take these recommendations with a grain of salter.
- [Algorithm Specification by Stanford](https://www.coursera.org/specializations/algorithms): I did some research on online courses, and many people recommend this one the most. I looked into the content, and it is more than enough for you to pass algorithm questions at an interview.
- [Intro to Data Structures and Algorithms](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): Another great online course for learning algorithms. The course is taught by Google. It might be more practical than the first option.

**Github Repo**
- [Coding Interview University](https://github.com/jwasham/coding-interview-university): This is a comprehensive guide on how to study algorithms. However, please remember that doing everything on this list is unnecessary.

**Websites**
- [LeetCode](https://leetcode.com/): I used LeetCode to get some practice on algorithms when I had time. It is simple to use, and you can usually find answers when you are stuck.

## Applying
### Make a strong resume
The biggest problem I see with resumes is that there are lots of people writing more than a one-page resume. People who filter candidates cannot spend lots of time on one candidate. Recruiters can have automatic negative responses when they see an overwhelming resume. Having a really long resume rather hurts your chance of moving to the next step, so please do not go over one page.

Another common mistake I see is to list out all of the technologies you know. I made the same mistake when I applied to jobs, so you are not alone if your resume has too many technologies. You should instead pick certain technologies you know really well and you think can highlight your experiences. For example, if you are applying for a frontend position and know certain frontend frameworks such as React or Vue, then it is obvious that you know HTML and CSS and you don’t need to include them. I also don’t recommend including technologies you don’t know very well. Recruiters do not expect you to know 3 languages and 5 different new technologies especially if it is your first time getting a software engineering job. Having too many skills on your resume makes it look ingenuine.

On the other hand, there are a few things I would recommend putting on your resume if you know either of them: testing frameworks and infrastructure tools. The biggest difference between working in a company and programming in college or bootcamps is that people care about scalability and maintainability at a company. You might not have experience with testing or infrastructure tools, but if you do, it will be a big differentiator from other candidates. 

Finally, you should do some research on a company’s tech stack. They are usually mentioned in job descriptions. For example, if a company is looking for a Python developer, then focus on highlighting your experiences with Python over other technologies. If you use it for a side project, then talk about what you have built with it in your resume. If you have a section listing out your skills in your resume, even putting Python at the beginning can help you to attract the recruiter's attention.

You can structure the content of your resume as you want, but many resumes for software engineering positions have these sections: education, experiences, projects, and skills. If you would like to see an actual resume, I’m happy to share mine. I don’t think it is a particularly good one, but it was good enough for me to get a job. 

### Touch up LinkedIn and AngelList profiles and your GitHub repo
Startups get a ton of applications. An easy way to filter out people is to look if their LinkedIn and AngelList profiles or their GitHub repo aren’t in good shape. This is just basic professionalism. If you can’t do these simple things, how could you be expected to be a good employee? When I say they have to be in good shape, I don’t mean that you have to have multiple side projects and internship experiences. Just fill out the basic information so that recruiters can easily tell who you are. You can copy most of the content from your resume.

### Reach out to CTOs directly
It is not uncommon for CTOs to screen candidates directly in a small company. When they use some hiring platforms such as AngelList, the CTO’s inbox might be filled with emails from AngelList. How to stand out in this situation? If you can find a CTO’s email, you can probably send the email directly to him or her. However, this depends on the company’s hiring process. If a company clearly specifies how to apply for a position, maybe it is safer to follow the specified instruction. **The smaller the company is, the higher the chance that the company does not have a standardized process for hiring and you can take advantage of that.**

There is no perfect way to find a CTO’s email address. You might be able to find it on the company’s website but you might have to get more creative. Salespeople are really good at creatively finding email addresses. One of their favorite tools is called [Email Finder](https://chrome.google.com/webstore/detail/email-finder/einnffiilpmgldkapbikhkeicohlaapj?hl=en). It can find a person’s email using their LinkedIn profile. It’s not perfect but it works most of the time. You can also just guess. Many companies use some combination of a person’s name and the company’s domain for employees’ email addresses. If you can find one employee’s email address, you can just apply the pattern to the CTO’s name to guess their email address. 

Once you find a CTO’s email address, the next step is to actually send them an email. Try to make the email concise. No one wants to read a long generic email from a candidate. There are only two things you need to include in an email: why you want to work at that company and why you think you will be a good fit for both the company and the role. Try to make it as specific as possible. Also, don’t forget to attach your resume or any other additional materials you want them to check. 

### Don’t underestimate generic questions
Some companies have generic questions in their application. Don’t underestimate those questions and put unthoughtful answers. For example, if there is a question asking why you want to work for company X, don’t say I just want to get any job or leave it blank. There are surprisingly a good number of people who answer like this and immediately get rejected at the resume screening. You don’t need to spend lots of time coming up with clever answers. Just answer genuinely. It is also a good chance to show your personality. Companies would like to know who you are as a person and not just as an engineer. Cultural fit is a surprisingly important factor in the interview process.

### Apply with referrals
I didn’t personally do this, but I have friends who tried to always apply with a referral. In case you don’t know, a referral is when someone at the company submits your application on your behalf. This is a completely normal part of recruiting. In fact, many companies give thousand-dollar bonuses if an employee refers someone who gets hired. If you’re referred, the chances that you get a response are vastly higher. To get referrals, ask people in your network. It’s best to reach out to the person, ask them to chat about the company, and then if the company and role still seem like a good fit, ask them to refer you. Don’t be shy about it. Again, it’s totally normal and the other person can make a lot of money really easily if you get hired. Everyone wins! Here is an email template that you can use:

* * * 
Hi XXXX,

I hope you’ve been doing well since college! [Or some personal note or some reference to how you know the person]

I’m in the process of applying to software engineering roles. I saw that you work at [company], and there’s an open [job title] position that I’m really interested in. I’d love to hear about your experience working there to get a better sense of the company. 

Do you have some time to chat?

* * * 
Then in the call or in a follow-up email, you can ask for the referral like this:

* * * 
It was great chatting with you! The company sounds like a great place to work. Would you be open to referring me for the position? If not, not a problem. I still appreciate you taking the time to talk.
* * *

If you have any questions, feel free to reach out to [makoto@antcode.dev](mailto:makoto@antcode.dev). Lots of people helped us with career stuff over the years, so I’m more than happy to give back.

Happy coding!