Job hunting can feel like shopping for a new car. At first, it’s exciting. Over time, it feels intimidating and hopeless. There are so many options. Once you have a car you’re interested in, you may need to check many dealerships to find a good deal. You may have to negotiate, which feels uncomfortable too. It’s a big headache.

Job hunting, like car shopping, has great moments. For the most part, though, it requires time, effort, research, and facing challenges. If you navigate the process successfully, you may wind up at one of your dream jobs.

In this post, I’ll share lessons and personal experiences to help you get through a job hunt and land the right tech job for you.

Personal Stats

In late 2015, when I originally published this article, I completed a job hunt and joined ChowNow.

Over a 3 month period, I:

  • Applied to 25 places
  • Interviewed with 9 companies over the phone
  • Completed 6 technical interviews

I updated this article in early 2018 when I joined the Amazon Prime Video team as a software engineer. I used many of the tips in this guide and added a few new ones.

In addition, I interview technical candidates, so I have seen the interview process from both the candidate and interviewer’s perspective.

Finding Jobs

Opportunities can arrive from many different places. You may find them through job postings, recruiters, or friends at other companies. Let’s discuss a few popular options for finding new opportunities.

Check job sites

Companies want to hire great talent. They may leave job postings up even when they’re not actively looking, just in case someone great (hopefully you!) comes along.

Sites I use to find new opportunities:

  • Hacker News - Who’s Hiring?: Posted on the first of each month. I like that it gives you a direct line to someone who works at the company. It feels more personal than most job postings.
  • Glassdoor: Glassdoor lets you read reviews from employees at different companies. As with all internet reviews, take what you read with a grain of salt.
  • Angel List: Mostly for startups. I applied to a few companies through here and did not find any good fits.
  • Stack Overflow Careers: Good and easy to browse. Stack Overflow supports itself through its career page.
  • Triplebyte: A startup / recruiting company. If you pass their interviews, they help you apply to tech companies. That currently means you can bypass the application and initial phone screen. Triplebyte offers a low-risk opportunity to prepare for your technical interviews. This is a referral link.
  • Hired: Similar to Triplebyte. Apply once, get offers from a few companies. This is a referral link too.

If you prefer to work remote:

Look into local options

Larger companies may have a local satellite office, if you prefer not to move. For example, Microsoft, Amazon, and Google have teams in Los Angeles. Companies such as Snapchat, Tinder, and Riot Games have their headquarters in LA as well. You may find some surprises if you look around.

Configure LinkedIn to work for you

Coworkers may notice changes to your job description or personal details if LinkedIn broadcasts them. Turn off your activity notifications.

If you want to relocate, set your city to the place you want to go. Recruiters search in the company’s local area for talent. I worked with an engineer that did this and it led him to a new job. He didn’t get help with relocation but many companies offer that as well.

Finally, review what you have on your profile and see if it reflects the kind of job you want next. Do you list QA-related skills but want to build web application APIs? Reorganizing your profile can help present a clear picture of where you want to go. In addition, it may attract opportunities that better fit your goals.

Attend local meetups

Whatever your interest in tech, you can find a local Meetup group for it. Attending them has several benefits:

  • Meetups offer a great way to find other places to apply. Companies host meetups to attract candidates, foster good will, and promote their engineering culture. As a job seeker, those all work in your favor.

  • You can talk with other developers in your community, which has its own benefits. It exposes you to different technical perspectives. Other people may share their experiences working at their company if you ask politely. Finally, I made a few good friends through meetups.

  • You learn about new technologies or ideas from meetup presenters, which you can discuss in interviews.

  • Meetups allow you to improve your public speaking skills. Presenting at meetups can make you feel like an expert in some area and deepen your knowledge. During interviews, I felt more comfortable talking about topics I presented.

Application Preparation

Wonderful, you found places to apply! What do we do next?

Update your resume

Organize your resume to what you want to do, as with your LinkedIn profile earlier. Keep it short. Focus it on what you achieved at previous positions rather than your responsibilities. For example:

  • “Responsible for database management with MySQL and Percona.” - ok
  • “Optimized query times for 10 most common queries yielding 30% improvement in MySQL performance.” - better

This article has a set of recommendations in it as well.

I once applied for a tech job at a company that serves the film industry. I had experience as a film colorist and put it on my resume because I felt it showed I had industry experience. Every interviewer asked me about that. It usually went like this:

Them: “Are you sure you don’t want to be a colorist?”

Me: “Yes, that’s why I’m applying here!”

Them: “You mean you don’t want to work in the film indstry?”

Me: face palm

I hope that does not happen to you. If you craft your resume so that you put the most relevant skills on it, I think you will do fine. If you have questions about your resume, you can send it to me for feedback.

