Reverse interview questions

06 December 2020

break the coupling header

Questions you should ask when interviewed for a Software Engineering position.

Why ask these questions during an interview?

As a Software Engineer, you will go through several interviews in your career. These interviews are typically set up by the potential employers to evaluate your cultural and technical fitness for the role.
From the candidate’s point of view, the interview process should not just be about convincing the employer. That is of course important, however, it should not be your primary concern unless you are in dire need of a job. Instead, you should mainly aim to understand what the company works with, how your future teammates operate, what would your development be and so on.
In other words, you should strive to collect the necessary information which will allow you to assess the technical and cultural suitability of the workplace, its tech and the people in it.

This is what lead me to create a set of reverse interview questions.
It is tailored for product companies and, nonetheless, should be adjusted depending on the setting as well as common sense. Do not try to blindly follow it irrespective of the flow of the conversation, it will just be awkward. Usually, the interviewer will ask you if you have any questions. This is your chance to start with them, taking into consideration what has already been discussed. No need to ask all of them, or in a particular order either. The context matters!
Most, if not all, questions are open-ended and there is no “correct” answer. More precisely, it is up to you to determine whether the responses satisfy you or not. They are also best-addressed towards individuals involved with development. Do not ask them to an human resources representative or a recruiter. Furthermore, topics that should be covered in every interview, such as benefit packages, working hours salary etc, are not included.

Overall, personal experience shows these questions make it easier for the interviewers to illustrate in depth what and how they work with. Thus far, they have been warmly welcomed and even helped to make a good impression. To say the least, they show the candidate is highly interested and seriously engaged with the process.
More importantly they enable you, as a Software Engineer, make well-informed career decisions.

Technology stack

Question(s) Comments
What does your technology stack look like? Unless already mentioned, do not forget to ask about programming languages, target operating system, build system or framework, continuous integration and version control software.

Way of Working

Question(s) Comments
Before a team member starts working on a task, what preparatory work has taken place and what occurs after? Is the task is written down in some tool and who writes it? Are the tasks derived from a certain set of requirements? Who maintains those requirements? How is traceability ensured? How does the code get peer reviewed?
Do you have a specific workstation setup in regards to the operating system, the IDE etc? In some projects there is a very well-defined toolset, either due to company guidelines or constraints set by the product domain. Others let developers freely select their own. The latter is not always the better choice since it may be trickier to set up an efficient workflow.
Do you use any containers for your development environment and/or the product? Using containers make it easier to get all necessary dependencies, however, may be less flexible.
Do you do pair programming? Some like pair-programming, some do not. Eitherhow, it is something good to know in advance.
How do you ensure knowledge sharing? Knowledge sharing is important and there are different ways to do it, which may or may not suit you.
Are there usually person-specific tasks or can everything be taken up by anyone? This is one of the most important questions for me. I strongly prefer when everyone can potentially take up any task in the team. However, others like to go deep and specialize in particular sub-domains.
How do you write documentation? Do they maintain separate documents, is it contained in the code or is everything self-documenting so there is no need for extra documentation?
How do you work with bugs? What happens after a bug is discovered? Who usually reports them? How does the emergence of a bug affect their planning?
How do you collaborate with other sites? It is often fun to work with colleagues located in different parts of the world, however this does come with its set of challenges.
When developing a feature, is the team able to complete it in its entirety? This will give you a hint on the size of the system you will be working with as well as how vertical the team’s domain of responsibility is.

Agile

Question(s) Comments
Do you follow any development methodology, e.g. Agile? If so, how? Are there daily standups, retrospectives etc?
How do you write tasks? Are they formulated as user stories? Are they estimated?
How do you release software? How often do the releases take place? Are they automatically built and deployed?

Open source

Question(s) Comments
Are you working with open source software? If so, how? Can they name some open source packages they heavily utilize? Do they upstream any changes? Working with open source can be a valuable experience to carry with to the next job and upstreamed changes offer great visibility. On the other hand, there may be multiple do’s and don’ts which can make your life difficult.

Relations with customers

Question(s) Comments
How do you collaborate with the customers? Dependencies, communication and collaboration with the customer can vary between projects or even teams in the same project. There are those who enjoy being tightly engaged with the customer while others prefer working more isolated.
How smooth do customer deliveries usually go? Delivering software may require intense collaboration with the customer for the new software to be integrated. Some thrive in such situations and view them as a chance to understand the customer needs better. Others try to avoid them.

Testing

Question(s) Comments
How do you test your code? Testing and verification may happen at different levels. From unit and integration tests, to manual verification and trying things out in hardware or software in the loop rigs.
What test frameworks do you use? Not all frameworks appeal the same to everyone. It is good if you know this in advance.
What are your thoughts on Test Driven Development? Do they use TDD? If not, why?

Career path

Question(s) Comments
What do you think I will love about this job? A good indicator of the extent they have understood your personal goals and style as well as the incentives they have to offer.
Where do you see me in 5 years? A question, often addressed to you as an interviewee. Reversing it offers you insights on the available career development paths.
How common is it for employees from this branch/department/team to advance in the higher organizational hierarchy? Are the ones on the top coming from a different background to yours? Can your loyalty potentially pay off?

Self-development

Question(s) Comments
How often do your employees attend conferences, courses, seminars or hackathons? All companies claim they care for the personal development of their employees. However few have concrete examples on how they do it. Not all activities will satisfy all engineers, therefore getting an input on this can be crucial.

Collaboration with 3rd parties

Question(s) Comments
Do you work with external suppliers? If so, how? Working with external suppliers can be both fun and/or challenging. It is good if you can find out how this synergy works.
Do you collaborate with academia? If so, how? If not, would you be open to? Participating in research projects can be interesting and rewarding. However, it may consume a portion of your time and it is not everyone’s cup of tea.

Innovation

Question(s) Comments
Who and how comes up with novel features? Does the responsibility for coming up with new features lie with the customer or the company’s higher management? Is there an “advanced engineering” team that is tasked with this? Do the employees themselves often propose novel product functionality? Or is it interns that get to experiment with the fun stuff?
What kind of functionality are you mostly working with in this branch?
Commodity functionality constitutes all functionality that customers typically expect in a product or system, but that is also offered by competing companies.
Differentiating functionality contains the functionality that makes customers select our products or systems over those from competitors.
Innovation functionality is experimental functionality. Company experiments with different innovative ideas in order to identify new future differentiation.
The three types of functionality are taken from Jan Bosch’s 3LPM. [1], [2]

3LPM Jan Bosch