Job hunting can feel like shopping for a new car.
At first, it’s exciting and full of promise. As you start your research, it feels less and less exciting. There are so many options. How do you choose?
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. Many things can go wrong but the rewards can be great, particularly if you wind up at one of your dream jobs.
In this post, I’ll share lessons and personal war stories to help you get through a job hunt and land the right tech job for you.
For background, I recently completed a job hunt of my own and wound up at ChowNow.
Over a 3 month period, I:
- Applied to 25 places
- Interviewed with 9 companies over the phone
- Completed 6 technical interviews
I interviewed about 20 technical candidates for previous jobs too. I’ve been on both sides.
Opportunities can arrive from many different places. You may find them through job postings, recruiters, or friends at other companies. It can be tough to sift through your options to find the good ones.
Check job sites
I think there’s something to the saying that “the best jobs aren’t advertised”. That said, most tech companies want to hire great talent. They tend to leave job postings up even when they’re not looking, just in case someone comes along.
Sites I’ve used:
- 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 also 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 but did not find any good fits.
- Stack Overflow Careers: Pretty good and easy to browse. It’s how Stack Overflow supports itself, so worth a look I think.
- Triplebyte: A startup / recruiting company. If you pass their interviews, they’ll help you apply to YCombinator startups. That currently means you can bypass the application and initial phone screen. I think it’s good to practice for technical interviews and this offers a low-risk way to do that.
- Hired: Similar to Triplebyte. Apply once, get offers from a few companies if it’s a good fit. This is a referral link.
If you’d like to work remote:
Look into local options
Larger companies have satellite branches that may be an option for you, if you’d prefer not to move. For example, Microsoft and Google have satellite branches 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. You’ll want to turn off your activity notifications.
If you’d like to move, set your city to the place you’d like to go. Recruiters tend to search in the company’s local area for talent. I worked with someone 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 positives:
It’s 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 also be willing to share what it’s like to work at their company. Finally, I’ve made a few good friends through meetups.
You may pick up new ideas from meetup presenters, which you can discuss in interviews.
If you’d like to improve your public speaking skills, meetups allow you to practice. Presenting at meetups can make you feel like you’re an expert in some area and deepen your knowledge. During interviews, I felt more comfortable talking about topics I presented.
Let’s say you found a few places to apply. What’s 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 left it on my resume because I felt it would be relevant. I got questioned about it at every single interview. 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’re putting the most relevant skills on it, I think you’ll do fine.
If you have questions about your resume, you can send it to me and I’ll offer some feedback as well.
Keep a spreadsheet to track where you apply
I kept 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 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, too 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 and that’s true 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. If you’ve never meditated, I like Mindfulness in Plain English for beginners.
Plan on applying and interviewing at more than one place
A friend of mine applied to one place, interviewed there, and got the job. He feels fortunate that it worked out so well but he also wishes he had applied to other companies too because:
- It gives you a better understanding of your options.
- It prevents you from fixating on a single company.
- You may need to hire others. Having more experience with interviews can be helpful when you’re on the other side.
If you don’t know how many companies to apply to, you can apply the Secretary Problem algorithm. Basically, you interview with a few places and pick the next one that looks better than the rest you’ve seen.
Determine your salary range
Glassdoor has ways to find salary ranges and you can use Payscale or Salary.com. The numbers may not be perfect but they offer an overview of your job market. I’ve also seen some excellent salary guides for those in tech.
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 but avoid saying anything too 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
Sometimes it’s possible to address the reasons that drove you to look for another job. If you’re already looking, it may be too late to fix them for yourself. It’s still worthwhile to try to fix the problems, even in your last few weeks at the company. It may improve things for your colleagues that stay behind.
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 sharing a project on GitHub.
For others, it means writing a blog (like this one!). I featured my website on my resume. It felt like maybe 60% of interviewers or so had looked at my blog when I applied.
I would say this category is a “nice to have”.
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 can be a good way to communicate your understanding of 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.
When you practice, try to practice in an environment as close as possible to the one you’ll be in in the interview. In general:
- Write your solution on a whiteboard or piece of paper first without looking anything up.
- Walk through your solution and look for errors.
- 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.
- Cryptopals: A set of cryptography-based problems that does not assume prior crypto knowledge. It’s a nice way to practice because it also gives you some insight into cryptography.
- LeetCode: More online problems.
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, so don’t feel bad if you don’t complete all the exercises. I’ve never done more than 5-10 exercises in any one of these.
Tech interviews usually don’t vary much from place to place. Here’s the most common process I’ve seen:
- Phone screen with recruiter (45 minutes)
- Technical phone screen (45 minutes to 1 hour)
- On-site technical interview (3 to 6 hours)
- On-site culture fit interview (2 to 3 hours) - less common
- Offer / negotiation
Interviewing goes both ways
You want to get a sense of whether the company will be a good fit for you as much as they do. It’s easy to forget that it’s bi-directional and focus on impressing them. They 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. It’s tough to keep all the dates in your head so use a calendar.
I recommend lunch time slots if you have phone interviews and you’re still employed. Some companies will let you interview before or after traditional work hours. That’s less common.
Bring a notebook
I liked keeping a small notebook and pen with me throughout the interview process. It’s easy to forget details if you don’t write them down. I like writing down the name of interviewers too so I can remember their names.
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’re proud of it. It’s not macho or cool to forgo a work-life balance and live at the office.
Working that much has driven me to burnout before. 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 would bad-mouth them in an interview, it’s not a good sign.
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 would move to SF.
If they’re not up-front with me during the interview process, what would it be like to work there? What other expectations would they have? If I don’t feel like I can trust the company, that’s a serious red flag.
Research is an interview secret weapon. A little extra work can give you a leg up 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?”
Although I think that’s a terrible approach, that kind of thing can happen. General questions I like to ask 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?
Your list may differ.
Research the company
I like to ratchet up the amount of research I do on companies as interviews progress. This is what I do for each stage, depending on the company:
- Initial phone calls: Reviewing the website and figuring out if their product feels like enough to get by.
- Phone screens: I read their blog posts and read through their reviews. If they make an app, I try it out.
- 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?
Be careful, though, because you can go too far with this. Don’t stalk anyone.
Most phone interviews I’ve done do not involve coding. It’s tough to communicate perfect code over the phone.
The 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 you’ll get more challenging 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 will
- Be quiet.
- Let you focus.
It’s helpful to pick a secluded place. If you’re currently employed, there’s nothing worse than worrying about getting caught than actually getting caught. Your spot could be 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 can be friendly and helpful. They want you to find a job that you’ll enjoy. That said, you are a paycheck for them if you’re placed with their company. They may be aggressive or go for the hard sell.
One example. I talked 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.
Recruiters can be helpful too. This is a reminder to be careful out there.
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.
I haven’t been able to avoid offering a salary range to recruiters on the phone. 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.
If you make it past the phone interviews, you’ll progress to the on-sites. On-site interviews take about 3-6 hours, depending on the company. Most companies will fly you out if you’re remote for a full day of interviews.
In my experience, they tend to be with groups of 1-3 people and you meet with a few groups. Some companies, like Uber and Google, do a series of one-on-one interviews. Others prefer small groups.
These interviews open with questions about your experience, like those we’ve already covered. After that, the interviewer will likely ask more questions to get you comfortable. Sometimes they will ask questions about projects you’ve worked on or personal interests.
You can expect a few different algorithm and scenario questions. We’ll cover both of those.
Tips for 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. It’s tempting to think through problems in your 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. It can be easier to solve the problem without writing perfect code, at least at first. If you do, it’s a good idea to explain that you’ll write pseudocode first and write code for it afterward. It’s also okay to solve it by brute-force, as long as you explain that it’s not your final solution.
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 want to use a queue? We talked about Big O notation earlier. It’s good to mention what you think the runtime of your algorithm is when you complete it.
Check for mistakes. When you feel like you’re done, 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, it’s especially important to 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.
If you’d like more suggestions, I recommend:
Congratulations! You passed your interviews and you have an offer! That’s awesome.
Here’s a few things to keep in mind.
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 found that it’s not a good fit. Let the company know as soon as you do if you don’t think it’s for you so you can save each other’s time.
If you’re offered equity, determine its worth
The short version: Your options may be worth $0, so it might be easiest to ignore them.
If you’re looking for numbers, there are many resources you could consult. 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.
Patrick Kalzumeus wrote an excellent and popular article on how to negotiate. It’s worth your time to read it.
Don’t feel bad about negotiating - it’s what you’re supposed to do.
You can negotiate on points other than just the 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’d like to work from home for a day or two a week.
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’re interested in reading (somehow) even more, I like these articles: