I do believe that a job interview is a two way process i.e. you, as an interviewee, should be comfortable to ask a future employer all questions you’re concerned about.
While preparing for applying for software engineer position I decided to list questions that I would like to ask to help understand if a company is a right place for me.
As a starting point I took the Joel test and this article(in Russian), I revised and updated them, and added questions from my personal experience.
The result is a comprehensive list that covers different areas of being a software engineer in a company, such as technology stack, development process, education and growth opportunities.
I used the list as a reference during my interview series with Expedia. I didn’t ask all the questions to a single interviewer but I picked some based on the interviewer’s role.
Programming Languages & Frameworks
How coarse grained is your project? Microservices/monolith architecture
Build tools (build time/compile time)
Databases (SQL and NoSql)
Source control systems
IDEs, other common tools
Streams/Message queues/Distributed caches/RPCs
How soon code submitted to the repository will be deployed to the production? CI/CD? Containers? Configuration management tools?
Under what load does your application operate?
What are service level agreements? APIs? Inputs and outputs of your application?
What new technologies/frameworks/tools do you use? What was the last one integrated into the project? How a process of adopting a new framework looks like (Legal requirements, security requirements, budget, etc.)
What tools do you use to profile your software?
Describe development process. What software development methodology do you use, e.g. Agile, Scrum, Kanban? Code review practices? How was it improved in the last year? What would you like to improve in your team
How many people are in your team? What are the roles in your team? SDEs/Seniors/Testers/QA/DevOps/Analytics? Describe a typical day of a software engineer? Non-typical day?
What are manager’s responsibilities in a team? Do you have a team leader? Tech leaders? Technical project managers? Engineering manager? What are the differences between those positions?
How do you understand if a project/sprint has successfully completed or failed? What performance metrics do you use?
Who supports project documentation? How often do they update it?
How do you estimate tasks? Who does the estimation? How do you measure tasks? Who is responsible for big changes?
How do you test your code: concurrency/async/database/GUI? Performance testing? A/B testing? Hallway testing? Regression testing? Benchmark testing? Test coverage statistics.
Do you have a test environment? Integration environment? Is it possible to verify application locally?
Which bug tracker do you use? Do you use any exceptions trackers?
Who and how triages new issues? Describe a case when a priority could be reconsidered? How many open high priority bugs do you have?