How I structure the .NET developer position interview as a Tech Lead.

Vasilii Oleinic
10 min readMar 20, 2022

If you have been a developer for at least some time, you were probably asked to conduct a technical interview. The first time you do something like this is overwhelming. Questions like :

  • What should I ask?
  • What answers I expect to get?
  • What if the guy that I’m interviewing is way more experienced than me?

start popping in you head.

We all were there, or so I want to believe that I’m not the only one.

Below you will find a system that I have been following for some time. It’s divided into 2 parts : Soft — Skills & obviously Tech — Skills.

Soft skills part.

Most likely you are going to spend the first part of the interview getting to know the candidate. Questions like :

  1. Tell us about yourself?
  2. What are some of your hobbies besides programming?
  3. Why did you start working in programming and what do you like doing?
  4. Do you enjoy getting feedback?
  5. What do you think some of your most important qualities are? (like responsibility, reliability, friendship etc…)

will help you in learning who is the person you are talking to. First part is dedicated mostly to getting the candidate to feel cozy and open up to you a bit, so you don’t start bombarding about how some tech mumbo — jumbo works. You might trespass a bit into the tech related experience territory with some general questions like:

  1. Have you worked on some open source projects or some of your part time projects?
  2. Do you have any plans for your development as a professional for the near and long future or maybe what would be your practices to keep your coding skills up to date?
  3. Would you be willing to take training or classes to improve your technical skills?
  4. Would you happen to have any technical certifications or are you planning on going to do any?

Remember although you are trying to be friendlier that your average tech recruiter, you still want to conduct an interview. Some of the above questions might bring you some insight into the type of developer the guy sitting at the other edge of the table or behind the monitor is. And try to see if she/he fits the company environment. For example if you have a dedicated growth plan for your employees and the candidate mentions that he has no idea where to develop next you might tell him that you have something like that and describe it in a few words.

Remember that if the candidate is a fit and was head hunted by your HR while is currently working for another company you need to pique his interest somehow and this might be an opportunity.

Back on topic after the initial discussion you are going to be slowly transitioning towards the candidates projects experience. Some of the questions might look like:

  1. What would be the projects you have worked on so far?
  2. What is the project you are most proud of, and how did you contribute to it?
  3. What were you using as a project management / task tracking tool? And what was your experience with it? (Devops, Jira etc)
  4. Interaction with the client?
  5. What would be the team composition of the project?
  6. What would be your role in the team?
  7. What was your specific role and responsibilities on the project you worked on?
  8. What were some of the specific tasks you were solving in the project?
  9. Do you prefer working on the back-end or front-end?
  10. Which are your power points?
  11. How are you estimating the tasks and manage work?
  12. How do you identify the functional and non-functional requirements and understand what is expected of you?
  13. What would you do if you were asked to perform a task and weren’t sure how to complete it how would you estimate the difficulty and the time for completion of the task?
  14. Describe the troubleshooting process you’d follow for a crashing program?
  15. What would be your definition of a completed task?

At this point you are probably better taking notes as the shape of the candidate is slowly making more sense. You get to identify his preferences, his past experience, how he structures his workload, how he estimates his tasks etc.

This is the part where you might drop a couple of nuclear questions on him/her like:

  • Would you classify yourself as a junior, middle or senior developer.
  • What would you hope to achieve in the first couple of months working in our company?
  • What would be your added benefit to the company and team?

This questions that are at the extreme edge so ask them carefully and if you are sure you won’t scare the candidate with them. I’ve been asked those before so that’s why I leave them here. In my experience I’ve asked those as well only a small amount of times when the candidates were overly sure on themselves and I wanted to test their stress resistance somewhat.

Tech skills part.

By this point you might have realized that the first part of the interview process is somewhat subjective in nature. Yeah the second one is only somewhat less subjective. Experience varies and the coding skills are only one piece of the whole puzzle.

Nonetheless below you might find some of the questions that I have come across and some of the ones that I ask:

General assembly questions:

  1. What is an assembly?
  2. What is an EXE and what is a DLL?
  3. What is JIT?

General language structures:

  1. Explain the differences between value type and reference type.
  2. What are the types of memories supported in the .NET framework?
  3. What is boxing and unboxing?
  4. What is the difference between an abstract class and an interface?
  5. What is a delegate?
  6. What are some types of classes?
  7. What are extension methods?
  8. What is inheritance? Does C# support multiple inheritance?
  9. What are Properties ?
  10. What is the difference between late binding and early binding ?
  11. What is the difference between a struct and a class?
  12. What is Reflection?
  13. What is lambda expressions?
  14. What is an extension method?
  15. What is a garbage collector?
  16. Explain what MVC means?
  17. What is Middleware?
  18. What is the appsettings file in a .net web solution?
  19. Explain role-based security in .NET? What would be a transition to policy based security?
  20. Explain what localization and globalization means and how its achieved.
  21. What are the lifetimes used with the Dependency injection container in .NET? Could you give example when you’d use one for another.
  22. Explain the difference between Task and Thread in .NET
  23. What is the difference of async and parrallel execution. And when would you use one and when the other?
  24. Is there any difference between concurrent and parallel execution?
  25. What types of Thread safe collections do you know? And what was the use case that you have used them in if any? (Been asked this once at an interview, was heavily dependent on the app the company was working with)
  26. What is the difference between managed and unmanaged code?
  27. What is caching?
  28. What are some of the caching strategies you know ?
  29. Explain different types of cookies available in .NET?
  30. What is an HTTP client factory and why would we use it?
  31. What is a retry policy, and what would be the case of using a retry policy?
  32. Have you worked with a service bus before? What was the context of using it?
  33. What would be the difference between a service bus and a queue? When you would use one over the other?
  34. What is a cron job? And how can you create a cron job in .NET?

