How to do tech interview
By: Jakub Tesárek
Tags: Job Search, Interview, Management, Programming, Tech Interview

I’m a team leader of small R&D team in a medium size tech company. We build and run services helping people find their new job; job portals, educational sites, tools for online interviews etc. Recently I got an opportunity to get a new developer to my team. This is how I evaluate the candidates.

The nature of our work is very specific. In some companies “research and development” means just “bugfixing and development”. We actually spend lot of time on research. We have go-to technologies like Python, Docker, Mongo etc. but we decide based on the project so there’s no specific stack you have to know. These are just some technologies anyway and they can be thought. We might use something different in our next research project anyway. Therefore I’m looking for someone who:

Has some skills that are missing in my current team Has some programming knowledge base

I don’t do whiteboard programming

I always liked white board programming when I was looking for job. It’s not stressing me whatsoever, probably because as team lead I’m used to present projects in front of audience. But I’m not looking for second me and I realise whiteboard programming can be stressful for lot of people. It’s hard to be creative, when you’re stressed. Some people just need some alone time to think about a problem. Whiteboard programming doesn’t portray the candidate realistically.

Send me your Github

On the other hand, I still need to see some code to understand how transfer your ideas to code. The best option is, if you send me link to your Github before the interview. Then we can discuss your previous projects. Interestingly, not many people do that. And if I ask directly, they feel embarrassed about their code. It’s ok, just show me something. My Github is a mess as well (as some people love to point out). I just need some talking points.

If you still don’t want me to check your Github or you don’t have one, I’ll ask you to write some code for me at home.

I don’t like to do that because it feels like asking for free labor. But I haven’t figure out anything better yet. At least I’m asking for something that obviously isn’t anything we would use as a production code:

Write a rock-paper-scissors game that I can play in the terminal against computer. Can you find out better algorithm for selecting the computers move than pure random selection?

The task is little bit vague

I purposefully don’t give you many details. If you join our team, that’s something you’ll have to deal on almost daily bases. Often times, we have some hypothesis we want to verify or prototype we’re building and we don’t know exactly what we’ll end up with. That’s the nature of research. I wan’t to see, how you will handle the situation. Will you ask for more details? Will you give up? Will go overboard and build a new game engine first?

There’s no single correct approach I’m expecting. I just want to understand what it’s like to work with you.

You might be surprised but some people actually give up because of that. I had a candidate who told me that he didn’t have an idea of how to choose differently than by using random so he gives up.

Pure random selection probably is the best strategy. But search google for 10s and you’ll find that people can’t play randomly and there are algorithms that can exploit that. Would they work? Maybe not. Does it matter? Not in the slightest. I just want to see that you are willing to try.

The task is very easy

Reading terminal input and comparing two values in Python can be done in just few lines of code. Even someone with no coding experience should be able to put something together over the weekend.

I made the task this easy for two reasons:

I don’t know who I’m looking for. Maybe you are amazing system administrator with just little programming experience who want’s to change career. I can teach you to write code and I’ll have a developer who’s also amazing system administrator. This is not just theoretical situation. I actually have a team member who one day decided he doesn’t want to be system administrator anymore and want’s to write code full time. And he’s amazing programmer. I want to see how you’ll use your time. If you finish the task in few minutes, will you spend some extra time on refactoring, documenting the code, packaging or maybe you’ll write unit tests? I give my team lot of freedom. If you are in my team it means I believe you’ll do a good job. That’s why I’m looking for people who will do the extra bits without me having to ask for them. If you don’t at least try to make the code readable for me when asking me for a job, I don’t know what to expect from you when I give you free hand to work on a project.

The exact way in which you code the exercise is not important. Maybe we’ll disagree on your coding standard or the way you write comments. Maybe you use more mocks than we do when writing unit tests. It doesn’t matter. What matters is that you think about the people who’ll read the code after you.

I would rather get code that’s easy to read but doesn’t work than unreadable code that works perfectly.

Every piece of code will eventually change. If you produce buggy but well written code, whoever comes after you can fix the bugs and implement new features even after leave.

The task shows your strengths

I’m trying to build a diverse team with wide range of skills and I want to give you chance to showcase what you feel is your biggest asset. We do everything from managing servers to training neural networks. I don’t understand everything we do and neither will you. That’s fine. We’ll find the stuff that you feel you’re strong at and that you like to do. But I have to know what it is.

If you use neural network to choose the computers move, I know that you’ll probably do well at the research stage of new project. If you send me code with 100% code coverage and downloadable from PyPi I know I want your input in the middle of project when quality starts to slip up and and people start compromising. If you build an interactive UI in ncurses, I know that your work will probably be well polished and I’ll ask you to work on projects that we’ll have present to an audience. And even if you just code the thing on 5 lines and don’t do anything extra, I know you’ll able to solve a problem and move on. That’s actually a great skill I don’t have.

Don’t panic

If you are applying for a tech job and you’re stressing about tech interview, don’t worry. I honestly believe that most managers are like me and want you to succeed. They want to give you a chance to show your strengths. I obviously can’t hire everyone and I have to draw the line somewhere. But if I reject you, it’s not because you are not good enough. It’s because I’m looking for someone else.

And here are few last tips:

Ask for feedback. Lot of people don’t ask why they were rejected. Don’t be afraid to ask. Either you’ll learn where are you weaknesses or you’ll find out you dodged a bullet and you wouldn’t like the job anyway. Be nice. People in tech know each other. If someone asks me, I might not remember why I didn’t hire you but if you tell me to go f*ck myself, I’ll definitely remember that. Don’t lie. I once had a candidate who had 3 years of experience with Python in his CV. But when presented with the rock-paper-scissors assignment, he suddenly remembered he doesn’t know Python and wrote it in Java instead. It’s funny because if he actually said that at the beginning, I would seriously think about hiring him. If he learned one language, he can learn another. But I don’t hire liers. Ask for help. Ask someone you trust to roleplay the interview with you. Talk with people who are hiring about the process and where they think you should improve. Don’t believe the BS that tech is a hostile environment. There might be some miserable people like that but that’s a minority. Last month I offered 50 hours of free coaching to someone wanting to change career and become a programmer. I got more replies from other programmers wanting to do the same than from people looking for coaching. People want to share their knowledge, you just have to ask.

Good luck!