10 Essential Software Engineering Interview Questions *

question badge

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

answer badge

This question will give you an idea of the candidate’s programming knowledge, their level of proficiency, and whether they are a good fit for your company.

GitHub, a code-sharing website used by developers from around the world, listed the following as ten of the most commonly used programming languages and technologies at the end of 2017:

  • JavaScript is a dynamic language typically used for adding interactivity on websites.
  • Python is a powerful, general purpose language that gained extensive popularity in 2018. It’s widely used for a range of tasks, including web development, machine learning, and data analysis.
  • Java (unrelated to JavaScript) is a versatile general-purpose programming language used to create cross-platform applications.
  • Ruby is a dynamic, object-oriented, general purpose open-source programming language with a focus on simplicity and productivity. It’s primarily used for web applications, in particular via the Rails server-side MVC framework.
  • PHP is an open-source, server-side scripting language used for the development of web applications.
  • C++ is an object-oriented programming language typically used for operating systems, games, and embedded software. It can also be used for building higher-level systems such as remote-device and network management applications.
  • Cascading Style Sheets (CSS) is a mainstay of the web and used for formatting web page content. CSS files help define critical aspects (font, color, layout sizes, spacing, etc.) as well as maintain a continuous look and feel throughout multiple pages of a website.
  • C# is an object-oriented language developed by Microsoft. It is designed for improving productivity in web development and is often used with XML-based web services on the .NET platform.
  • Go is an open-source programming language made for building large-scale, complex software infrastructure. It can also be transpiled into JavaScript for use in front-end web development, although this is a less common scenario at the moment.
  • C is a high-level, general-purpose programming language. Originally developed for writing system software, nowadays it’s often used for developing firmware or portable applications.
question badge

Tell us a bit about the latest project you worked on. Was it completed successfully? Explain how you contributed to its success and how you handled any obstacles you may have run into.

answer badge

This question should give you insight into the candidate’s overall contribution to the project, their management skills and how they work with a team, as well as their interaction with project management and other stakeholders. Software projects almost always face roadblocks and complications, and being able to identify obstacles, solve issues quickly and efficiently, and get the job done properly and within deadline is a key attribute for a software engineer/developer.

question badge

Talk about a time when you had to make a critical decision during production. What happened? How did you manage it?

answer badge

This question should help you judge whether a candidate is able to think for themselves, analyze and evaluate issues quickly and clearly, and recognize the most logical relationship between ideas.

Critical thinkers often also have an explorative mindset which can lead to innovation and the improvement of production systems and processes.

Find top software developers today. Toptal can match you with the best engineers to finish your project.

Hire Toptal’s software developers
question badge

How would you explain APIs to non-technical stakeholders?

answer badge

Being able to communicate well is one of the most important skills a candidate can have. A question like this will give you an idea of how the candidate handles the most difficult or complex conversations.

A candidate might answer like this:

An API (Application Programming Interface) may be used for a web-based system, software library, computer hardware, and an operating or database system. It is a set of rules (code) and specifications that software programs can follow in order to communicate. Simply put, it works as an interface between different programs and facilitates their interaction.

While this answer is accurate enough, it may come across as “just more tech-speak” to a non-tech-savvy audience. A better answer would be:

“API” is a very generic term—it can be used in all sorts of programming contexts: websites, mobile apps, desktop software, and even operating systems (e.g. Windows, macOS, or Linux). It’s a specification for how a piece of software can be used by other pieces of software.

This is a little better: There’s less of an academic tone, and some precision was traded for slightly more relatable terms like “web site” over “web-based system” and “desktop software” over “software library”. However, it still gets too technical in that it has to have an aside to define OSes, which the audience may not be familiar with.

Compare that with:

An API tells programmers how to automate a product—anything from web apps like Twitter all the way down to Windows itself. For example, I could use Twitter’s API to fetch our company’s most recent tweets and then display them on our website. That way our social media specialist can simply tweet, without having to always take extra steps to copy the tweet to our website.

Here, the answer gets across three key aspects of the topic:

  1. What it is, in very relatable terms: Everyone has heard of programmers, Twitter, and Windows.
  2. What it does, using a concrete example. Here the example again uses familiar concepts: Tweeting and displaying something on a web site.
  3. Why it’s beneficial, building on the example and highlighting the “before and after” difference: It saves time and lets employees focus more on creativity over monotony.

This should give you an idea of what to look for, but feel free to choose a more familiar technical term than “API,” if applicable. Communication is one thing, but it would be a definite red flag if your candidate’s answer wasn’t even correct!

question badge

Here is a simple programming challenge. Could you have a go at solving it?

Example question 1 (shorter time frame): Write a function to compute the Nth Fibonacci number.

Example question 2 (longer time frame): Write a function that takes the current position of a knight on a chessboard, and returns a preliminary list of possible moves the knight could make. (That is, the current positions of other pieces are not provided, so you can’t check against capturing pieces on the knight’s own side nor making their king vulnerable to capture.)

answer badge

