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:
Help people be prepared for their next interview
Help connect engineers to the correct jobs.
Hopefully lead to better engineers in the world :)
There are two main categories that we judge engineers on:
- Technical skills: This spans practical and theoretical skills as well as experience that backs these up.
- Non-technical skills: Passion for the space, communication skills, cultural fit all fit here.
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:
These are all important:
- Coding: Your ability to produce high quality code in a timely manner and avoid rabbit holes.
- Experience: Relevant experience shows off both your passion and what you can bring to the table from the start.
- Theory: Theoretical knowledge Is the basis of your engineering ability and means you can quickly attack new problems.
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
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:
- Low level: C.
- Object Oriented: Java, C++ etc
- Dynamic, high level language: python, ruby etc
- Functional: Lisp, Erlang, Haskell etc
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:
- 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.
- You understand some of the nuances involved with languages/frameworks and can make decisions on pros and cons of different tech.
- 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
- Try to keep doing different projects that push your understanding and knowledge of the language.
- Read blog posts on people doing interesting things in the space. Hacker News is a good source.
- Read and contribute to open source projects in the space. If you go to Github and search for projects in your language you can see the top ones very easily.
Improve your Practical Coding Ability
There are three ways we look at an engineer’s practical coding ability:
- Code examples from their contributions to open source and other projects (for example, on Github)
- On the spot coding questions on a whiteboard or remotely over an Etherpad clone
- 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:
- It shows you have a passion for the technology and subject
- Your experience can be used to teach others at the company
- When you start you will hit the ground running.
You can get this experience from your previous employer or from side projects.
Side projects are really good signals for us. They show us:
- You have a passion for technology and for building things
- You can generally explore more modern technologies and have a more well-rounded perspective
- 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:
- Single purpose websites. e.g: downforeveryoneorjustme.com
- Simple iPhone app that solves a personal itch
- New open source libraries or contribution
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.
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 firstname.lastname@example.org and check us out at heyzap.com/about.