Keep a spreadsheet to track where you apply

I keep a Google Spreadsheet with:

  • A list of the places I applied
  • A description of each position
  • Dates for each interview
  • Notes or thoughts about the position

Detailed notes can help you decide which company to choose. If you have the good fortune of receiving more than one offer, they’re especially useful. Finally, if you don’t pass an interview, your notes may help you if you apply again later.

Keep a positive attitude

A job hunt can challenge you in unexpected ways and it may take longer than you think. Keeping a positive attitude can help you through the tougher parts and doubt.

I looked for an apartment with my girlfriend (now wife) for a long time. We had a fixed price range and a firm idea of where we wanted to live. In our search, we found many places that looked dumpy, small, or “not for the culinary wizard”. In the last case, the “kitchen” had only a hot plate and dorm fridge. We looked at 30 apartments until we found the right one for us.

Stick with it, even if it feels impossible. It’s always hard looking for a new job, even though we have the great fortune of working in tech.

I find meditation and exercise helpful for dealing with feelings of frustration or worry. I recommend Mindfulness in Plain English for beginners.

Plan on applying and interviewing at more than one place

A friend applied to one place, interviewed there, and got the job. He feels fortunate that it worked out but he wishes he had applied to other companies too because:

  1. It gives you a better understanding of your options.
  2. It prevents you from fixating on a single company.
  3. You may need to hire others. Gaining experience with interviewing gives you a good base for building out an interview process.

If you do not know how many companies to apply to, you can apply the Secretary Problem algorithm. Basically, you interview at a few places and pick the next one that looks better than those you have seen.

Determine your salary range

How?

Glassdoor has salary ranges for many employers and you can use Payscale or Salary.com. In addition, I found some excellent salary guides for those in tech.

More recently, Paysa, levels.fyi, and Team Blind appeared as options for scouting salaries at bigger companies.

If all else fails, you can take your current salary and bonuses and add 10-20% for a starting range.

What do you want?

The two most common questions interviewers asked me:

  • Why do you want to leave?
  • What would you like from your next job?

Answer with honesty and avoid saying something negative.

  • “x and I never got along, I had 8 bosses, and we had a horrible legacy codebase. To make matters worse, I never got anything done with all the meetings.” - not good
  • “I’ve tried to change x y and z but could not make a meaningful impact on them. I’m ready for a new challenge.” - ok

Before leaving, you can address the reasons that you want to find a new job. I think you will find it rewarding if you try to fix the root problems, even in your last few weeks at the company. Your colleagues that stay behind will appreciate your efforts.

Show your passion

Interviewers love to see that you have an interest in tech beyond your day-to-day work. For some, this means getting involved in the open source community or open-sourcing a project on GitHub.

For others, it means writing a blog (like this one!). I featured my website on my resume. It felt like a majority interviewers had looked at my blog when I applied.

I would say this category is a “nice to have”.

Interview Preparation

As you prepare your application, you should also prepare for the interviews that follow. Here’s some areas to focus on:

Datastructures and algorithms

Unfortunately, algorithms still play a large part in the tech interview process. As an industry, we haven’t figured out how to determine who will excel. Interviewers use algorithms as a proxy to test how you think and communicate.

Understand the most common data structures and when you might use them. It will help you find the solution for many algorithm questions. If you pick the right one, it can make certain questions easy.

I’ve used these resources to prepare:

  • Cracking the Coding Interview: A great review of data structures with examples of algorithmic questions you might encounter. I think that reviewing this is one of the best uses of prep time, especially if you have an interview coming up soon.
  • Big O Cheat Sheet: Big O notation is a way to talk about how long it will take an algorithm to run. Interviewers may ask you about the efficiency of the algorithm you use. Big O offers a good way to communicate your understanding of an algorithm’s efficiency.
  • The Technical Interview Cheat Sheet: Another list of common data structures and algorithms with information about them. This one is a good memory refresher.

If you have more time, I recommend Coursera’s Algorithms: Design and Analysis course. It’s an online course, so it’s more of a commitment.

Practice problems

When you practice, try to practice in an environment as close as possible to your interview environment. In general:

  1. Write your solution on a whiteboard or piece of paper first without looking anything up.
  2. Walk through your solution and look for errors.
  3. When you’re confident with your answer, type and run the code on a computer.

Many websites offer practice problems. I’ve used the following:

  • Project Euler: A collection of free math-based programming problems.
  • LeetCode: This is the best resource for finding test problems, in my opinion. Some interviewers will pull directly from this site. Start with Easy problems and work your way up.

If you picked up Cracking the Coding Interview, it has practice problems in it too. It can take a while to work through even one problem.

