How to find your dream tech internship
A graduate software engineer and two-time intern shares his experience
If you are a student planning a career in technology, you probably need no convincing over the value of internships. Internships allow students to gain professional experience, network with professionals, and earn money over the summer break. They can also be great fun, if you find a company that matches your values and style of working. As a two-time intern and a current graduate software engineer at Thought Machine, I wanted to share my experience to help you find the perfect internship! I also chatted with my colleague Danielle who works as a recruiter, who shared her knowledge from the other side of the hiring process.
Not every company hires interns, but the ones that do usually have several reasons to do so. Firstly, while interns do not have the experience full-time employees have, they are genuinely useful members of the team. In Thought Machine, interns are welcomed with open arms, and treated as any other employee would be. Depending on company, interns may work on their own, largely self-contained projects, or as an ordinary member of a team of engineers. Both approaches have their pros and cons: project-based internships allow the intern to experience the full lifecycle of a software project in one summer, and usually finish with a major deliverable that is easy to show in a CV. On the other hand, working as an ordinary member of a software team gives the intern more realistic insights into what software development is really like and helps them develop their communication and teamwork skills. The second main reason to hire interns is to help the company funnel candidates for their graduate program. Top graduates are often in short supply, and it is no secret that successful interns are likely to receive graduate offers from the company. In addition, great talent knows great talent, and a happy intern is likely to inspire their friends to apply for the company as well. And while interns require mentoring to flourish, mentoring a new employee is often the first step experienced software engineers take in their path towards leadership roles.
How does the process of finding an internship work in practice? In general, you have two main challenges you need to pass: getting an interview, and passing the interviews. This may sound plain obvious, but it helps to separate the two, as they require different skills and groundwork. To get an interview, you usually have two avenues: applying through a job posting and passing a CV screening or being referred for the position by someone within the company. Unfortunately for candidates, the first approach is extremely competitive. Top companies receive thousands of applications from keen students — does your CV stand out from the crowd?
When writing your CV, it is important to keep the document short, simple, and focused — two pages at most. What to include in a CV depends on your individual past and achievements, but you probably want to list your education at the top, followed by work experience (if you have any), personal projects, extracurricular activities and skills. You should include experience that is not directly related to technology as well — add the part-time jobs and committee positions in student clubs! Whatever you choose to include in your CV, make sure it is as easy and quick to read as possible — recruiters are busy and can only spend limited time reading each document. For a programming project for example, you should add a title, brief description and a list of technologies used. I personally highlight all language and framework names to make sure they catch the recruiter’s eye. Danielle also likes seeing a link to the project if its hosted online, as well as the year it was developed.
Besides direct applications, there exists a second, more elusive, way of getting hired. Recruiters are often looking for great candidates on their own, and with a bit of luck you might be contacted by them directly! Alternatively, if you have managed to network with a current employee of a company hiring interns, they may be able to refer you to their hiring team. These methods usually let you skip the competitive CV review step and go directly into interviews. If you want to be contacted by recruiters, they first need to know who you are — you will need to start marketing yourself! Your biggest asset will be your LinkedIn profile: LinkedIn is an industry standard for candidate sourcing, and where Danielle finds most of the candidates she contacts. Make sure you fill out all relevant sections in your LinkedIn profile, and go ahead and follow the profiles of companies and organisations you are interested in. Posting, commenting, and liking posts regularly also helps with visibility if you feel comfortable doing so.
Besides making your profile more visible, you can also take a proactive approach and connect with interesting LinkedIn users directly. While adding a total stranger can seem intimidating, people are surprisingly open to connection requests, especially when coupled with a message targeted to the specific person. It also helps if you have something in common with the person you are contacting — I would be more likely to accept a connection request from a student studying in my old university, for instance. LinkedIn tends to be quite informal and you should not overthink what to write as your initial message. Building a network serves two purposes: it makes you more visible to other people and increases the likelihood of being referred to a position in one of your connections’ companies. And even if sending connection requests to people you do not know may feel scary, what is the worst that could happen?
After following the above tips, you have hopefully managed to score at least a few interviews. What now? While the exact interview process for interns varies by company, it often includes both technical and non-technical aspects. In technical interviews, the company wants to assess your programming and problem-solving skills. Besides these, companies will assess your “soft skills”, which includes communication, teamwork, friendliness etc., and “culture fit” which means whether the interviewers think the company would be a good fit for your personality. These may be assessed in a separate, non-technical interview through behavioural questions, or as a part of the technical interviews. Behavioural questions feature topics such as leadership, teamwork and taking feedback, and you should try to answer them using the well-known STAR framework. These days, companies such as Palantir, Google and us at Thought Machine have mostly stopped asking behavioural questions, rather preferring to measure soft skills through your performance in technical interviews. You should not underestimate the importance of culture fit, as it is often just as important as the technical side. The best way to demonstrate culture fit is to be friendly to your interviewers. You can also look up the company’s own description of their culture and values (which is usually written in their website) and try to highlight aspects of them in your answers. As an example, a company that lists “culture of learning” in their values will want to hear if you are learning any new skills besides your studies.
You should start preparing early for your technical interviews. Almost every company asks algorithmic questions as part of their hiring process, in which you need to design an algorithm to solve a problem. These questions aim to test a candidate’s programming ability, problem solving skills, and the ability to transform verbal requirements into code. Practice these questions using online platforms such as HackerRank. In my experience, the most important algorithmic topics to practice (at the time of writing) are array manipulations and breadth- and depth-first searches (usually involving graphs). Do not obsess over being able to solve every challenge: at some point, it’s better to focus on your own programming projects and learning new things over getting better at interviewing.
You could face algorithmic interviews in two stages: as a “coding challenge” or take-home test which you can do any time on your own, or face-to-face with an interviewer (which could be in-person or remotely). Online coding challenges are usually timed and focus on passing predetermined test cases, so you should focus on writing a solution quickly. It can still be useful to think the problem through in your mind or on pen and paper before writing any code though: oftentimes designing the algorithm is harder than implementing it in code.
Face-to-face interviews are different: the interviewer is most interested in learning how you approach the problem. You may not even be expected to write working code. It is often useful to start by describing a simple version of the problem, perhaps by drawing each step required to solve it in a specific input on a whiteboard. You should then start thinking about methods of solving it. Interviewers usually like hearing candidates describe several strategies for solving problems. If you can see a brute-force strategy in solving it, no matter how simple or stupid it seems, talk about it, and explain why it should be rejected. Don’t be afraid of talking too much! If you are struggling, keep discussing the problem aloud. Your interviewer will likely try and guide you towards the solution by asking leading questions (“What if we tried treating X as a graph?”, “Are you sure Z is correct?”). Don’t be worried of “needing” hints: being able to take a hint shows good communication skills!
Companies may also ask you systems design questions, in which you’re asked to produce a high-level design for a technology product. To prepare for these these, try to learn about the main software components of common applications. For example, you could be asked to design a web application (I was once asked to design a WhatsApp clone). You should first consider what the program needs to be able to do (e.g. send messages between users), and start listing out requirements. I like to do this by listing what data needs to be stored and transmitted. Once again, it is important that you consider different solutions and assess their benefits and costs. For my example, what happens if a message is sent to a user who is currently offline? Is it stored in a user-specific queue in the server’s memory, or in a database table? Should message history be stored in the server, or in the user’s own devices? You should also consider the scale the application needs to be able to handle — interviewers often mention the expected number (and geographic location) of users, which should affect how you design your system. If this sounds intimidating, don’t worry — as a junior you aren’t expected to know everything and give perfect answers. Companies are most interested in seeing how you evaluate the benefits of different approaches, and whether you can apply your knowledge of software systems to a new and vaguely defined problem.
The final type of technical question you might run into is the debugging task, in which you will write code in a realistic environment, often to fix a bug in the system or to add a new feature into it. Start by reading the instructions and getting to know the codebase. Do not just rush into coding, but don’t take too long either. Next, think of testing. Does the code have tests? Are they failing? Should you write new tests before doing the coding change? After this, just proceed as you normally would in coding. Make sure you focus on code quality as much as speed: this is not an algorithmic question where only speed and correctness matters. Your interviewer is posing this exercise because they want to test if you can write good, testable and understandable code.
Applying for any job can be stressful, especially if it’s your first time through the process. Make sure you take time off your applications. Because you’ll be likely applying to many different companies, I’d recommend you to track the status of your applications in some way. I used an Excel spreadsheet, but other methods such as Trello boards or Word documents work just as well. I would also recommend making a list of companies you’d be interested in applying to even before they open up applications to make sure you don’t miss out. In addition, do talk about your internship hunt with your friends who are also looking for positions: besides peer support, you can get helpful tips, and hear about interesting companies you didn’t know before. And while my blog post is a good introduction to internship hunting, the famous book Cracking the Coding Interview by Gayle Laakmann McDowell goes far deeper into the process than I have time (or knowledge for). I recommend you read it. Best of luck for your search!
Thanks to Danielle Lewis for discussing the topic with me, and Danielle and Yanhua Xu for reading drafts of this.