NB for middle+ level candidates:

When interviewing for these positions traditional question — response approach is not that relevant IMO. When you get to this point you are better off going and asking questions about the structure of the projects the candidate has been part of, yup there is the NDA but come on we’ve been asked that a lot and just some high level details might be spilled. As well when interviewing for a senior position you need to see how the candidate can structure a system at hand (system design part later in this post). Writing clean code is ok at the junior — middle level are expected to do a bit more, but at a senior position the candidate is expected to solve problems of another level of difficulty and take responsibility so I’m usually accenting more on the system architecture part of the interview and soft skills when working with these kind of candidates. A thing you might ask questions about are the libraries that you are using in your company while developing for example : EF_Core, Polly, FluentValidation, Serilog, SignalR etc. For example :

  1. Have you used SignalR? What was the context? Have you had scaling issues how did you solve those issues?
  2. Have you worked with server less applications before? What would be their advantage over traditional apps?

Other things to ask about are from the following domains:

Git questions:

  1. Have you used git before? (yeah stupid question but we get candidates that have been working for years and still got not to use git).
  2. Are you familiar with the GitFlow? If not what was the git branching model you were following?

SOLID

  1. Could you name and explain the solid principles.
  2. A question I really like to ask is : Could you bring any concrete example of Liskov Substitution violation from experience or one you’d think developers would fail to see?
  3. Could you bring any concrete example of interface segregation from experience?

SQL general questions

  1. What is an index and how many types of indexes you know and have used(how?).
  2. What are stored procedures?
  3. What are SQL views?

For me the best way to test the candidate is throw at him a query that needs optimizations for multiple reasons and see how the candidate performs.

Devops

  1. Do you have any dev ops experience?
  2. Have you ever configured VM’s to deploy stuff on them?
  3. Do you have any IAAS experience?
  4. Have you ever configured pipelines for deployment?

Testing experience

  1. Tell me a little bit about your testing experience?
  2. What types of tests have you written?
  3. What kind of libraries have you used?
  4. Any good practices you could mention?
  5. When did the tests run in your pipeline?
  6. Did you have issues with long running pipelines because of a big number of tests? How did you solve the issue?

Mentorship skills

If the candidate opts for a middle+ position he/she should be a capable mentor that has had at least one or two juniors under the wings.

  1. Have you ever mentored junior developers?
  2. How did you find the mentoring experience? What were some difficulties or things you liked about that?

System design

If time allows it — I’m usually giving the candidates a vertical slice of a system to design if not — just a set of basic questions and homework. In the system design section you must pay attention to the way the candidate thinks. Werther he starts asking questions about the constraints of the system beforehand or starts to design it right away. Werther he pays more attention and goes to the business plane and thinks how to design the slice to bring value to the business and reflect the business in the slice or starts the tech mumbo — jumbo thing with libraries and patterns. At this point I’m mostly interested at how the candidate discovers the business constraints and navigates them. IMO if the candidate knows how to work with patterns that is not yet a sign of seniority. You are really starting to become a senior when besides the tech part you can analyze the business and can bring value by reflecting it in the design. Well long story short Tech side is only a part of the bigger picture you need to look at.

Nonetheless is you are short on time here is just a basic set of questions you might ask the candidate :

  1. Name your 5 most beloved software architecture patterns.
  2. What is the difference between a system vs solution design?
  3. What are the layering approaches you have worked in the past?
  4. What kind of programming model are the Decorator and Middleware pattern part of?
  5. What kind of programming paradigms do you know?
  6. DDD — anything you really liked and anything that let you down?
  7. Designing for cloud? How to achieve the following:
  • High availability
  • Scalability
  • Elasticity
  • Reliability

8. Work experience with Serverless applications / architectures.

9. What would be some service communication mechanisms that you have met.

(However don’t forget that this will be very subjective in nature so you are better off giving some homework as well at this point.)

Things to pay attention to… aka RED_FLAG.

— screaming snake case intended :).

  • Unclear answers. Candidates who struggle to explain their resume might have had little or no participation in the projects they listed. Ask follow-up questions to identify their exact roles and contributions.
  • Lack of energy. Developers are passionate about their profession, even if you can’t tell at first sight. Ask candidates about fun side projects, or about their favorite tools. Their reactions can indicate how committed they are to the field.
  • Inflexibility. You can’t expect candidates to know every software or framework that you use. But, candidates who are unwilling to adjust to your way of working are less likely to collaborate with your team. Opt for candidates who showcase a desire to learn and aren’t discouraged by getting used to new systems.
  • Bad team players. Developers might usually work in front of a computer screen, but they need to communicate with various people and teams on a daily basis. Poor interpersonal skills and signs of rudeness or arrogance indicate lack of team spirit.
  • Order-takers. Candidates who fail to see the “big picture” are not able to understand your company’s needs and objectives. Consider candidates who engage in the full software development life cycle. These people are proactive and suggest solutions — they don’t simply wait for instructions.

Well if you have come to this point in the post probably you are quite the reader or you are interested in the topic. Anyway at the end I want to say that any kind of critique is welcome as this is just a system that probably will go over multiple other iterations so the sooner those start and end the better for everyone as I will be sharing the changes for others as well.

Thx again for reading :)

--

--

Vasilii Oleinic

Azure Certified Architect and Passionate .NET Developer.