How to Ace a Startup Engineering Interview Part 1

In the last 5 years I have interviewed hundreds of engineering candidates and I thought it would be valuable to put my thoughts on how people could interview better. This will:

  1. Help people be prepared for their next interview

  2. Help connect engineers to the correct jobs.

  3. Hopefully lead to better engineers in the world :)

There are two main categories that we judge engineers on:

In Part 1, I will focus on technical skills.

Technical Skills for an Engineer at a Startup

I think about practical skills across 3 main principles:

3 Main Principles of Technical Skills

These are all important:

Preparing for a job interview is the perfect opportunity to take yourself to the next level as a programmer and improve all these abilities.

Improve your Theoretical knowledge

Learn C

C is a fundamental building block of programming. As such, knowing C gives you a strong base of understanding the higher level concepts you will likely need to know as a programmer in a startup.

Having a basic working knowledge of C does not require too much work and can be picked up in a couple of weeks. C does not have much abstraction above assembly, this means by definition it is relatively simple. Like many others I learned most of C by reading the C Programming Language book.

Once you get your head around pointers and memory management, C is a fun language as it takes you close to the metal of what a processor does and has principles like pointer management that do not exist in most other higher level languages. Understanding these concepts will also help you understand how higher level languages work.

Learn about Data Structures and Algorithms

Although it is relatively rare in web/app development to code up complex algorithms and data structures, data structures and algorithms has had more effect on my thought processes around building complex systems than anything else. Even if you are not making your own data structures, you will be making choices about how to use data structures every day of your programming career, so understanding the basics is crucial.

I recommend the book, Introduction to Algorithms. Since the book is quite long, if you don’t have time to read it all, the basics of sorting, hash tables, binary trees, and string matching sections are highly recommended.

Once you have a good grasp of data structures and algorithms, you’ll find these concepts put just about everything you do as an engineer into context.

Comparative Programming Languages

In a startup, you will often be touching many languages across the technology stack. You may also be required to learn new languages and concepts quickly. To speed up learning, it helps to have a good understanding of various language concepts so you can quickly see their similarities. The best approach is to learn one language in every major style:

If you haven’t touched a language in one of these categories, it can feel as if you are learning to program all over again when you try it for the first time, which can be a fun experience.

Have an Expert Level Knowledge in at least one Language and Framework

Expert knowledge in a specific language or framework demonstrates:

  1. Your ability to become an expert and there is no reason why you would be unable to become an expert in other areas as well.
  2. You understand some of the nuances involved with languages/frameworks and can make decisions on pros and cons of different tech.
  3. You have the passion to go deep on subjects and get to the heart of a language.

It takes time and energy to get to an expert level. Here are some tips to help

Improve your Practical Coding Ability

There are three ways we look at an engineer’s practical coding ability:

  1. Code examples from their contributions to open source and other projects (for example, on Github)
  2. On the spot coding questions on a whiteboard or remotely over an Etherpad clone
  3. A 2 hour long coding challenge

The quality and speed of an engineer’s coding ability is important and can only come with practice.

It is also helpful to use the appropriate language or framework for the job. Scripting languages like Python and Ruby can be quicker to program in than static languages like Java/C++ for many situations. Since we understand that an interviewee might not have had much experience in a dynamic language, we try to factor out its importance, but it still has influence.

Doing coding challenges can also help hone your skills. You can find a number of resources online and can often get a benchmark on how fast you are so that you can further optimize your speed. Google Code Jam is a good source

Improve your Relevant Tech Experience

Having relevant experience is important in multiple ways:

You can get this experience from your previous employer or from side projects.

Side projects are really good signals for us. They show us:

  1. You have a passion for technology and for building things
  2. You can generally explore more modern technologies and have a more well-rounded perspective
  3. You practice building things fast in a new space, which is exactly what you will be doing at a startup.

These don’t have to be complex, massive projects to make an impact. Some types of side projects that are quick and show off your experience:

It is fun to do a side project that explores some new technology/frameworks, like node.js, backbone, bootstrap etc. If a candidate comes in with a good repertoire of side projects and can talk intelligently about what they learnt while doing them , it is a great positive signal.

Conclusions

I am looking forward to talking to candidates who can ace all of these areas. Of course the technical side is just one half of the coin. I will explore the non-technical side in part 2.

Heyzap is hiring great engineers. If you have some Android, iOS or Rails skills, even better. Get in touch with us at jobs@heyzap.com and check us out at heyzap.com/about.

Heyzap is Hiring →