This activity offers one of the highest returns-per-hour activities available to you during a job hunt. Doing well on your technical interviews can put you in a stronger negotiating position later.

Interviews

Tech interviews vary from company to company. Here’s the most common process I’ve seen:

  1. Phone screen with recruiter (45 minutes)
  2. Technical phone screen (45 minutes to 1 hour)
  3. On-site technical interview (3 to 6 hours)
  4. On-site culture fit interview (2 to 3 hours) - less common
  5. Offer / negotiation
  6. . . .
  7. Profit?

General Advice

Interviewing goes both ways

You want to find out if you want to work at the company as much as they want to discover if you have the skills necessary to work there. I sometimes get caught up in impressing the interviewers and forget that the process works in both directions. Your future colleagues should impress you as well.

Add interviews to a calendar

You may have a few phone screens and on-site technical interviews ahead of you. Use a calender to make it easier to keep track of all the dates.

I recommend lunch time slots if you have phone interviews and you’re still employed. Less commonly, companies will let you interview before or after traditional work hours.

Bring a notebook

I like keeping a small notebook and pen with me throughout the interview process to write down the names of my interviewers. I will usually also prepare questions for each interviewer before coming to the interview so I do not need to come up with something on the spot.

Keep an eye out for red flags

Everyone has a different set of red flags. Here’s a few I’ve seen:

  • “We have no work-life balance. We come in at 6 AM and leave at 10 PM.”

The way the interviewer talks about their crazy hours makes it sound like they feel proud of it. No one should take pride in living in their office. I burned out working that much in the past and learned my lesson. Adding more time to the workday does not make you more productive.

  • “Our team is super green and doesn’t know what they’re doing. I look at everything they commit and have to approve it.”

This does not sound like an environment built on trust and distributed responsibility. Also, if the manager does not have faith in their team and speaks poorly of them in an interview, avoid that company.

  • Untrustworthy

I interviewed with $BIG_TECH_CO in San Francisco. A department manager contacted me for an interview and said that they allowed for remote work. I said “Great!” and we discussed next steps.

I passed the phone interview and the position went from full-time remote to remote after 4 months. Once I completed the on-site tech interview, they offered me the job but only if I wanted to relocate to SF.

If they hide the true nature of the job during the interview process, what would they do once I work there? What other expectations would they have? If I don’t feel like I can trust the company, I view that as a red flag.

Research

Research can give you an advantage during an interview. Candidates don’t often prepare enough. If you do, you can ask better questions and show that you care about the opportunity.

Prepare questions to ask

I once had a phone interview that started at 7 PM. The interviewer called me and opened with:

“Hello! I don’t want to waste your time, what questions do you have for me?”

Thankfully, I had prepared a set of questions about the company and their development process. General questions I like to ask as a candidate include:

  • What’s an average work week like?
  • How is the software team organized?
  • What process does a feature follow from idea to delivery?
  • What’s one of your favorite things about working at the company?
  • What would you like to change?
  • What are you most proud of accomplishing during your time at the company?

Your list may differ.

Research the company

I like to ratchet up the amount of research I do on companies as interviews progress. Depending on the company, I prepare the following:

  • Initial phone calls: Reviewing the website and figuring out their product feels like enough to get by.
  • Phone screens: I read their blog posts and read through their reviews on Glassdoor. If they make an app, I try it out. For example, when I joined ChowNow, I placed an order at two of their restaurants.
  • On-site interviews: I read up on recent news articles about the company and research talks their employees have done.

This allows you to get a good understanding without requiring an up-front time investment. It becomes more important to prioritize your time as you apply to more companies.

Research your interviewers

If you know who will interview you, it can help to learn more about them so you can prepare better questions. Do they have open source projects? Have they given conference talks? If so, can you find a recording?

Use common sense here because you can go too far. Do not stalk anyone.

Phone Interviews

Phone interviews I participated in in my earlier job search did not involve coding. In my more recent search in 2018, a majority of the companies I applied to asked algorithmic questions during their phone screens using a shared document like Google Docs.

The non-technical questions I’ve heard include things like:

  • Tell me about yourself
  • What project are you most proud of? Why?
  • What interests you about the position?

Sometimes for the technical phone screens, your interviewer will ask deeper questions. One example is “ what happens when you type https://www.<company>.com in your browser?”

Find a comfortable place to talk

It’s important to pick somewhere that offers

  • Quiet.
  • Focus.

Pick a secluded place where you don’t have to worry about being caught. You may find your interview spot in a parking lot near work or at your kitchen table.

I once left my keys in my car during a phone interview and my car wouldn’t start afterward when I had to return to work. Don’t do that.

