Itâs often frustrating to see good candidates coming to a technical interview without any preparation, or without any context about the position. Although a lot of technical skills require years of experience to master, there are a few areas that you can expect to cover in an interview according to your level of seniority. If you know whatâs coming, youâll be able to set yourself up well, and improve the impression you make at the interview. Letâs take a look at them.
Iâve been involved on the hiring side of the technical interview process for 15 years. Technical job interviews can be daunting, especially if you are new to interviews, are looking to move into a more senior position, or are looking to move into a different tech stack. There will usually be more than one interviewer, and itâs likely that at least one senior interviewer will have more experience than you do.
But from my experience, knowing what to expect can help you reduce your anxiety, help you show your true potential, and help you feel more comfortable throughout the process.
Technical interviews arenât just about assessing your technical skills; as someone being interviewed, itâs important to understand what these are so that you know what answers theyâre looking for at each point.
The first objective of an interview is - for the want of a better phrase - to âget the lay of the landâ, and to test your soft skills. The interviewer wants to find out:
- Have you done your homework?
- Do you know what youâre getting into?
- Who you are as an individual, and whether youâll be a good culture fit for the team and organisation
- Your ability to work under pressure and keep a cool head
- Your ability to communicate with the team
Soft skills are something you need to develop into good habits in every aspect of life, and is not something I will cover in this article.
The interview process then shifts focus and turns to your cold, hard skills:
- Your previous experience and education
- Your ability to demonstrate real understanding and mastery of languages and technologies
- Your ability to solve problems under pressure
When applying for high-end positions in software, even if your watercooler small-talk, your dress code, and your table manners are flawless, itâs the second part of the technical interview that will determine if someone gets the job or not.
Considering that every interview will be different from the next, itâs hard to predict what will be ârightâ and âwrongâ for your situation.
Instead, what Iâm trying to do with this article is to present the common themes that technical interviewers look for with regards to those âhardâ skills. Letâs take a look at some areas you should be comfortable with, and some things not to do:
The âhardâ skills: What to know
Once youâve proven that youâre a ânice guyâ and a dependable team-player during the earlier stages of the interview process, technical interviewers will, invariably, move on to probe your skills and experience as a professional software developer.
More than anything, demonstrating your skill will differentiate you from the crowd, and will also convince the interview panel of your level of seniority.
That said, it can be hard to know what skills need to be demonstrated. Iâve broken down a few areas that Iâve learned most interviewers will be looking for:
- Basic computer science skills
- Supporting disciplines and software engineering processes
- Senior skills
- Skills for positions requiring Design and Architecture experience
#1: Basic computer science skills
Even if you didnât study a CompSci degree at university, your chances at impressing at your interview are much higher if youâre more than comfortable with the basics. Youâll not only be able to focus on the more advanced questions and topic areas later on, but youâll also put yourself in a better frame of mind. The kinds of things an interviewer might ask about include:
Data structures: Picking the right tool for the job shows skill. So, you should aim to understand why specific structures are better suited to certain tasks. All modern languages have a full spectrum of tools such as Arrays, Sets, Bags, Queues, Stacks, Maps and Binary Trees - but when do you use each one?
Language constructs: In addition to ensuring that you know your âhomeâ languages well, take time to understand constructs in languages that you might not be familiar with. Itâs no secret that modern computer languages plagiarise new, useful features from each other, and being familiar with a range of them will help to deal with anything that is thrown at you.
Object Oriented Programming: This is still the go-to paradigm in 2019. Although the academic nature of the original âThree Amigos of OOâ has somewhat waned over time, Uncle Bobâs SOLID paradigm is as important as ever, especially when building code which is robust, decoupled, and most importantly, testable.
Algorithmic time and memory complexity: Knowledge of Big O complexity will gain you a lot of respect when dealing with performance computing. Being able to explain the complexity of nested loops, collision-free hashmap lookups, and common sorting algorithms will gain you a lot of credibility.
Memory allocation and use: Although most modern languages provide garbage collection, it is still important to understand how memory is allocated and used. Be able to explain concepts such as value types, reference types, and passing by reference.
#2: Supporting disciplines and software engineering processes
Depending on the company and the role youâre applying for, the interviewer might also be looking for some kind of insight or knowledge about other, supporting disciplines - after all, thereâs more to delivering quality software than just writing code.
Unit, Integration and other Automated Testing: Seal the deal with familiarity with at least one mocking framework, and the knowledge of how to execute the tests into your Continuous Integration build cycle. Many believe that a good developer, during the completion of each new feature, always pays it forward by leaving applicable Unit, Integration or other Automated Tests (e.g. robot testing scripts, such as Selenium) behind in the codebase. This means that the team will be able to sleep peacefully at night knowing that a regression bug hasnât snuck in with the latest feature.
Code Reviews: Developers are human, and humans make mistakes. So, itâs important to stress to the interviewer that you are comfortable with not only subjecting your own code for review, but also willing to review the code of others. Also, be sure that you can genuinely say that you donât take feedback personally.
Familiarity with Agile processes: Knowledge of software development processes, and when and why to use them will give your interviewers the warm feeling that you are used to working in teams, and have respect for the bigger picture. In varying degrees, most modern software is developed using various types of Agile process, and itâs a safe bet that most jobs will require working knowledge of Scrum and Kanban, so spending an hour or so brushing up on Sprint Ceremonies and Retrospective techniques wonât hurt. End user knowledge of tools like JIRA (thereâs a free 7 day trial) is usually a plus.
DevOps, CI/CD and Version Control systems: No software developer will be taken seriously without actively using a version control system, and teams of developers canât be productive without one. Being able to configure and manage Continuous Integration and Deployment tools such as GitLab, TeamCity, Jenkins, or Azure DevOps immediately adds value to any team you join.
And if you have been caught in a time warp, then Git is the one VCS with which you absolutely must get up to speed on. Spend some time understanding (short lived) feature branching, how to merge feature branches into the main development branch(es), and be able to resolve merge conflicts.
#3: More senior skills
In addition to the basics, IT professionals looking to move up the ranks of seniority will be expected to show an understanding of more advanced concepts. If youâre looking for a more senior position, make sure you have opinions on some of the following:
Asynchronous programming: Historically asynchronous programming required ninja skills, but nowadays, almost all modern languages have made asynchronous language features accessible to mortal programmers. So for keeping user interfaces responsive on an App front-end, or by reducing threads to improve cloud-server scalability, make sure you can explain the conveniences of constructs such as async/await, Futures, Promises and Tasks.
Functional Programming (FP): FP used to be in the realm of the academic community, but over time, FP principals have invaded most modern languages. Not only will your prospective employer know that code built along FP principals be more concise and less prone to bugs than imperative code, you will also impress that you have been keeping tabs on advances in modern languages. That said, Java and C# developers will find likely find Scala a more comfortable fit than ML inspired languages like Haskell or F#.
Threading, concurrent programming, thread safety: Although context-switching has been around for ages, now that multi-core processors are cheap and ubiquitous, our desire has grown accordingly to harness parallelism in our programs in order to make them run quicker. Make sure you can explain how to tame evils such as (lack of) atomicity, race-conditions and deadlocks - and bonus marks if youâre able to hold down a conversation on lock-free approaches to concurrency issues, or explain how Amdahlâs law creates diminishing returns!
IoC (Inversion of Control) and Dependency Injection: Not all languages use IoC containers, but one of the features (or side-effects, depending on your point of view) of a well-decoupled SOLID application is the need to pass dependencies around. Your reputation will leap when you explain how IoC fits the Dependency Inversion Principle paradigm. And then wow the interviewers with the casual observation that the container manages not only the resolution of dependencies, but also the ability to manage their lifespans. Boast how you managed to build a system without using the new keyword on any dependencies!
Cloud computing: The cloud is already well established, but sadly, for many SA corporates, the move to the Cloud just hasnât happened yet. Thereâs a good chance the company you are interviewing for has moved, or is looking to move into Azure, AWS or GCE. Most of the cloud providers have free trial periods with low-powered VMâs, databases and other offerings, which is an ideal way for you to get some hands-on experience on Cloud VMâs, Networking and Storage. Attending Cloud provider meetups and conferences is also a good way to get access not only to sage advice to further your cloud skills, but also get freebies on their data centres.
Containerisation: Although Docker and Kubernetes dominate this space, make sure you have an opinion of why containerisation is such a popular evolution in virtualisation, and be able to contrast this with Serverless and Hybrid approaches to deployment.
Quantum Computing: What if computers were 1000s of times faster! What would that do to our cryptography? What would that do to Crypto mining? Would it brick gazillions spent on Data Centre hardware overnight? Research some of these, and drop those fact-bombs in your interview. Itâll not only show initiative, but also your desire to learn and stay up to date.
Distributed Ledgers and Blockchains: Thereâs a lot more to blockchain than just cryptocurrencies - many large corporates are taking private (and confidential) distributed ledgers very seriously as a means of certifying the authenticity of transactions. If you have your finger on whatâs going on there, youâll be more likely to hold a conversation if this should come up.
Machine Learning: Perhaps the most frightening future tech of them all. Weâre now able to train networks to solve problems that we couldnât previously adequately describe, nor provide handcrafted algorithms to. If you havenât already done so, the cloud providers have samples of their Cognitive Services online, and if youâre more mathematically inclined, then TensorFlow and R are worth a look. ML is already evolving away from a prototyping and into mainstream software development - donât miss the boat!
#4: Skills for positions requiring Design and Architecture experience
Long gone are the days of needing to build a framework from scratch before any serious software project can start (hooray!). But, as always, it is beneficial to understand why contemporary frameworks are good for us, rather than mumbling âThatâs just the way everyone does itâ in the interview.
Have strong opinions that you can back: I believe that itâs important for software architects to have strong opinions that they are willing to defend. Thereâs no point just regurgitating âservice location is an anti-patternâ or âuse the strategy patternâ - you need to explain why doing so might be a good, or bad idea.
Understand the economics of the situation: In context, it might be quite OK for a 3-day prototype or proof-of-context spike to couple classes via new()
, or to dispatch commands via a switch
statement. But a big part of a software architectâs role is to understand the economics of the situation: Building 100% academically correct software could mean you miss the time-window of getting a product to market. In the race to balance quality versus delivery, some technical debt is inevitable; just make sure that the risks are understood and quantified, and make sure you know when to dig your heels in when the Technical Debt Levels move too high.
Fundamental Design Reading: Undoubtedly, each tech stack will have mandatory reading needed to gain mastery of each framework contained within it, and youâll never be wasting time by investing time in reading books on Kafka integration patterns or Web UX journeys. However, in the more general practice of good software design, patterns, and architecture, the currency of the wisdom of certain authors hasnât depreciated with time. Some which I have found are worth giving extra attention include:
- Donald Knuth
- Gang of Four
- Eric Evans
- Martin Fowler
- And, of course, thereâs Uncle Bob too
The âhardâ skills: What not to do
In closing, Iâve learnt that while it's important to know certain things, it's also important not to do other things. Here's a couple of the instant âturn-offsâ that you need to avoid during the technical interview.
Donât be âmehâ
When asked about your previous roles, saying things like âwe let the junior guy write all the unit testsâ or âonly the Scrum Master knows how to work JIRAâ could be interpreted as being a passenger on the team.
Take ownership, and show that you are motivated, no matter how small the role may have been. For example, âI was responsible for the design, performance and security of the file upload controlâ indicates pride and passion in your work.
Donât give the ânot my problemâ cold shoulder
Not all software projects run smoothly, and throwing your teammates under the bus or leaving someone behind when the going gets tough shows a distinct lack of commitment - the Agile sprint isnât done until all tasks are complete.
Instead of saying âThe UI guy was slow, so we missed our deadlineâ, your new team mates want to hear things like âwe finished the back-end APIs sooner than expected, so I rolled up my sleeves and skilled up on ReactJS so I could help out on the UIâ.
Donât list hot buzzwords on your CV without any experience
No matter how badly you want to acquire a certain skill by joining a company which is a market leader in the field, listing a technology in which you arenât proficient in is asking for trouble. Many interviewers, myself included, make a habit of picking up on jargon.
If youâve listed Neural Nets as a 5 out of 5 on your skill strengths indicator, be prepared to open your interview with âHey, so I see that you are an ML ninja! So, whatâs your opinion on Bayesian posterior inference?â
If you donât know something, just say you donât know - thereâs no shame in not being able to answer every question. If youâve just finished watching your first Pluralsight video on a topic, your depth of experience is a 1 out of 5 at best. In any case, everyone is aware that the breadth of tech today is immense, and itâs impossible to absorb all of it.
Bending the truth wonât just be a deal-breaker for the interview, itâs a reputation breaker which can tarnish your career. Hold your integrity above all else.
And what if the interview still isnât going well?
Unless the job is for a junior position or internship, companies will be looking to hire for exact roles. For example, a front end developer with proven skills in Angular, a cloud-integration guru specialising in service bus, or a full stack team lead in the .Net stack. Thereâs no point trying to wing this part - you either have the experience, or you donât.
That said, if itâs clear that the interview isnât going well and your experience doesnât match up to the companyâs expectations, donât give up - try to go the distance. It could well be that thereâs another available position that is more suited to your skill-set available.
You wonât know that, however, if you donât try.
Stuart Corrans is the CTO of Galena Hill Systems LLC, a Nevada-based startup in the financial services sector. Theyâve just launched arene.io, a Cloud-based accounting analytics and collaboration platform, which uses Microsoftâs Azure Blockchain technology to certify the integrity of the data acquired by its users.
Stuart has over 25 years of experience in the software development industry, and has been involved in the technical recruitment process for many of the 30 or so companies that he has worked for. Stuart lives by the mantra : Learn something new everyday, and is a frequent lurker at Meetup groups in and around Cape Town.