Technical Interviewing Primer by Tim
Watch the full video of Tim’s talk here:

Source: CSUMB talk on “Tips for Technical Interviewing” on Feb 12th
Written Guide
This guide will cover specific tips for technical interviewing that we wish we would have known while in college.
Why Software Engineering
- Great time to be in tech, in-demand with lots of high-paying and rewarding jobs available
- Huge number of companies need more software engineers around the US, especially in hubs like Boston, Portland, San Francisco, New York, Seattle, etc
- In the last 5 years, there’s been a big shift towards skill oriented hiring with less emphasis on traditional metrics like GPA
Technical Interviewing Process
- The majority of what students learn while in a CS program is not directly tested in technical interviews
- Classes like compilers, operating systems, or many of the other programs you might take over 4-years
- The traditional technical interview is heavily oriented around data structures and algorithms
Succeeding in Technical Interviews
- The primary factor for success and confidence in technical interviewing is time spent practicing
- Do not be discouraged if you find solving algorithm problems confusing or unintuitive at first
- Becoming proficient is similar to the SATs, requires you to study this particular thing in a particular manner
- Anyone can master this skill if they are willing to put in the time, repetition and energy
General Advice for Succeeding as a Software Engineer
- Common interview question is something like “Tell us about the most interesting technical challenge that you’ve worked on”
- Participating in technical internships while in school will give you the single most significant advantage after you graduate
- Expectations for engineers rises as they get older, the sooner you can start applying for internships the better
Gaining Real-world Experience: Web and Mobile Development
- The most jobs by sheer volume are often in application development: back-end or front-end web or iOS/Android development
- You will greatly benefit from having practical experience building web or mobile applications and a knowledge of those systems
- Starting a company can be intimidating, but trying to build a product is an amazing way to get experience, you can get inspiration from IndieHackers on small projects that build profitable businesses on a very small budget.
- Check out Upwork for examples of a huge number of technical jobs for pay through contracting in testing, web or mobile.
Finding Companies to Apply To
- Go to Crunchbase.com or AngelList which is a database of venture-backed companies all over the world
- There are thousands of companies listed there raising money and looking for engineers
- Especially check companies that are in Series B, C or D
- Anytime a company raises money, they are very likely going to be growing their engineering team
- Build a list of interesting companies you would want to work at
Standing Out when Applying
- It’s unfortunately common for students to apply to a lot of places and not hear anything back
- Companies often receive thousands of applications, and it’s really challenging to filter through efficiently
- Anything you can do to stand out or differentiate yourself can make all the difference
- Create a LinkedIn profile, get your profile filled out as a second resume
- Reach out to 50+ people on LinkedIn: Graduates of your university, 2nd degree connections
- Message them: “I’d love to chat with you and get some career advice”
- Anyone you chat with, if the conversation goes well, ask them to potentially refer you to a recruiter
- Even message recruiters directly on LinkedIn, try to send 5 messages to people at each company
- Remember that often just applying through their site is not enough to get call back
- Attending career fairs or finding other ways to make direct contact to a person significantly increases your chances
Getting into the Technical Interview
- Technical interviewing is a highly inaccurate and unscientific process
- Brace yourself for the fact that they won’t always fairly judge you
- The interviews are short and focused and everyone has bad interviews from time to time
- The process is imprecise, especially at large companies, if you were to interview at a Google 5 times, you might get an offer just 2 times
- First and foremost, this is a human process, and part of that is amping yourself up, being high energy, and demonstrate enthusiasm
- Remember that interviewers are humans evaluating humans at the end of the day, interviewers are evaluating who they want to work with
- At the end of every interview, the interviewer does a strong no, weak no, weak yes, or strong yes recommendation
Common reasons why students don’t get an offer
We’ve surveyed dozens of companies and worked with hundreds of engineers going through interviews:
- Good coding score but weak on “algorithms”.
- Students get stuck and can’t make progress.
- Completes initial implementation but doesn’t catch or can’t fix bugs.
- Speed - Did not complete enough of the solution in time alotted.
- Poor technical communication
Speed is a huge factor. This is not representative of real-world engineering, but it’s a key factor in interviews due to the sort time windows. The only way to get fast is to practice problems many times across the major categories, over and over. Any can become fast at algorithms through enough dedicated and repeated practice coupled with an understanding of the known techniques and solutions for each major problem type. Daily practice (1 question every day) can really help, you need to make solving these types of problems into an intuitive habit through time and focus.
Verification step can be the most important. Even if you finished the coding question with a first solution you think works, there may likely be issues or edge cases where the solution fails. It’s your job as an engineer to evaluate several cases, and look for edge cases and catch the cases where your solution might be incorrect. 50% of the work is writing the solution and 50% of the work is verifying its correctness. You can do this by picking 2-3 cases and tracing through your solution to check the outputs.
One common thing we hear is, “I feel like I solved the problems, but I didn’t get the job”. This can often mean you got a decent coding score, but a poor algorithms score or poor technical communication while you were solving.
Approaching a Coding Interview - “The Right Way”
You get a problem from the interviewer and you don’t start coding right away, instead you should follow a sequence that begins with exploring the problem space, and ends with verifying for correctness and analyzing runtime efficiency. You’ll want to make sure to discuss your overall plan and approach, maybe visually with the whiteboard, before you even begin coding. You also might want to start with psuedocode to work out the algorithm first as well.
There are six key steps to a great interview solution, we call the UMPIRE method:
- Understand - Explore the constraints of the problem, ask questions about inputs, understand sample test cases
- Match - Match this to known categories of problems you already know how to solve with known techniques
- Plan / Pseudocode - Discuss your approach, the data structures or rough algorithm plan, get interviewer feedback
- Implement - This is writing the actual code to solve the algorithm
- Review - Verify correctness by running specific examples and recording values
- Evaluate - Analyze the performance of your algorithm and discuss any potential improvements or weaknesses
Many students will skip these steps or rush into coding to try and finish on-time. Avoiding the other steps may lead you to get a poor algorithm score. Because time is a factor, you have to be able to move quickly through but still touch on each one of these stages.
How much time do I spend on each section? There’s not a set time, you should work proactively with your interviewer to understand what they are looking for. They will help you know when you should move on, or if you should continue in the current stage. Think of an interview as a negotiation and collaboration with your interviewer.
Learn the standard techniques and approaches. Many of the problems posed fall into one of a few buckets, and there are known and specific techniques for solving the problems that would be very hard to derive yourself from scratch. Instead, make sure you are comfortable applying known techniques for common problems before you step into the interview. For example, for Linked Lists, almost every problem involves one or more of the following techniques: “Two pointer technique”, “Dummy head”, or “Multiple passes through the list”. There are only a total of 30 frequent algorithms and techniques you need to know and of course some of these are much more commonly encountered in interviews than others.
Resources for Further Learning