Interview Prep

Resources to help you prepare for your next interview.

Image Description

Preparing for a technical interview is a lot of work. It's well worth spending some time preparing for your interviews and the resources below should cover most bases. When you're ready you can book a mock interview with us to gauge your level of preparation and get valuable feedback on how to improve.

Algorithm Challenges

It's worth spending some serious time doing practice problems on one of the sites below. These problems are very representative of what you'll see in algorithmic interviews. Many have been sourced from actual interviews, which generally results in that question being "banned" at some companies, including Google. Smaller companies may not bother banning these questions and if you do enough of them you will likely run into ones you've already completed. You should definitely inform the interviewer if they give you a problem you've done before. Let them decide how they want to handle that scenario rather than trying to pretend that you're coming up with the solution de novo.

Topics

Technical interviews can have wide-ranging topics. Depending on the role you are interviewing for, some topics are very likely to be covered and others less so. In each section we list the top five most important skills for an engineer in that discipline to possess.

Software Engineer (generalist)

This is the classic software engineering role at the FAANG-type companies. The basic idea is that if you have the necessary fundamental CS skills, you can learn the more domain-specific skills as needed for a given role. In practice this means great mobility within these companies, although it can also mean some truly mundane (but well-paid) work. The most important skills include:

  • Algorithms and data structures
  • Architecture
  • Scalability
  • Testing
  • Code review

Software Engineer (specialist)

This category applies more to smaller companies and startups. You're expected to have experience in front-end or back-end development or, more likely, both.

  • API design
  • UI
  • Scalability
  • Architecture
  • Algorithms and data structures

Software Engineer (infrastructure)

This is a fairly rare role to see separate from more generalist engineers, but where it exists it typically focuses on developer tooling and infrastructure. Basically this engineer's customers are other engineers at the same company. Engineers in this role need to have excellent problem solving skills and are often expected to identify developer pain points and solve them.

  • Independent thinking
  • Problem solving
  • Frameworks; tooling; cli
  • Algorithms and data structures
  • Testing

Software QA

Sometimes viewed with awe and other times with derision. The QA role serves an important purpose and often requires deep domain expertise and software engineering chops.

  • Testing
  • Problem solving
  • Code review
  • Frameworks; tooling; cli
  • Algorithms and data structures

DevOps/SRE

Not to be confused with "SysAdmin" these days! These roles range from very specificly managing production infrastructure all the way to coming quite close to an infrastructure engineer, and everything in between. This role can be very difficult to interview for because some companies have the same coding bar as their software engineers AND they expect a bunch of DevOps related knowledge.

  • Linux; containerization; networking
  • Security
  • Deployment pipelines
  • Frameworks; tooling; cli
  • Problem solving; independent thinking

Books

There are a multitude of interviewing books on the market. Depending on how rusty your algorithms and data structures are, you may want to spend some time reviewing some of the books below.

  • Cracking the Coding Interview
  • Introduction to Algorithms

Tools

Most interviews do not require you to have detailed tool knowledge, but there are some that you should ensure you are at least familiar with before interviewing as it will increase your comfort level.

  • Git: Used pretty much everywhere. If you're used to something else (e.g. Perforce at Google), throw a repo up on Github and commit some solutions to algo problems.
  • Whiteboard coding: Not strictly a tool, but it's an oft-neglected area for practice. Spend some time solving algorithm problems on a whiteboard.
  • Coderpad: Many interviews (especially remote and/or phone screens) use shared coding environments. These are honestly great since you get to actually run your code. It's worth spending a little time practicing with the specific environment you'll be using, if you can find out what it is from the recruiter.