As a Product Owner or any person that is supposed to deliver products on schedule, you want sprint completion percentages as high as possible or that your team produce more high-quality code or just shorten time-to-market. As usual, there are many ingredients to success: the key is having the right people doing the right stuff. The burnout rate doesn’t help at all and the need for sourcing and vetting new software developers is both expensive and time-consuming. At the end of the day you might end up with an engineer who after 2 months will leave you high and dry, and it’s probably your fault.
Here at Idego, assessing software engineers is our bread and butter, so we wanted to share with you our tips and tricks on screening IT staff, so you can do it right from the first time.
What are the interview stages and how many of them you should have?
As few as possible. It’s true that there are companies that have a 6 step process but we believe it’s overkill, especially in times of market shortage – during that time your candidate can get impatient or just get an offer from your competitor. There is one exception if you’re a company that people dream of, then go ahead, you can have as many interviews as you like.
Depending on the company, the vetting process might look different, but there should be 2 crucial stages:
- Soft skills interview, usually done by HR.
- Technical interview, conducted by your technical staff.
I would say that both stages are meaningful. To a certain extent, you can coach and mentor somebody about technical skills. On the other hand, if you have a person with exceptional technical skills who is a lone wolf, that’s a problem, and it can’t be fixed, at least not easily.
To sum up, you need to verify the soft skills and technical abilities of your candidate. Sometimes these two mandatory stages can be complemented by an additional ones, as a form of ultimate quality assurance. In our case it could be additional meeting with the team, discussion with CTO, trial (paid) day in a project.
How to check software developer soft skills
Let’s be honest, it’s not easy. Try to avoid questions that people don’t like and consider to be stupid, such as “What is your biggest weakness?”, or “Where do you see yourself in five years?”.
You can simply replace it with questions like “Which skills do you want to develop now?” or “Which areas do you want to work on?”. There are eight areas you will want to assess:
All these areas above aim to give you a clue as to whether a person is a good fit for your company with regards to their personality and working style. The hard part is that the real answers frequently lie between the lines.
Example questions to ask a software engineer:
- Could you describe a situation where you had an idea how to solve a problem, but the rest of the team disagreed that it was the best solution?
- Please tell me more about a case where you struggled for a very long time to solve one problem. What did you do?
- What do you do when the client wants to use one technology, but you know that there are other solutions which could be more effective?
- How do you usually prioritize your tasks? What do you do when you have too many tasks?
- Tell me about a situation in which you had to work in a team whose members didn’t have a good relationship. What happened? What role did you play in the team? How did this situation come to an end?
- Could you tell us what you are currently working on? Maybe you have any ongoing projects.
Technical interview
This is the part where the magic happens. There are a lot of candidates who talk about their experience in AI, ML, but when it comes to solving a simple problem, e.g. putting a dot every third digit and making a thousand separators, then that person sits on the task for 30 minutes. Of course, you want to spot that early on.
A particular approach should be of course a bit different, depending on the company, applying position or seniority, but there is one general rule that brings best recruitment results: make the verification process as similar to everyday project routine as possible.
Which questions to ask?
In principle, there are two types of questions:
- descriptive questions
- theoretical questions
Theoretical questions:
- What are the pros & cons of Canary deployment strategy?
- What’s the difference between list & tuple in Python?
- If you use proxy model inheritance in Django, may the base class be abstract? Why?
However, we do not recommend you to use such types of questions as it doesn’t allow you to better understand the candidate’s craftsmanship in experience, so the best option will be to use the descriptive ones.
Descriptive questions:
The real value of descriptive questions lies not only in a better understanding of candidates’ knowledge but also in simulating real project discussion, i.e. when there’s an architectural or technological decision to be made. That’s why it’s worth preparing descriptive, divergent questions instead of theoretical ones, where a strict definition is the only answer.
- Let’s talk about model inheritance in Django. What styles have you used in your projects?
Followed by a discussion about abstract & polymorphic models, will give you a better understanding of candidates’ knowledge and bigger opportunity for actual conversation, than simple, easy to grade, questions.
2. Let’s dig into Javascript execution flow. How would you construct an event loop that includes a few, let’s say two macrotasks, and a microtask queue? What can you use to execute parallel threads of calculations?
Traditionally, there are three branches of topics you could cover to find out if someone is more advanced to full-stack or more strict to the backend or things related to deployment processes. It includes questions from the backend, frontend and DevOps area.
However, if the first question that comes to your mind, for example, is “What are the pros & cons of a certain approach?”, we are up more for questions that simulate work on a real project, for instance:
DevOps
- We’re working with over 20 nodes live app, with a lot of users. What deployment strategy would you recommend for us? And why?
- How may we make software engineers’ life easier by using Code Pipeline?
Frontend
- Using Angular framework how would you write a code that allows the text to follow mouse movement?
- How may you use React hooks for state management? What other solutions do you know?
Live coding and code verification
Homework tasks as well as repository verification (portfolio) might be processed by HR and sent to the appropriate technical person for evaluation. You can also check out candidates’ GitHub accounts, especially if there was no time for live coding. Typically you search for candidates’ approach to coding, the activity of the profile, the difficulty of the completed projects, code quality, if he or she is a fan of sexy one-liners, styling and documentation is also important. What you can verify there:
- source code
- clean code
- approach to coding
- the activity of the profile
- the difficulty of the performed projects
For the live coding challenge part, we would strongly recommend to use tasks related to the project specifics.
The projects based on test driven development approach
If your project is developed by using TDD approach, it’s beneficial to check whether candidates’ way of thinking, and competency in writing actual tests, will ensure the smooth onboarding:
TDD – live coding task with TDD approach
Using the TDD approach, write a program that checks if the number is a perfect number. A perfect number is a number that is the sum of all its proper divisors (that is, without itself).
Example:
Pair programming mode projects
In an all-remote world your team works in pair programming mode? Well, that’s great, and it’s worth checking how the candidates will fit:
Pair programming
The following task example is based on Java language.
Start info:
Example task: Fill in a body method “employeeToJson”
Result:
Additionally, you can add the next to your task:
- Add a field to IdegoEmployee that will be skipped when serializing.
- Add industries and test unit, etc.
Code reviews
If the process of code reviews is highly appreciated by the team, let’s figure out what kind of feedback you may expect from the candidate.
You may use one of “at hand” examples coming directly from your project, or create a completely new case, especially for recruitment purposes.
Task example: Create a code in which one React component renders a few other components from the loop, and you notice that some elements are removed from the DOM and created again with each rendering. What’s more, to those components you pass, as a key, generateKey function, that creates unique keys with each rendering.
Ask the candidate about what happens and why. Additionally ask about the way to make the code more optimum.
Pseudo code
The pseudo code is especially useful to understand how much the person is capable of thinking algorithmic and planning functionality. The task can be done by using target technology such as Python or Java. The use of the target technology also checks the knowledge of syntax, functions, etc.
Example task: Write a program that loads two strings from the standard input and assigns a string to the standard output, which is their largest common subheading. For instance:
If everything fails
Following our tips doesn’t guarantee that you’ll succeed but it’s growing your chances. But when the s..t hits the fan, just seek help in organisations like ours – we recruit and verify top talents such as software developers all day, every day. Instead of doing it yourself for months, we can extend your team really fast. In fact, we can present the first candidates within 3 days, just remember to brief us as best as you can. Feel free to contact our team here and find out how we can make your life easier. May the force be with you!