The Front End Interview

If you are an Admios candidate, congratulations on doing your homework and researching the company you want to join. If you want to know how we conduct interviews and pick the best talent for the job, then this post should give you some insight.

First, let me introduce myself. My name is Fernando De Vega and I’m the Javascript Tech Lead. That means one of my main tasks is to constantly look for new resources, keep up to date with developments in the Javascript world and promote the use of Javascript within the company.

I am also a Software Architect, which means I’m capable of designing and building an application from scratch, front-end and back-end, while taking into consideration the infrastructure the app will be running and sometimes even designing and deploying the infrastructure, in other words, Devops.

And, because of this position, I conduct many of the interviews for front-end candidates.

The Interview

interview.png

What does a front-end developer do in the company?

Here at Admios, most of the work is around web applications. The whole industry is moving to web applications and software as a service (SaaS) so when we talk about front-end developers, we are talking about programmers who know the trifecta: HTML, CSS and Javascript.

Of that trifecta, we focus mostly on Javascript because the more experienced you are in Javascript, the more HTML and CSS you’ve likely seen. Therefore, most of the interview, about 90%, is about Javascript.

What happens at the interview?

One of the first things I tell candidates is that the purpose of the technical interview is not to accept or reject a candidate, but rather to measure their skills and knowledge as a developer. We’re essentially trying to place them in one of four skill level categories: junior developer,  mid-level developer,  senior developer, or rockstar. The definitions of these levels are very subjective, but they are mostly based on what we’ve seen from our customers as to what is a senior developer, or mid-level developer, etc.

During the interview, I ask a lot about libraries and frameworks in Javascript. A lot of them. Javascript is a huge ecosystem, but there’s only a small amount of frameworks that can be thought as universal. So, if you’re an experienced Javascript developer, most likely you’ve used or heard of them. I always let the candidates know that it’s OK if they don’t know them all, it just gives me an idea of how wide they’ve cast their net in the Javascript world.

However, the most critical part of the interview is the coding exercise because it gives me the most accurate measure of a candidate's skills.

I don’t care about your resume

Let’s face this head-on: I read your resume, but I don’t really care about it. I may ask a couple of questions regarding some techs you put in there, but ultimately the resume doesn’t really tell me anything valuable. It tells me you’ve worked on certain projects, but that’s it. I wasn’t there seeing the code for those projects so I don’t know if it was neatly done or if it was an endless pit of security holes. I don’t know what parts you did and how well they performed, so at most your resume can tell me where you’ve been, not how good you are.

You know what the best resume for a developer is? A public Github, Gitlab, or Bitbucket account. That’s the only thing I’m really interested in finding in your resume, a link to actual code you’ve written. I don’t care if you have a Ph.D. in computer science or if you don’t have a degree at all. A degree only tells me you’ve done the theory, it doesn’t tell me anything about your skills.

A little side note about myself: I don’t have a degree in computer science or any higher education in programming. I have a telecommunications engineering degree so I learned how to calculate satellite orbits, fiber optics and networks. I know all seven Open System Interconnection (OSI) layers but right now I only focus on the sixth and the seventh. So how did I end up in programming? I learned from looking at others write code and my hobby became my living. Just to be clear, I never launched a satellite or designed an interoceanic fiber optic cable. My whole career has been programming and I don’t even have a CS title. So believe me when I say that I don’t put too much weight on where you studied or what you studied. I’m more interested in the skills outside of engineering that you can bring into the organization and make useful in solving problems differently.

Having an engineering degree or a computer science degree is great, but that doesn’t define you or tell me much about your actual talent.

You Know Nothing Jon Snow

Before I start with the coding part of the interview, I ask candidates one of the most ambiguous questions you can ask a developer: on a scale from 1 to 10, at what level would you place your knowledge and/or experience of Javascript? This is actually a very important, and tricky, question because it tells me a lot about your character and how much you know.

This question usually catches the candidates off guard, so if you’re a candidate reading this, now you’ll have a leg up.

Why is a subjective question so important you may ask? Everyone doing an interview is obviously trying to land the job. They want to show what they know, but try to stay humble. No one will ever say they are a 10, so most candidates position themselves between 8 and 9, which technically positions them as “senior developers.”

Here’s the thing, actual senior Javascript developers are like Jon Snow: they know nothing. But most importantly is that they are aware of the fact that they know nothing.

Javascript is a rapidly evolving language. It started small, very limited and with a lot of defects, but now it’s a very well-defined, general-utility language. It’s the closest language to being the ring of power: one language to rule them all! You can do front end, back end, mobile applications, Internet of Things and more, all in Javascript. Thus the language is huge and constantly evolving. There’s a lot of new stuff coming out, and actual senior developers know this. You cannot put a finish line on the Javascript running track because it just keeps moving further away.

Myself? If I were to answer that question I would place myself at a 7, sometimes even falling back to a 6. Am I exaggerating? I’ll list some concepts in Javascript that  you should know and have a lot of experience with: Symbols, Promises, Generators (yield), async/await, object destructuring, Weak Sets, Weak Maps, Webworkers, Websockets, the spread operator, arrow functions, WebRTC, the whole bunch of new APIs Chrome releases on every iteration, memory leaks and the garbage collector and the JIT compiler.

You know them all? Great, let’s move on to Node,the backend Javascript. Do you know buffers, streams, clustering and the net modules? Do you know Express and ORMs? Do you know how to implement caching? Do you know how to communicate with child processes, manipulate files and access system resources?

In a browser, if I asked you to select all the n+1 input elements of a form that’s type “number”, can you do that in plain vanilla Javascript without jQuery? Do you know what coercion, hosting, closures and scopes are in Javascript? Do you know prototypal inheritance?

