---
title: "My Experience Applying & Interviewing for Software Engineering Positions"
date: 2022-07-10T15:49:51-04:00
draft: false
toc: false
images:
tags: []
---

I've recently been interviewing for jobs, and decided it might be interesting to
write about how the process went. Hopefully this will be useful for other
developers in my position, or hiring folks who are looking for a candidate's
viewpoint.

#### By the numbers:

- 67 applications
- 5 companies interviewed with
- 1 offer

## Applications

Overall, I made around 67 applications. I'm counting that by the number of
confirmation emails I got, so the actual number may be slightly higher because
a few companies didn't send a confirmation email.

Out of these, I got interviews with 5 companies. That's around a 7.5% response
rate. Keep in mind however that I did apply to a lot of positions that required
more years of experience or experience in specific technologies that I didn't
have. I do think these applications are still useful, because I did get
interviews with some of these. I think it's pretty well known that companies
will sometimes over-exaggerate the requirements so it can be worth applying to
these jobs even when you don't perfectly match them.

The application process was very exhausting. The good news is that there's no
shortage of positions on LinkedIn or other sites that you can apply to. The bad
news is that repetitively filling out applications is extremely boring. I could
have sworn that I applied to hundereds of jobs until I counted them.
My recommendation for applicants is to break it up and try to apply to a few
places every day. Don't get discouraged if you are not getting a lot of
responses: looking at what LinkedIn reports, most job listings get tens if not
hundereds of applications so sometimes your application might just get lost in
the flood.

## Interview Process

The interviewing process varies from company to company, but there's often a
general flow they all follow:

- You'll first get an interview with a recruiter from the HR department. Their
  questions are typically surface-level questions like "do you have experience
  with AWS?" or "how many years of experience do you have with javascript?".
  Keep in mind that this person most often will have no technical knowledge, so
  for example they wouldn't know that listing "Next.js" on your resume implies
  you know React.
  
  They will also typically ask you what range of salary you are looking for. It
  can be hard to come up with a number especially for your first job, but you
  should look up average salaries and figure out a range you think is good. If
  you can't come up with anything, I don't think it hurts to ask what range they
  are looking for. I did this once and figured out that the pay range they were
  offering was just far lower than what I would accept.

- The next step is usually a technical challenge. In most cases for me this was
  a pair-programming exercise, although I've also had a take-home programming
  challenge. What sort of challenge you get here depends heavily on the company
  and the interviewer. Usually it is an opportunity to just chat with you and
  see how you think about problems, but sometimes it can be a "can you solve
  this puzzle".

- What happens after the technical challenge is a lot more varied: some places
  go with the typical "tell us what your strengths are" kind of interviews, some
  do whiteboard high-level design, and some just want to chat with you.

The biggest thing to remember is that the interview process isn't just for the
company to vet you, but for you to vet the company as well. If the interviewer
is being harsh towards you, or the process demands too much of your time (I had
one company who wanted to do an 8-hour "virtual on-site" followed by more
technical interviews!), or if you just get a bad vibe from the people you are
talking to; don't be afraid to say no. Luckily software jobs, even heading into
a recession, are plentiful so you don't have to be stuck with a place you hate.

### Remember to ask questions!

Talking about you vetting the company, you should make sure to prepare some
questions to ask. Make sure you ask about anything you are curious about or
anything that's a dealbreaker for you.

If you're not sure what to ask, there are [a lot of resources
online](https://hackernoon.com/what-to-ask-an-interviewer-during-a-tech-interview-865a293e548c)
for examples. I like to ask a mix of "people questions" (e.g. how big is the
team, is it a new team or an existing one that you are expanding etc.), technical
questions (how do you do code reviews, are there any standard tools you use etc.),
and company culture questions (do you work overtime and how often, is the design
process collaborative etc.).

### Take notes

Maybe you have a great memory and can remember every little detail, but I can't.
I always take notes during my interviews. I'll write down the names and roles of
the people I'm meeting, and any important points discussed. I'd strongly
recommend doing this because you might need to go back and reference things
later when you need to make a decision.

## Interviewers: what not to do

I'm not going to shame any companies or recruiters here, but a few bad
experiences stand out:

- One job listing I applied to was extremely vague about what I might work on:
  this was a big Fortune 500 company that's not a "software company" so it
  wasn't clear what I might even work on. When I asked the recruiter for
  details, they only knew what was written on the job listing.
    - I think job listings should be clear about what the role entails, and
      recruiters should have some knowledge of what the role is.

- At a technical interview, the interviewer seemed to be unhappy with my
  solution and wanted me to explore a different way of solving the problem.
  That's totally fine, but the interviewer would not tell me what was wrong with
  my solution or what sorts of issues I should consider. Instead, they just kept
  repeating "but how else would you do it".
    - Remember that the interviewee can't read your mind. Treat the interview
      like a code review: you wouldn't tell a coworker "this is bad, fix it",
      you would tell them what's wrong. See if the interviewee can handle
      constructive criticism and change their design to solve the issue.