Recruiters are not your friends

Recruiters want you to find a job that you’ll enjoy. That said, for external recruiters, you represent a potential paycheck for them. They may go for the hard sell.

I spoke with a recruiter and the company he represented wanted to move forward. I said I’d like time to think about it and I’d email him back that evening. He told me not to waste his time or lie to him and that “I obviously wasn’t going to email him”. That sealed my decision to not move forward.

A friend of mine negotiated his contract with a recruiter. The recruiter promised things to him that they had no control over. For example, they said the company would re-evaluate his salary every 3 months. That didn’t happen. The recruiter had no influence on that process.

Many recruiters only have your best interests in mind. I offer these stories as a reminder to use caution with external recruiters. Internal recruiters, in my experience, have no incentives to act poorly.

If you must give a salary range, anchor high

Early in the process, your interviewer will try to get you to offer a salary range. Avoid it if you can.

It’s worth asking for what you want or a little more so you’ll have room to negotiate down the line. We’ll cover negotiating in more detail later.

On-site Interviews

If you make it past the phone interviews, you progress to the on-sites. On-site interviews take about 3-8 hours, depending on the company. Most companies will fly you out for a full day of interviews.

In my experience, companies structure their interviews so that you speak with groups of 1-3 people for up to an hour at a time. Some companies, like Uber and Google, do a series of one-on-one interviews.

These interviews open with questions about your experience, like those we covered. After that, the interviewer asks more questions to get you comfortable. Sometimes they ask questions about projects you’ve worked on or personal interests.

You can expect a few different algorithm and scenario questions, which we cover below.

Tips for algorithm questions

Examples of algorithm questions

Ask clarifying questions. There’s a famous question about sorting a list of 1 million integers. The initial question does not mention that the numbers represent ages. If you know that, you can sort the integers into at most 150 buckets. If you ask questions about the problem, you might find a shortcut.

Think out loud. We solve problems in our head. Unfortunately, that can work against you in a coding interview. If you think aloud, you show how you approach problems and give the interviewer a chance to help you out.

Solve it with pseudocode first. Solving the problem without writing code can save you precious time during an interview. Explain that you will write or discuss the problem in pseudocode first and then progress to the actual code.

Consider efficiency. Think through different data structures you might use and the trade-offs for each. When would you use a dictionary / hash map? When would you use a queue? We talked about Big O notation earlier. Mention what you think the runtime of your algorithm is when you complete it.

Check for mistakes. When you feel like you finished, trace through your solution. Look for any mistakes or areas where it would fall apart. Did you miss an edge case? What happens if the list is empty? How might it fall apart in production?

Tips for a Scenario Question

An example scenario question:

“How would you architect an upload workflow for a SaaS application?”

I like to solve these from a high level and fill in details afterward. In the case of scenario questions, explain your approach and think aloud. A complete, thoughtful design matters more than the code for this kind of question.

For example, for the above question you might want to consider:

  • How will the user interact with the server?
  • What kind of HTTP methods would they use and why?
  • What should the endpoint(s) look like?
  • How would you handle background processing?
  • What would you do to prevent something going wrong?
  • What steps would you need to take to secure it?

No one expects you to know the answer immediately

Interviewers want to see your thought process and if they can work with you to get to the answer. If you get stuck, remember to

  • Re-examine the original problem for clues.
  • Take your time.
  • Consider aloud solutions that don’t work (and reasons why).
  • If all else fails, you can ask for help.

Futher Reading

If you’d like more suggestions, I recommend:

Offers

Congratulations! You passed your interviews and you have an offer!

You don’t have to take it

If you get an offer, it does not mean you have to take it. Over the course of the interview, you may have discovered that you would not like to work at the company. Let the company know as soon as you feel that way to protect each other’s time.

If you’re offered equity, determine its worth

The short version: Your options may have no value, so you may choose to ignore them. RSUs have a real value.

I think this guide is the easiest to understand. Beyond that, I recommend reading How to value your startup stock options and Things you should know about stock options.

Always negotiate

Don’t feel bad about negotiating.

Patrick Kalzumeus wrote an excellent and popular article on how to negotiate. I strongly recommend it. Haseeb Q wrote my other favorite guide, the wonderful Ten Rules for Negotiating a Job Offer.

You can negotiate on points other than salary. For example, would you like to take classes outside of work that they could reimburse you for? What about vacation days? Would you like to attend a conference later in the year? Perhaps you want to work from home for a day or two a week.

Conclusion

I hope that this guide helps you better understand the process and helps you find a satisfying new job. If it does, please let me know!

If you want to read even more, I like these articles:

The cscareerquestions subreddit has useful posts and discussion as well.