This document outlines the process for hiring a software engineer who will be working on developing user interfaces for the web-platform and/or developing APIs.
- Introduce ourselves and set expectations that tech interview will take 30 - 90 mins with the aim to find out where candidate is strong and where they are weak (3 min)
- Introduce company - what we do, clients, working environment, practices (3 min)
- Ask what they are passionate about, things they are proud of in their career so far, how do they learn new things, presentations they've made, blog articles (etc) (6 min)
- Technical interview (20 - 80 mins)
- Candidate questions (if any)
The purpose of this phase of the interview is to measure (in order of importance) the candidate's:
- Level of experience in different technologies (beginnner, intermediate, senior, expert)
- Ability to work with and/or lead others
- Attitude and character
- Consulting skills
There a few ways to measure the technical competency of a candidate. I've tended to rely on Domain Questions but included a small technical challenge as well.
The approach used needs to be adaptable to people with different levels of experience. For example, a junior engineer is not going to have much experience deploying an application to production, so don't focus on that. But an experienced engineer should be able to talk about 12-factor applications. Adapt the interview as you learn more about the candidate's experience.
The general approach is to ask questions for different technical domains to assess their competency. Domains include:
- General software development
- Process of developing software within a team environment
- Branching & merging
- Design (layered applications) & patterns
- TDD (or not)
- Coding
- Testing
- Versioning & sharing code
- Deployment
- Monitoring
- Refactoring - how to you do it?
- How do you know your code is working?
- Process of developing software within a team environment
- API development
- Design
- Data modelling
- Frameworks & tools
- Patterns
- Testing
- Deployment techniques and strategies
- Monitoring
- Security
- Performance
- Web user interface development
- Designing responsive/adaptive web apps
- Frameworks and tools
- Patterns (e.g. Component architectures)
- Testing
- Deployment techniques and strategies
- Accessibility
- Performance
- Language knowledge & techniques
- Programming paradigms (functional vs OO, strengths & weaknesses)
- JavaScript (or Java, Rust, Go, whatever)
- HTML
- CSS
This step requires that the candidate is asked to provide an example of their code before the interview so that it can be reviewed before the interview.
Ask the candidate to outline the code-structure on a whiteboard first, then walk through the code.
Ask questions such as:
- Why did you choose that implementation?
- What would you do differently? What did you learn?
- How could the code be improved?
- What would you change if <new feature> was needed?
- How would you test <unit, feature, system>?
This step requires that the candidate is asked to solve a technical problem ahead-of-time and submit it before the interview so that it can be reviewed before the interview.
Similar to the previous approach. You could ask them to pair-program (if you have appropriate hardware). The technical problem should be sufficiently large to be useful, but not so large that it takes more than 4 hours to complete.