Technology Agnostic Interview for Web Developers

20 January 2016
One of my friends works as a Java Developer and he was looking for a job change. As a result he was involved with a couple of startups, and for each startup he was learning and doing the assignments in Language/Framework supported by these companies.

One thing I noticed that he was preparing for Language/Framework oriented interviews rather than a generic one, even though he had no professional experience with those Languages & Frameworks.

Here is what's wrong with his approach. While knowing the Language/Framework might give you an edge over other candidates, you should be preparing for a generic web developer interview if you have never worked with [insert Language/Framework].


                                    


How I would conduct(or prepare for) such interviews? I would list out things which are common in web development irrespective of Language/Framework.

So, let's begin listing out these common concepts(this list isn't exhaustive, use it as a guidelines):

  1. Architecture: RESTful Architecture, MVC pattern etc. 
  2. Design Patterns 
  3. Refactoring Techniques
  4. Databases
  5. Client side stuff
  6. Basic Linux Commands, Server Management & Deployment Techniques 
  7. Version Control 
  8. Web Security
  9. Testing

1. Architecture

Here you can ask all sorts of questions related to scaling, code architecture, etc. depending on candidates experience.

Also, I would only expect them to know architecture they have been using all along. MVC architecture is a very good example of that. Example of frameworks which follows the MVC pattern are Ruby on Rails, Django, ASP.NET MVC, Laravel etc.

Here's a list of questions to begin with:
  • What is REST? Can you explain it with example? - I'll look out for basic understanding of how urls are organized using RESTful architecture, purpose of various HTTP requests types etc.
  • How does a typical monolithic application laid out? Can you describe the major components? - Here I expect them to describe various components of the application like databases, application servers, web servers, caching servers, etc.  
  • How would you scale a monolithic application? Where would you start? - Here I expect them to mention common performance issues. This is very generic. Common optimization technique includes Database optimization, microservices, caching, code cleanup, serving Static content over CDN etc.
  • What are the advantages of frameworks following patterns like MVC vs barebones framework which doesn't enforce any pattern? 
Note: I won't care if they don't know what these fancy words like monolithic, microservices etc the important thing is that have they ever thought about it? If not can they?

2. Design Patterns

I won't judge if they aren't aware of any pattern. It's quite possible for junior web developers to be not aware of design patterns that they been using all along.

If they are a fan of a particular design pattern, then I would ask them to explain it and understand why they like it over other design patterns or in which situation a particular design pattern fits in?

3. Refactoring Techniques

You generally want to understand how would they go about refactoring their code base. What are the general techniques they employ to improve their code. I expect them to mention basic techniques like DRY, KISS, YAGNI, keeping variable names readable, keeping methods short and concise, keeping return data predictable etc.

4. Databases

As a backend developer, you should know the basics of SQL, but if you've been working with ORMs like ActiveRecord and you can write relatively complex queries (using joins, includes, associations & methods provided by ORM) then it's fine too! This is one of the things which depends on requirements as well as candidate's experience. If your code base has lots of complex non ORM SQL queries, then you can focus on SQL part as well.

5. Client Side Stuff

Since the focus of this post is on Web Developers rather than Web Designers I would ask things like how cookies & sessions work, CORS, when to use local storage, web sockets, javascript basics etc. Here's a small list of questions to test against:

  • Difference between Sessions & Cookies? And How they work?
  • Explain CORS?
  • What is web sockets and polling? Use case for web sockets?
  • How do you organize your JavaScript code?

6. Basic Linux Commands, Server Management & Deployment Techniques 

The candidate should not be scared of terminals. You should have basic knowledge of Linux commands, if you don't, then try this The Command Line Crash Course

Here's a small list of questions you can use to evaluate them:

  • How to navigate between directories, create them, remove them using command line.
  • Creating, deleting, updating files from command line.
  • How to ssh into remote machine? What the steps required?
  • Handy server management tools? Backups, Snapshots, releases, symlinks, shared directories etc
  • Why do you need deployment scripts? Favorite deployment tools.
  • How to setup a server from scratch?
  • Difference between app server & web server.


7. Version Control 

I would ask which version control system they have been using and what was their usual work flow. How often they commit, how they keep commit message short and concise, and other basic tasks performed. Here's the basic starting point for git:

  • How would you setup a repository using git(or your favorite version control system)? - If they have ever used a version control, then should be able to explain it.
  • Why do you use version control system? Advantages & Disadvantages?
  • How do you create branches? Why do you need them?
  • How do you resolve merge conflicts?
  • How would you revert a commit that has already been pushed?
  • Do you use aliases? 
  • How do you check logs and diffs?
  • Difference between merge, squash merge & rebase?
  • Most handy and least popular feature of git?
The basic idea is to check if they have been using version control effectively or not and learn a thing or two from them.


8. Web Security

The candidate should be aware of basic security issues like SQL Injection Attack, Cross-site Request Forgery, Why should you keep your libraries up to date and how to manage this? Server side validations vs Client side validations and why client side validations can't be trusted? Whitelisting attributes, etc.

Checkout Ruby on Rails Security Guide to get the general idea. Ignore Rails specific stuff, most of it applies to general web development.

9. Testing

If you're still very early in your career, then testing won't make much sense to you (trust me, I've been there), but over time it'll grow on you I know it because it certainly has for me and some of my friends in similar domains.

Ideally you should be able to describe basic testing setup, how to write unit tests, when to test, and basic ideas behind unit testing. Integration tests are important too, but they are bit advance, so I'll leave that up to you to.



I know these are fairly basic stuff, but these are the most generic things I can think of in web domain. You can always dig down deeper, but this list should give you a starting point, and that's the whole point.  You can use this list to conduct telephonic round, then ask them to solve a real world problem at their own time.



Here are the techniques you can use to dig deeper:
Assignment: You could ask candidates to build a quick prototype of some idea, so that you can get the feel of their coding style and standards.

Pair Programming Session: This will allow you to have a closer look at how the candidate behaves in a real world scenario.

Contract based work: How about hiring them on a contract? This way you'll definitely know, if they'll fit in your team or not.

That's it!


Your Turn?
As always feel free to suggest more generic stuff that I might have missed and how would you go about it?

No comments: