Common Software Engineer Interview Questions

Ayomide Ibosiola
14 min readJul 13, 2022

--

Do you want to be the shot-stopper and goal-poacher at the next interview? Do you want to sit at the advantaged edge of the next interview process you’ll go through?

Advantaged avatar
Curled from Outsourcing-Pharma

You don’t have to be the best in a practical sense to get the next job. Yes, you heard me right. The best during the vetting process does not always have to be the best in a practical sense, but the best right there gets to the offer stage. There are a number of things will make you stand out from the resume-vetting stage to the initial call with the recruiter to the technical assessment and to the meeting with the hiring manager.

I am regularly on that dreaded panel side, where decisions are made. I have been in your shoes for some years before making the transition. Remember, reviewing these sample questions can be helpful as you will most likely be asked one or more.

Here is a compilation of several questions I was asked and the questions I ask even now.

  • What programming languages do you use? Which do you prefer or are most familiar with?
  • Describe the last project you worked on, including any obstacle and your contributions to its success.
  • What are your thoughts on declarative and imperative paradigms? Are they different? What makes each paradigm distinct? Explain functional and object-oriented programming?
  • What are your most used design patterns, and in what contexts do you use them?
  • What is “Agile” software development, and what are your thoughts on it?
  • What are your thoughts on software testing?
  • Describe a difficult bug you were tasked with fixing in an extensive application. How did you debug the issue?
  • How do you explain technical challenges to stakeholders who do not have technical knowledge or backgrounds?
  • What aspect of our company, product, or team interests you the most?
  • How do you determine a project’s success?

What programming languages do you use? Which do you prefer or are most familiar with?

Your knowledge of the distinct programming languages stated in the Job Description is vital to having success in this role. However, your experience with a wide range of programming languages is a plus.

Before your interview, review the Job Description to see the programming language experience required for the role.

When asked the programming languages you are familiar with, respond with languages you’re familiar with that match the employer’s needs, as indicated in the Job Description.

Example: “I am proficient in Java, C++, JavaScript, C#, Ruby and Python. Among these programming languages, I feel most comfortable working with Java, C# and C++. In my previous role, I worked mainly with Java to create applications that worked across multiple platforms. I also used C++ to develop a new operating system that worked with the applications I engineered. Using C#, I was able to improve my productivity when developing web-based apps and software.”

Many interviewers expect engineers to be familiar with multiple languages. They might look for an engineer who has experience with C++ and with Java to demonstrate that the applicant has the programming chops to pick up a new language rapidly. Python is a highly sought-after language. If you are applying for a full-stack role, you should be familiar with JavaScript frameworks like React and Node. Having some scripting experience with Perl or Python is also a big plus.

Read more here.

Describe the last project you worked on, including any obstacle and your contributions to its success.

A question relating to a specific project will help the interviewer better understand your process and how you handle adversity while working on a particular task.

As you answer this question, use the STAR method (Situation, Task, Action, and Result) to craft a detailed, informative answer. Start by describing the situation; this allows you to provide all the necessary details about the project you were working on. Next, discuss the tasks you were assigned to; outline your level of responsibility. Describe the action you took, including the steps to achieve a goal, and finish with the project result.

Example: “A previous employer tasked me with creating an internal online learning and training program for employees. The program’s purpose was to ensure all employees received proper training on specific topics, including customer service, compliance with legal requirements, and workplace ethics. I began by researching similar training systems to determine what worked and what didn’t. Next, I used Java to code a simple program, which I then used to upload training courses.

After testing the simplified program, I added elements to make it more engaging to employees, such as games and interactive quizzes. This program was well-received by the organization’s employees, and their customer service success rates increased by 25% after all team members took the required course.”

What are your thoughts on declarative and imperative paradigms? Are they different? What makes each paradigm distinct? Explain functional and object-oriented programming?

“Programming paradigm” broadly categorizes languages as either declarative or imperative. However, it is helpful to consider these general programming styles rather than concrete language directives. While specific approaches may be cumbersome in some, many are not that rigid. Languages such as JavaScript and Java allow either approach to be taken, even if they lend themselves toward one approach over another.

With questions like this, employers want to gauge your familiarity with more abstract concepts in software engineering. There are many approaches to writing high-quality, maintainable software. Intelligently implementing a programming paradigm requires knowing at least some of the benefits and trade-offs of each.

As with any subjective question, there can be strong opinions. While your answers should be stated confidently and with supporting experiences, it is easy to slip into speaking negatively about your less-favored approach. The interviewer could have a contradictory opinion, creating avoidable tension. Focusing on objective obstacles you face with the process will avoid such situation and potentially open a friendly dialogue on the pros and cons of each.

Example: “There was a project where we were tasked with reworking the browser client application. It used an imperative, object-oriented approach, with many custom controls getting much of their functionality from a growing inheritance hierarchy. We took this as an opportunity to shift to a more declarative approach. After the conversion, we saw a dramatic decline in state-related bugs as we no longer manually updated the interface in response to events. This had previously been the most common type of user-reported bug.

However, we had to make adjustments in a few key places. In more dynamic, performance-sensitive portions of the application, the caching mechanisms we implemented to prevent excessive recalculation were becoming overly complex. We simplified this by switching back to an imperative approach to updating the component.”

What are your most used design patterns, and in what contexts do you use them?

Similar to the previous question, this probes your knowledge of more abstract, theoretical concepts. Very few people are familiar with all of the formalized software design patterns. Many well-established engineers have a hard time even naming more than a few. After reviewing the topic, you may realize that you leverage many of these patterns daily, even if you aren’t aware of the formal name. Reviewing these concepts helps to provide a common shorthand, streamlining complex discussions.

Example: “For gaming projects, my level state and player character are generally implemented as singletons. For enemy creation, I’ll use a factory that will produce differing enemies based on some inputs. Additionally, the bullets being fired by the character will be implemented in an object pool to avoid performance hits from excessive instantiation and garbage collection. If the game is more complex, I may switch to a compositional model such as Entity-Component-System. The system functions would then leverage dependency injection to better separate concerns and increase the testability of the game logic.”

What is “Agile” software development, and what are your thoughts on it?

This process is an essential component of software development. “Agile” is currently one of the most popular software development processes adopted in the industry. The core concepts were introduced in 2001 when “The Manifesto for Agile Software Development” was published. Since its inception, growing numbers of companies have adopted the methodologies. However, there is a wide range of opinions and interpretations on the subject. Some invest the time to train for Agile certification, while others use the principles as guidelines rather than rigid rules, interpreting “Agile” as an adjective rather than a noun. And there are yet others who wholly disagree with the philosophy.

No matter your opinion, wide industry adoption means you will likely work within the framework at some point in your career. You should be capable of articulating the details of the process and try using concrete examples from your experience. In your answer, address areas of the process such as:

  • What worked about the process?
  • What did not?
  • Did your team deviate from the recommendations?
  • Did that work to your benefit or detriment?

Example: “Agile software development is a process that focuses on incremental delivery by the team. The project is broken up into small chunks that can be completed within a given timeframe called ‘sprints’. In my previous role, we were pretty successful in adopting the process. We used two-week sprints and kept high contact with many face-to-face discussions to review questions and concerns as they arose.

In addition, we had daily standup meetings to keep everyone synced on team progress. The only adjustment to the process I would have made was regarding our standup meetings. The name ‘standup’ refers to literal standing meetings to encourage focus and brevity. However, our meetings tended to transition into formal status meetings for our team lead rather than remaining a time for our team to sync. Besides this, the process facilitated delivering higher quality software on a more predictable timetable.”

What are your thoughts on software testing?

Testing is an essential component of the software development life cycle because it ensures the quality of the software before it is deployed to users. Approaches to Testing range from manually testing the application to writing test suites for individual code modules or “unit testing”. Within these approaches, there are many schools of thought. For example, unit tests may be written in a strict test-driven process where failing tests are reported before any business logic, aiming for 100% of the code to be exercised. Other approaches enumerate particularly complex or sensitive code and write a test for those instead of every line.

The point is even debated amongst the writers of “The Manifesto for Agile Software Development,” which arguably popularized Testing as a standard part of the software development process. In the 2015 talk, “Agile is Dead,” co-author of Pragmatic, Dave Thomas stated, “I mostly don’t test,” a sharp contrast with other co-authors such as Martin Fowler and Kent Beck, who primarily advocate for a test-driven approach.

It would help if you had informed opinions on why you favor one approach over another, and it will demonstrate that you are aware of the range of methodologies and have made a choice based on sound reasoning. Similar to speaking about Agile software development, negative statements should be avoided in general.

Example: “Testing is vital to producing high-quality software for our users. However, in a new project, I generally will not lead with them. I think of tests as a tool for locking down mature functionality. Often, the project concept varies quite a bit from the final product as we begin collecting usage metrics and feedback. For this reason, I will start with simple manual Testing. As the feature set stabilizes, I will then begin to implement tests. Most of my test suites will be unit tests that target critical areas of the application.

Additionally, I’ll have a narrow set of integration tests leveraging Selenium. To ensure execution time isn’t excessive, I’ll focus those tests on the most vital user interactions. Finally, assuming the infrastructure provided by the DevOps team supports it, a canary deployment will be leveraged for each release to ensure any potential impact of missed bugs is limited.”

Describe a difficult bug you were tasked with fixing in an extensive application. How did you debug the issue?

Bugs usually appear in new applications and software programs, and a software engineer is responsible for locating and resolving these issues. Difficult bugs are often the result of an unusual alignment of conditions. Hearing your experience of fixing bugs explores several aspects of your skills, including critical thinking and how well you handle stress and pressure.

Example: “I received a bug report from our DevOps team about one of our databases being stressed from an expensive query being called excessively from the UI. I first checked the logs to find out when the trouble started. This gave me the rough commit range in which the bug was introduced. I was able to reproduce the bug on the latest piece of code, but only in production. I ran a git bisect to isolate the specific commit that introduced the bug and pulled the branch. However, I was not able to reproduce the issue; I went to the UI to debug using the browser dev tools. Source maps are unavailable in our production environment, so I had to map the minified JavaScript code to the source CoffeeScript code.

I determined that the offending method was being called on every page instead of the occasional call from a lesser-used specific feature. Diving back into the commit I’d identified earlier, I found no change in the method. The only approximate difference I could see was an unrelated tweak to a line in a file with reference to it that had been “commented out” about three years prior. I deployed separate logging statements to ensure I correctly identified the method. My logging confirmed the connection. After some additional rounds of logging, I was able to identify an unfortunate bug in CoffeeScript in which the code that had been “commented out” years earlier was being included in minified production code, due to an alignment of the tweak and another piece of code from another developer that had been merged into master minutes earlier.”

How do you explain technical challenges to stakeholders who do not have technical knowledge or backgrounds?

Businesses form software development teams to solve problems for real people. It is easy to forget this when deeply immersed in development. While some engineers may wish to be provided software requirements and work uninterrupted on a project “until it’s ready,” it’s important to remember that stakeholders in non-technical departments — like customer success and marketing — must plan around the development. Unforeseen obstacles often present themselves in one form or another, requiring a conversation on how to solve the problem best. Employers want to know that you can communicate these obstacles to non-technical stakeholders, ensuring all parties are fully informed when decisions are made.

Example: “When confronted with an obstacle, I don’t feel it is my job to unilaterally alter the project scope or tell stakeholders that it is impossible to do something. Software quality is often a matter of balancing scope, cost, and time; that balance is a business decision instead of a technical one. Instead, I come up with some potential alternatives and present their impact on that balance. For example, suppose an impediment may significantly push delivery beyond what was projected. In such case, I might suggest an alternative that can meet the current timeline with much of the same scope but will likely diminish the quality and degrade the user experience. I’d suggest lowering the priority of specific features related to the obstacle allowing us to deliver some portion of the original feature set in the planned delivery window, and this is often the starting point of a conversation as the stakeholders begin asking more questions about what can or can’t be done. This collaborative process ensures that all parties are confident in the final decision.”