Giving candidates a simple programming challenge may seem trivial, but it’s useful for several reasons:

  • It gives you an opportunity to see how well they work under pressure. (It’s important to have them do this in front of you—you need to hire people who can write code under stress when needed!)
  • It demonstrates their educational foundation.
  • It shows simply whether they can write code or not, and how experienced they are.
  • Depending on what kind of challenge you choose, it can help you differentiate skill sets. It also helps tease out their scientific/mathematical background and whether they are a high-level thinker.
question badge

What do you think are the most important aspects to pay attention to when reviewing another team member’s code?

answer badge

Code reviews are fundamental to the software development process, even when there’s only one engineer. By posing this question you’ll get an idea of the candidate’s knowledge and problem-solving skills, their attention to detail, and whether they can keep an overview of the project.

Here is a sample answer:

“I first look for security, functionality, and readability. Is the code simple, or cluttered, bloated, and inefficient? How many lines of unnecessary code will I need to re-write or remove? I check for any weaknesses that could cause vulnerabilities and confirm that regulatory requirements have been met.”

Everyone has their own coding style and every developer or team will have requirements that are specific to their codebase. Effective code reviews often have checklists. Below is a limited list of general suggestions you could consider including:

  • The software passes automated and manual testing
  • Code follows applicable conventions and is easy to understand
  • Code is not duplicated
  • No negatively named boolean variables
  • Scrutinize methods with boolean parameters
  • Blocks of code inside loops are as small as possible
  • No memory leaks

But more important than which exact points a candidate brings up is their reasoning for doing so. Be wary of candidates who get stuck on tabs-versus-spaces bikeshedding at the expense of more crucial engineering elements: The above items shouldn’t all carry the same weight.

question badge

Do you consider unit testing essential, or a waste of time?

answer badge

Every engineer/developer worth considering should be familiar with unit testing. Asking this question will give you an understanding of their attitude toward it, and what level of priority they give it in their working process. Do they follow test-driven development (TDD) or behavior-driven development (BDD), or are unit tests something they tack on afterward for the sake of process conformance or mere appearances?

Typically regarded by most industry professionals as being a best practice in code maintenance and software development, unit tests are usually part of an overall testing strategy. They test for logic errors and coding flaws, helping to prevent bugs from advancing to the finished product. Plus, because they’re automated, they prevent regressions, where bugs return that had already been fixed.

question badge

What has your experience been like as part of an agile software development process, if any?

answer badge

The Manifesto for Agile Software Development outlines an approach based on iterations rather than a waterfall model. Requirements and solutions are generated through the collaboration of self-organizing and cross-functional teams and their end users. Among other things, it encourages a flexible planning style and a rapid response to change.

Knowing how a developer feels about agile development can help you understand how they will fit into your own process. Open-minded developers that are also able to see flaws in how agile processes have been run can provide valuable feedback to help your team’s methodology grow and evolve.

On the other hand, if they’re dead-set against a core process of yours, there may end up being too much friction for them to stay productive.

question badge

How familiar are you with object-oriented programming (OOP)?

answer badge

OOP has been a standard convention for over 20 years and is organized around objects rather than actions, and data rather than logic. It is ever-present and it is very unlikely a candidate would not have run into it at some point.

Here are ten examples of terms they should be able to define:

  • class, object (and the difference between the two)
  • method (as opposed to, say, a C function)
  • virtual method, pure virtual method
  • class/static method
  • static/class initializer
  • constructor
  • destructor/finalizer
  • superclass or base class
  • subclass or derived class

NB. Some firms avoid OOP and prefer to use a functional programming (FP) language such as Clojure.

question badge

Please explain big-O notation in the simplest terms.

answer badge

Big-O notation (Landau’s symbol) is used in computer science to describe the performance or complexity of an algorithm.

Candidates should be able to demonstrate a basic understanding of the fundamentals of big-O algorithmic complexity analysis.

They should know that algorithms usually fall into the following performance classes:

  • Constant-time
  • Logarithmic
  • Linear
  • Polynomial
  • Exponential
  • Factorial

They should also be able to explain why a given operation falls into a particular complexity class.

* There is more to interviewing than tricky technical questions, so these are intended merely as a guide. Not every “A” candidate worth hiring will be able to answer them all, nor does answering them all guarantee an “A” candidate. At the end of the day, hiring remains an art, a science — and a lot of work.
Submit an interview question
Submitted questions and answers are subject to review and editing, and may or may not be selected for posting, at the sole discretion of Toptal, LLC.
All fields are required
Thanks for submitting your question.
Our editorial staff will review it shortly. Please note that submitted questions and answers are subject to review and editing, and may or may not be selected for posting, at the sole discretion of Toptal, LLC.
Looking for Software Engineering experts? Check out Toptal’s software developers.
Charles Cook, Ph.D.
United States
Charles has a Ph.D. in aerospace engineering and spent three years developing custom data processing and analysis programs for NASA. He specializes in scalable, enterprise-level application development and engineering solutions for exceptionally high throughputs. He is also the founder and owner of GreatVocab.com, for which he developed the core system using novel concepts in data analysis and control theory.
Anne Adams
United Kingdom
Anne is an experienced developer who has worked both for large corporations and startups. After building financial trading applications for eight years as an engineer at Merrill Lynch, Anne founded and built LoudUp, a music-based social network that she designed, developed, and launched from the ground up. She specializes in .NET technologies and JavaScript.