Phone Screen
Step 1: Preparing for the Phone Screen
1. Know your resume.
You answer the phone and the first question the interviewer asks is: “Can you walk me through your work history?” Your minds goes blank. You’ve suddenly forgotten every job you’ve ever had.
The advantage of interviewing over the phone is that you can have your resume printed out in front of you, ready to reference at any time, in case you find your nerves getting the best of you. However, it’s important to know your resume inside and out, without feeling the need to read it off word for word like a script. The interviewer will have your resume in front of them, so when they ask questions about your work history, go beyond your bulleted list of duties and achievements. If you just read them off, you’ll sound like a robot, not an actual human.
Combat this by rehearsing quick summaries for each of your roles that highlight your specific achievements, projects you accomplished, and awards you won for each role. If you have gaps in your resume, be prepared to explain those as well.
Additionally, prepare a brief summary for the inevitable “tell me about yourself” question. This should be a short 1-minute “elevator pitch” that highlights your best qualities, experiences, goals and should be tailored to each company you apply for.
Remember: resume-based questions are designed to loosen you up and help shake off your initial nerves, so let them do that job.
2. Research the Company
Going into an interview without knowing anything about the company can turn awkward quickly, especially if the interviewer asks something like “what attracted you to our company?”
Visit the company’s About Us page and social media accounts, and delve into company reviews to get a feel for the company culture. Any information you can gather about the company’s values and mission can help you tailor your interview answers to highlight achievements and past experiences that are in line with the company’s ideal candidate.
Interviewers like people who show that they care about the company’s mission and are ready to spend 40+ hours a week devoted to helping it reach its goals.
3. Familiarize yourself with the job description.
Look for keywords in the job description that can clue you into the company’s ideal candidate and use them to create answers for potential questions you may be asked.
For example, if a company values “self-directed” candidates, come up with an example of how you worked autonomously on a project and reached goals with little direction. If the listing mentions “4+ years of Java development experience,” prepare an anecdote about a Java project you worked on three or four years ago. Tailor your answers to the job description and match yourself as closely as you can to the company’s ideal candidate.
If there are some parts of the job description that don’t line up with your skill set, don’t worry. It’s impossible to be a perfect fit. Be prepared to say something like “I don’t have experience with that yet, but I’d love to learn more about it.” You can’t know everything, but you can show an interest in learning and growing. In fact, willingness to learn is an important characteristic an interviewer may be looking for.
4. Prepare answers to common questions.
The best way to reduce your nerves and boost your confidence going into a phone screen? Practice answering common tech questions and prepare short anecdotes that you could potentially use during the interview. This will ensure that you’re highlighting your best qualities and skills, and not worried about having to craft well thought-out answers on the spot.
You may be asked a mixture of behavioral questions based on your past experiences, hypothetical questions, and technical questions that test your knowledge of CS concepts, including:
You should also prepare short stories and examples of a time when you:
Other tips
Brush up on your computer science fundamentals
Programming Languages
We do not require that you know any specific programming language before interviewing for a technical position with, but familiarity with a prominent language is generally a prerequisite for success. Not only should you be familiar with the syntax of a language like Java, Python, C#, C/C++, or Ruby, you should be familiar with some of the languages’ nuances, such as how memory management works, or the most commonly used collections or libraries, etc.
Data Structures
Most of the work we do involves storing and providing access to data in efficient ways. This necessitates a very strong background in data structures. You’ll be expected to understand the inner workings of common data structures and be able to compare and contrast their usage in various applications. You will be expected to know the runtimes for common operations as well as how they use memory. Wikipedia is a great resource for brushing up on data structures.
Algorithms
Your interview will not be focused on rote memorization of algorithms; however, having a good understanding of the most common algorithms will likely make solving some of the questions we ask a lot easier. Consider reviewing traversals, divide and conquer, and any other common algorithms you feel might be worth brushing up on. For example, it might be good to know how and when to use a breadth-first search versus a depth-first search, and what the tradeoffs are. Knowing the runtimes, theoretical limitations, and basic implementation strategies of different classes of algorithms is more important than memorizing the specific details of any given algorithm.
Databases
Most of the software that we write is backed by a data store, somewhere. Many of the challenges we face arise when figuring out how to most efficiently retrieve or store data for future use. The more you know about how relational and non-relational databases work and what tradeoffs exist between them, the better prepared you will be. However, we don’t assume any particular level of expertise.
Object-Oriented Design
Good design is paramount to extensible, bug free, long-lived code. It’s possible to solve any given software problem in an almost limitless number of ways, but when software needs to be extensible and maintainable, good software design is critical to success. Using Object-oriented design best practices is one way to build lasting software. You should have a working knowledge of a few common and useful design patterns as well as know how to write software in an object- oriented way, with appropriate use of inheritance and aggregation. You probably won’t be asked to describe the details of how specific design patterns work, but expect to have to defend your design choices.
Coding
Expect to be asked to write syntactically correct code—no pseudo code. If you feel a bit rusty coding without an IDE or coding in a specific language, it’s probably a good idea to dust off the cobwebs and get comfortable coding with a pen and paper. The most important thing a Software Development Engineer does is write scalable, robust, and well- tested code. These are the main criteria by which your code will be evaluated, so make sure that you check for edge cases and validate that no bad input can slip through. A few missed commas or typos here and there aren’t that big of a deal, but the goal is to write code that’s as close to production ready as possible. This is your chance to show off your coding ability.
Distributed Computing
Systems have to work under very strict tolerances at a high load. While we have some internal tools that help us with scaling, it’s important to have an understanding of a few basic distributed computing concepts. Having an understanding of topics such as service-oriented architectures, map-reduce, distributed caching, load balancing, etc. could help you formulate answers to some of the more complicated distributed architecture questions you might encounter.
Operating Systems
You won’t need to know how to build your own operating system from scratch, but you should be familiar with some OS topics that can affect code performance, such as: memory management, processes, threads, synchronization, paging, and multithreading.
Internet Topics
We do a lot of business online, and we expect our engineers to be familiar with at least the basics of how the internet works. You might want to brush up on how browsers work at a high level, from DNS lookups and TCP/IP, to socket connections. We aren’t looking for network engineer qualifications, but a solid understanding of the fundamentals of how the web works is a requirement.
This was a relatively long list of topics to review, and might seem somewhat overwhelming. Your interviewers won’t be evaluating your ability to memorize all of the details about each of these topics. What they will be looking for is your ability to apply what you know to solve problems efficiently and effectively. Given a limited amount of time to prepare for a technical interview, practicing coding outside of an IDE and reviewing CS fundamentals will likely yield the best results for your time.