What aspect of our company, product, or team interests you most?

Retention is a high priority for many employers, and replacing a team member can be pretty expensive in terms of recruitment cost and training time. Asking questions to ensure your interests and motivations align with the company can reduce the risk of losing you as a team member. Though you’re ideally excited by the company’s mission, it is not uncommon for companies to use niche technology specifically to attract higher-quality talent. To answer this question, incorporate details from your research that speak specifically to the company’s values, past projects, or a responsibility mentioned in the job description that aligns with your career motivations and progression.

Example: “I was watching an interview with your CEO about your product that aims to disrupt the lending industry. Streamlining arduous tasks like loan applications have huge potential. I think the growth in this sector over the last year is a big indication of things to come. Additionally, I’m excited by the untapped potential of blockchain technology you have recently decided to incorporate. I see this as giving your company the competitive advantage in this space as the verifiable auditability will reduce compliance costs.”

How do you determine a project’s success?

While releasing high-quality software is vital, software that doesn’t address the needs of the user and the business produces little value. Employers want to know that you are thinking beyond the technical aspects and aim to solve real-world problems. This often comes down to identifying a metric to improve and creating a testable hypothesis of your expected project impact.

Example: “Before a project is even started, success metrics are laid out. I will identify the key performance indicator (KPI) that we are hoping to impact and begin gathering information to formulate ideas. These ideas are stated as a falsifiable hypothesis. For example, ‘We believe that reducing checkout steps will increase sales conversion. An increase of 2% will be considered a positive signal.’ This keeps the team focused on the impact of our projects on the business’ bottom line.”

Additional software engineer interview questions

Here are some additional questions grouped by category that you can practice answering in preparation for an interview:

General interview questions

Some questions you may face in a software engineer position interview are general. The purpose of these questions is to get to know more about your personality and how you could fit in the workplace culture, such as:

  • What were your main responsibilities in your previous job?
  • When was the last time you were in a crunch? What could have prevented the situation, and what changed to avoid it in the future?
  • Why should we hire you as a software engineer on our team?
  • What are your favorite software engineering books, and why?
  • How do you work independently and as part of a team? Which do you prefer?
  • Do you prefer “startup” company environments or a more established atmosphere? Why?
  • What are your greatest strengths and weaknesses?
  • Describe a time you overcame a non-technical obstacle at work.

Related: “Tell Me About Yourself” for Software Engineer Interviews

Software engineer interview questions about experience and background

In addition to the general questions a hiring manager could ask, you will likely also need to answer questions about your background and experience in the software engineering industry. These questions will allow you to elaborate more on the skills you have gained through your education and work experience.

  • Describe your process for completing a project from start to finish.
  • What scaling issues have you had to deal with on past projects? How could it have been avoided, and how did you solve it?
  • Tell me about a time that you had to collaborate with other people on your team or other teams to solve a complicated problem.
  • Describe the process your team currently implements for completing projects. What works well? What would you change, and why?
  • Which project management tools do you feel are most useful in your role as a software engineer?

Related: 21 Job Interview Tips: How To Make a Great Impression

In-depth software engineer interview questions

An interviewer may ask questions that allow you to showcase your knowledge regarding specific aspects of the role, such as:

  • What are your favorite software development tools?
  • How much do you code daily in your current role?
  • What differentiates a good software engineer from a great one?
  • Describe what you believe are the key principles of software engineering.
  • How comfortable do you feel reviewing code written by others? What process do you follow when reviewing someone else’s code?
  • What are your most used design patterns, and in what contexts do you use them?

I strongly recommend you read this piece. It contains 84 Full Stack Developer Interview Questions you might encounter in an interview.

Many thanks for riding with me for this long.

Drops Pen.

How about a clap or two. Nah, maybe three?

--

--