And don’t get me started with mainstream frameworks like Angular, Vue, Backbone, React and Ember. After answering all those questions, would you still say you are an 8 or a 9?

Saying you are a 6 or a 7 tells me a lot about you. If you say you are a senior developer and then tell me you are a 7, it tells me that you actually know Javascript and most importantly, you know there’s still a lot to learn.

Telling me you are a senior developer and then rating yourself an 8 or a 9 shows you’re not very humble. It also tells me you don’t know Javascript well enough and that you actually think you are close to the imaginary finish line.

Now, don’t go into an interview and tell me you are a 7 just because you read this and think that’s the magic number because I will test you on that rating.

So who’s a 10? A 10 is a unicorn, an imaginary creature. They are like the unicorn companies in Silicon Valley worth over a billion dollars. From the outside they are valued as a 10, but from the inside they have a completely different value.

The Baseline

The answer you give me lets me establish a baseline for the complexity of the coding exercises I will give you. I don’t want to drag the interview out too long, so they are not logical questions. Potential candidates have to pass a test with logical questions before they land a technical interview, so no need to go down that road again.

The exercises are designed to measure your expertise, so you should be able to answer them quickly and not overthink them.

For example, one of the questions is a simple refactor of a function. The tricky part there, and I tell the candidates about this before they start, is that there are three possible solutions (actually 4, but if you do the fourth, it seriously drops my expectations of you). The three possible solutions tell me your story, they tell me your experience. A simple refactor will tell me a lot about how much code you’ve seen in the past and how much you’ve improved yourself.

Now, if you are being interviewed don’t overthink it. Taking too much time to answer is a bad sign. The refactor is simple. Once you see it you’ll know the answer (because you are a developer and the answer is obvious), so go ahead and type it. But again, there are three ways to answer it and your answer tells me a lot about your experience.

From there I increase the complexity of the questions as the interview moves along until you reach a point where you can’t answer. As always, it’s OK if you don’t know everything, I’m just being thorough in measuring your skills.

So what should you know?

javascript.png

Javascript! A lot of the candidates that apply to Admios consider themselves senior developers just because they have a lot of experience with a framework like Angular or React. But knowing Angular or React doesn’t make you a Javascript programmer. Just because you know how to make scrambled eggs doesn’t mean you are a chef!

The discouraging part is when they realize they actually don’t know Javascript in the middle of the interview. Anyone can learn a framework, but if you don’t have a solid base in Javascript, it will be really hard for you to leave that framework and move to a new line of work. At Admios we do that a lot! We force you out of your comfort zone because we want you to improve. But to do so, you need to have a solid base and that’s what I measure in the interview: your foundations.

So what is a solid base? You need to know the real fundamentals of Javascript, prototypes. The whole language revolves around them so if you consider yourself a mid-level developer, you should be able to handle prototypes and understand a bit of prototypal inheritance. If you say you are a senior developer then you better know them well because I will pummel you on that. I need to know without a doubt that you are a senior developer in order to write that on my feedback and evaluation.  You need to convince me you know that fundamental part of Javascript because that’s the heart of it.

You also need to understand scopes and closures. They’re fundamental to writing structured code and I look for it in the coding part of the interview.

This is a great resource I pass on to candidates: https://github.com/getify/You-Dont-Know-JS. I suggest you read it thoroughly. You’ll be amazed at how much you didn’t know about Javascript.

Some final thoughts

Seniority is a misconception that a lot of candidates have. It’s not how many years of programming you have under your belt that makes you a senior developer. I’ve seen candidates with 10 or 15 years of experience and placed them at a junior level, and I have also seen candidates with two or three years of experience and placed them at a senior level.

Again, it is not about how many years you’ve been programming. Seniority is about how well you’ve learned from coders better than yourself.. If you’ve been programming for 10 years and the only code you’ve seen is yours, then you won’t have a concept of how well or wrong you’ve been writing code all those years.

However, if you go into public project repositories, if you pair with better developers, if you get constant feedback and reviews, if you contribute to public projects and get code reviewed, all those things give you seniority. It’s about learning a better way to do things and leaving your ego behind. Admios is a great place to learn! So don’t be intimidated by the interview or feel discouraged if you don’t pass. We have high standards because we provide our customers with the best talent we can find. Also, we don’t only hire senior developers. If that were the case, then we wouldn’t have a diverse staff capable of filling all potential openings in our customer accounts. We focus a lot on the candidate’s potential and we’re eager to invest in training those who show promise. Don’t be afraid to ask at the end of the interview how well it went. We want you to ask because it’s a great opportunity for us to give you feedback so you can improve.

I don’t accept or reject candidates, I only measure your Javascript skill level and then pass on my evaluation. Don’t be shy and ask me how you did, but most importantly, ask me how you can improve. We’ve had candidates who felt they did badly in the technical interview, but they actually did well and we ended up hiring them. Why? Because they showed that they had potential and talent. Candidates don’t take me seriously when I say that it’s OK if you don’t know all the answers, so I’m saying it again. It’s OK!

Anyhow, even if you don’t make it to this round, don’t be discouraged. Take the opportunity to improve and apply again in a couple months. Show us your talent and your ability to improve. Show us that and we’ll welcome you to the family. That’s what we’re looking for. It’s never a rejection, but an invitation to grow.

Fernando De Vega

Admios, Av. Gallard, Panamá, Panamá, Panama

DevOps, Telecommunications Engineer, Team Lead, and Technology enthusiasts. Loves NodeJS and everything related to it.