Friday, June 28, 2019

Getting Into the Proper Mindset for Technical Interviews

Most books that talk about the technical interview process have a lot of suggestions for how to properly prepare for the technical questions (aka Leetcoding) or the behavior questions (a la Amazon).  However, if you haven't had a lot of recent practice at interviewing or are relatively new to the interview process (e.g. new grads), then there's a lot of room for misunderstanding about how best to prepare mentally and emotionally for interview.

Listed below are a bunch of ways to look at the interview process.  None of these are guaranteed to work 100% for everyone, but try reading through them and pick out what you think works best for you.

The Interviewer POV

I have done interviewing at every company I've worked at and here is my process:
  • Read the resume for at least 15 minutes.  Look for interesting things to talk about, patterns in employment, potential strengths and weaknesses based on experience.  Make some notes about what to ask the candidate.
  • Get to the interview room on time.
  • Go in, introduce myself, and evaluate candidate's condition.  Always ask about water/food/bathroom.  If they seem nervous or tired, maybe start with casual conversation.  If not, start with the "hard" question (technical or system design) early so that we don't run out of time.
  • Always leave time at the end to answer questions.
  • Do the "hard sell" for immediately promising candidates (usually the top 5% or so).
  • Take continuous notes on my laptop.  I'm looking for some of the following traits:
    • Technical competence
    • Ability to recognize and solve problems
    • Clear communication ability
    • Enthusiasm for any specific technical subjects
Also, here's how my day can look: meeting, meeting, meeting, interview slot, meeting, meeting, short break to do some programming, meeting, code review, meeting.  As you can imagine, many engineers could have the same schedule.

So, what's the point of telling you all this?  Here's why:
  • Most interviewers will be understanding and conscientious--some will not be. For the latter group, realize they are not annoyed at you, they are just a bit harried from their entire day of running around.
  • For the conscientious ones, you can ask them questions about the company and likely get more honest answers.  You may still need to read between the lines, but you can get more insight about what working at that company might be like.
  • You're there to evaluate the company.  If you see nothing but nice and empathetic people, then it's likely the company has more of those people.  If you get nothing but rude interviewers, I'd consider it a red flag about the company.

Find the Right Mindset

There are lots of ways to approach the interview process. Here are some of the ones I've used for myself:

No One Wants You to Fail

Everyone doing the interview wants to find a good candidate.  Some people and places are going to be very picky--most will not be.

Make Your Explanations About Your Thought Process

Most interviewers do care about you getting the problem right.  However, what they really want is to find their next coworker--a peer.  If you just go to a whiteboard or laptop and just bang out a bunch of code, there's no interaction for them to judge.  If you explain your thought processes the entire way ("I'm choosing an array here because I can get it done faster", "I'm using a tree here so that searching will be faster", etc.) then it's much easier to understand where your strengths/weaknesses will be.

If they follow up with an enhancement to the problem, that's good. It may not be possible for you to solve.  If so, ask questions or explain what you do know  Good interviewers will give you a hint that may let you solve the problem.  This is not about you knowing everything--this is a back and forth interaction that gives the interviewer something to work with.

Treat Every Interviewer Like Your Peer

This is one of my favorite approaches.  If I plan on working at that company, everyone who interviews me will become my coworker.  In doing so, I try to treat everyone like a coworker I want to help out.  Sometimes, a coworker won't know about a particular part of the system or why the code is designed in a particular way and I have to explain it to them.  With that mindset, it's trivial for me to stay pleasant and explain what's going on with any technical problem.

Have Some Faith in the Interview Process

It's easy to go into an interview an think "if I don't do well here, it's all over".  Instead of taking such a nihilistic mindset, try to understand that most companies are looking for a few positive traits and being a bit conservative on any red flags.  Also, company cultures vary widely.  Sometimes you'll be a fit and sometimes you won't.

Looking at it another way, if a bunch of people who interview you don't think you'll be a good fit and the manager/director/VP overrides them and you join, would you really want to work with all those people who interviewed you?  Probably not.  Instead, going to a place where everyone is enthusiastic about you starting there is likely going to be a much better workplace experience for you.

Rejection is Not Always About You

Having been behind the scenes (phone screen, interviewing, talking to managers) of the interview process, getting rejected is not always about you.  Some scenarios that can happen:
  • Reorgs and budget cuts can radically alter what sort of personnel a company is looking for and can shift the number of types of job openings.
  • Good companies try to make sure that the team has enough bandwidth to onboard anyone new and mentor any new grads.  One senior engineer cannot do this for a dozen new grads.
  • Company politics can play a part.  If a manager liked you, but the director or VP had something else in mind or were having conflicts with the manager, the manager and interviewers can be overruled

Remember, You're there to Evaluate the Company

This does not mean you should be asking about work-life balance or being able to take vacation right away.  You should be evaluating for whatever cultural fit that might be there for you.  You should also be asking questions about productivity, the tech stack, and the actual job.  Sometimes, it's good to ask just to make sure that you're actually interviewing for the position you think you are.  Bad companies will sometimes pull a bait-and-switch job on you (e.g. giving you a manual QA job instead of a QA automation job).

LPT: Watch out for Behavioral Traps

Sometimes companies won't ask behavioral questions, but will instead test you directly.  If your interviewer randomly starts behaving belligerently, recognize that trap.  Do not get defensive and do not take the bait.  Here are some ways to avoid escalating:
  • Take this as a challenge to the design of your system or code.  Start off by saying something like "Let me see if there's another/better way of doing this" or "I think it can be done this way--give me a few minutes to think about it".  Then, do your best to explain why it's a solid design or about potential design pitfalls and why they won't happen in this scenario.  Say anything to keep the discussion about the technical topic at hand.
  • If they challenge more directly, analyze their proposal instead.  Calmly analyze the strengths and weaknesses of their approach and end with asking, "So that's what I can think of?  Did you still prefer approach A or approach B?"
If you see them immediate change behavior, it was a test.  If not, then maybe something you said is a pet peeve of the interviewer and you solved the problem anyway.



A Short List of Computer Science Textbooks

The Computer Science curriculum tends to be focused on teaching the theoretical basics. For many people who are new to the subject, it can b...