Late last year, I left a software engineering position and went on a short hiatus to take a breather, spend time with my family, and to think about how I would like to advance my career.
In recent weeks, I've started to look for a new job and this has put me through the paces of the tech job interview process.
The interview process can be a little scary if you haven't been through it before. In this post, I want to give an idea of what to expect and to share a few things I've experienced and learned during this recent job search.
The majority of the companies I spoke with are based in San Francisco and ranged from large Fortune 500 companies to very small companies looking for early engineering hires.
The interview process
While each company handles their recruiting pipeline differently, in my experience, the general process is:
- An initial phone call with a recruiter.
- One or more technical phone screenings.
- An in-person, on-site interview with the engineering team.
- An offer or rejection call.
A recruiter would reach out to me to talk about the open position and gauge my potential fit and interest. They will talk about the company, its products, and give a general outline of the role and responsibilities. Some recruiters are more technical than others and will answer questions about the technology and tools used by the engineering team.
They will then ask about my availability for a technical screening.
These calls last for about 30 mins, sometimes less.
I would be scheduled to chat with an engineer for an hour on the phone. The engineer will introduce themselves and ask me to chat a little about my past experience or talk about a previous projects at a technical level.
They will then pose one or more coding problems to me to solve. I'd usually work on the problems through a shared online code editor with the engineer evaluating my solutions in real-time. Collabedit, HackerRank, and Coderpad are commonly used editors in technical screenings.
Finally, if there is any time left, I'd have a chance to ask the engineer about their perspective on the role or the company.
Some companies have asked to schedule more than one of these technical screenings.
A couple companies have given me a take-home coding exercise to complete within a few days before a technical phone screening is scheduled. These were more substantial than the on-the-phone coding problems, and less stressful.
If all goes well with the previous steps, I'd be invited to an in-person, on-site day of interview sessions. These are typically scheduled to last 5—6 hours.
Upon arrival I may get a quick tour of the office before I'm escorted to a conference room. At this point, I would be interviewed by a series of company staff, each session is usually scheduled to be 45 minutes but may take an hour or longer.
Some would pose coding exercises for me to solve on a whiteboard. Others wanted me to discuss technical details about projects I've done previously or to whiteboard a technical design for a hypothetical service or product.
Depending on when interviews are scheduled, there may be a break for lunch, where I may get a chance to meet some more engineers.
About half of the time, the final interview session
would be with a member of the senior-level management: an engineering director, VP of Engineering, CTO, or CEO. These conversations can be less technical, in which case I will ask questions about their product and business.
After the interviews, I might finally get a tour of the offices, if I haven't already. Sometimes the recruiter will circle back and tell me that they will get back to me as soon as the team decides on whether to continue on to the next step.
Offers or Rejections
At the end of the interview process, the recruiter will email or call to say they don't think I'm a good fit for the company or to express interest in making me a job offer.
To give an idea about what it takes to get to an offer or rejection, here are numbers from my recent job search:
- 40-ish leads
- 16 initial phone calls
- 8 technical screening calls
- 4 on-sites
- 2 offers
Track of your job leads. Use a spreadsheet, Post-it notes, or a Trello board to keep track of which companies you're talking to and which stage of the process you're at with each of them.
Many coding problems are unlocked by knowledge of some data structure or algorithm. Increase your chances of reaching a solution by brushing up on the following topics, in no particular order:
- Recursion: head- vs. tail-recursive, effects on the call stack
- Breadth-first vs. depth-first traversal of trees and graphs
- Big-O of hash table and linked-list operations
- SQL: different types of JOINs, sub SELECTs, GROUP BY and HAVING clauses.
- Regular expressions
- Uses and properties of basic data structures like stacks and queues
I could write more about this, but I don't think I can do better than Triple-byte's excellent article on how to prepare yourself for coding interviews.
Prepare a short and compelling introduction about yourself. You will be asked to introduce yourself many times when talking to recruiters and interviewers. Interviews sessions are usually only 45 minutes long. Give yourself as much time as possible to work on the coding problems by keeping your introduction concise.
Bring a small snack and some water to the on-site interviews. Food and water will keep you energized and focused. Bring snacks that can be quickly and discreetly eaten between interview sessions.
Invest in professionally photographed headshots. Find a local professional photographer and book an hour or two them. Use these headshots in your LinkedIn and Github profiles.
The most qualified job leads come from friends and former colleagues, but I've also had excellent luck with the following sources:
Be courteous and professional. It's said the tech industry is small, but the circle of good helpful people is smaller yet. Remember that recruiters and your interviewers change jobs and move between companies. Help them remember you positively.