Ali Zaini

Internship/Graduate Software Engineer Application Guide

Computer Science

University

Internships

Work


March 11, 2023



Note: I initially wrote this November 2021 after I recieved multiple job offers and stopped my hunt after accepting Palantir. I hadn't actually started the job yet, but still wrote this guide to outline my process at the time. I may come back to update every this in the future.

This guide provides insights for finding and applying to technical and non-technical job interviews, as well as preparing for them, selecting an offer, and more.

How to Find Companies and Keep Track of Your Applications

During my second year of university, I applied for every internship role I could find. I kept track of all of them on a spreadsheet, including companies that were no longer accepting applications. I started applying relatively early, around September-October, and kept applying until January/February. I received three good offers from this effort.

During the summer after my second year, I performed well during my internship and received a return graduate offer. However, I continued to apply to other companies. This time, I started even earlier in August and applied to companies as they opened their positions. I was able to use the same list I had compiled during my internship search. I received four offers before cancelling all my other interviews and stopped applying. Despite this, I still had interview invitations from top companies including two FAANGs and HFT.

This guide will cover the specifics of how I prepared, applied, and chose my offers.

Creating the Spreadsheet

I created a simple spreadsheet with columns for company names, a LinkedIn contact, the name of the role, whether or not I had applied for the role, and any extra notes I had for it. The final column is just an update for that application process or notes about the interview process.

Finding the Companies/Roles

I found companies from a variety of sites. Here's a list from best to worst (although they're all decent):

  • Google Jobs/Careers
  • LinkedIn (tied for first, to be honest)
  • University Career Site
  • Gradcracker/RateMyPlacement
  • AngelList

There are other common sites like Indeed/Monster, but I didn't use them. I always applied directly on the company's site if possible, rather than through the links on these job sites.

How to Create a Strong Application

Here are some things that can help you make a good, high-quality application. While you don't necessarily need to include all of these things, taking the time to sort them out shows that you're serious about your application.

General Tips

Look at what other people do and learn from their examples. Find great LinkedIn profiles, resumes, or websites and try to emulate what they're doing and why their profiles seem great.

Before you start working on your application, make a list of everything you've ever done. Go through everything you've accomplished in high school, college/6th form, and university, even if they're minor. This includes any competitions you've been in, volunteer work, and projects, but work experience and projects are the most important.

Make sure you have a professional email address. Something like "xXnarutoKiller496Xx@hotmail.co.uk" won't look good. Try to get an email address with your first and last name, such as "firstnamelastname@outlook.com" or something similar (it doesn't have to be Outlook).

Be proactive and try to figure things out yourself before asking for help. Search subreddits for answers to your questions before making a new post (but still make a new post if the question has been asked, but approach it from a different angle).

LinkedIn

Create an account and follow LinkedIn's suggestions to make your profile stand out.

Connect with everyone you know, even if you only know them a little. Seek out new graduates and interns at companies you want to work for and connect with them, especially if you went to the same university.

LinkedIn is a valuable platform that offers some benefits, including:

  • Contacting recruiters. You can ask them questions about when their roles are opening, which roles are suitable for you, and interview advice/structure.
  • Contacting people in the roles you want. The search tool is excellent, allowing you to filter by companies and schools and find people who will be useful to you. People on LinkedIn are generally friendly and willing to answer questions.
  • Many companies post job listings on LinkedIn and also make general posts about events and news, which can be useful. Attending a company event or reading about a new feature in a post is something you can bring up in interviews.

Resume/CV

There are many poorly written CVs out there, and I'm not sure why. Perhaps some people have an idea of what a CV is supposed to look like and create one without ever searching online for examples.

To keep this section brief, search online and on this subreddit for software engineer CV examples. You can even search for examples specifically for new grads/interns.

Once you've read through many examples and understand the types of information you should include, start creating your own CV. The most important part is to use a template. I've seen many unattractive CVs, so keep it simple and use something like this. You can also view mine here.

Personal Website/Portfolio/GitHub

A portfolio is a website where people can view your work. Typically, this is in the form of GitHub or a personal website. I have both and suggest you do too if it's relevant.

I think it's a bad look when a CS student or someone applying for a SWE role doesn't even have a GitHub account. You should have one, and it should showcase all your interesting projects. Consider having a nice username (such as your name), as it reflects well on you.

I used my personal website to showcase projects in a unique way. I included links and descriptions of my projects, and I also made sure that my website itself was stylish and impressive.

Some people say that having a portfolio is unnecessary because no one checks them. Although this is true for the most part, I have had multiple interviews where they have opened up my GitHub or personal website and asked me about my projects. I've also been able to direct them to links on my CV during virtual interviews, which has been very helpful.

Cover Letters

I have never used cover letters and probably never will. I don't feel like writing one. Although I might consider it in the future, I've noticed that most big tech companies don't even require them (but banks do). I would rather submit more applications than spend time writing a cover letter.

If an application requires a cover letter, I usually upload my CV again. I don't think it's a big deal, and I did this for one of the companies that still offered me a new graduate position.

How to Prepare for Online Assessments/Technical Interviews

What are They?

Technical interviews are usually the first step in getting a job offer. Typically, you’ll apply for a company online and then receive a coding challenge, which then leads into a technical interview, or go directly into a technical interview.

These online assessments and technical interviews have similar styles of questions, but the expectations between the two are different.

For both:

  • Learn data structures and algorithms (more about that later).
  • Practice LeetCode-style questions.
    • Practice on LeetCode, HackerRank, and CodeSignal.
    • Don’t know where to start? Try this: https://www.hackerrank.com/interview/interview-preparation-kit.
    • You may struggle when you first start. Try to do popular easy LeetCode questions and ALWAYS read the solutions and “Discuss” section for every question you do. Even if you found the question easy, you might learn something extra.
    • Consider keeping a list of each question you found difficult so you can come back to it and learn from it.
    • Your goal should be to be able to start working through the “Blind 75” questions, which are a list of popular questions that teach you a ton of the core patterns: https://leetcode.com/discuss/general-discussion/460599/blind-75-leetcode-questions (skip Binary IMO).
    • Watch YouTube videos of people going over the problems (NeetCode is a pretty good channel for this).
  • Use online resources to find common questions from those companies.
    • Search on Reddit, Glassdoor, and LeetCode Discuss to see other people’s experiences interviewing at companies.

For OA:

  • Speed is important, and practice makes perfect. There are many online resources available for practice, so I don't have much more to add.

For technical interviews:

  • Again, there is a lot of advice available online, but here are a few more things to consider:
  • Work with the interviewer and ask for their feedback on your different ideas.
  • Hold off on coding for as long as possible. Talk extensively with the interviewer and always ask before you start coding. See if they think your approach/idea makes sense.
  • Write your ideas as a comment or list if there is a code editor.
  • Know your programming language and be able to demonstrate that knowledge. For example, if you are coding in Python and need to use a dictionary, show that you know what a defaultdict is and how to use it. It's not that impressive, but you'd be surprised how many people don't know basic things about the languages they use. This can help set you apart.
  • Never stop talking. Keep discussing your ideas while you code, and explain every little thing. For example, "I'm writing this if statement to check if the last element matches X" - whatever it may be, just keep talking. If you need to, practice this skill.

Non-Leetcode Style Questions

Technical interviews often include questions that aren't Leetcode-style, and may not even be technical. Here are some questions for which you should prepare responses:

  • Tell me a bit about yourself/introduce yourself.
    • Provide your name, education, and some information about what you've done/are currently doing.
    • For example: "My name is Bobby Smith, and I'm a second-year computer science student at the University of Tech. I'm also the head of the Computing Society there. I enjoy working on writing game engines, and I've been working on my own game engine for the past few months."
    • If possible, link this information to the company you're interviewing for.
  • Why do you want to work here?
  • What keeps you motivated? Why do you enjoy programming?
  • Give an example of when you took on a leadership role.
  • How do you prioritize tasks?
  • What is your greatest weakness?
    • Be honest about a real weakness, but show that you're working to improve in that area.
  • Discuss a project from your CV.
  • Explain the four pillars of OOP and what OOP is.
    • Some companies may want to discuss every aspect of OOP, including APIE and other concepts.
    • Use examples to help explain.

At the end of the interview, you will likely be given the opportunity to ask questions. Try to ask 1-2 questions.

Example questions:

  • Can you tell me about the most challenging project your team has worked on recently and how you overcame any obstacles?
  • What opportunities are there for continuing education and growth within the company?
  • How does the company approach collaboration and communication within and across teams?
  • Can you describe the product development lifecycle and how the engineering team fits into it?
  • How does the company approach diversity and inclusion, and what initiatives are in place to support it?
  • How is performance evaluated and what opportunities are there for recognition and advancement?
  • Can you tell me about the biggest technical challenge the company is currently facing?

How to Prepare for Non-Technical Interviews

Non-technical interviews, often conducted by HR, are usually the final stage in the interview process. Because they are standard, you can find a lot of advice online. Here are some additional tips:

  • Use Glassdoor to find common questions.
  • Keep track of the questions you're asked in interviews and use them to prepare for your next interview.
  • Try to be relaxed and have a conversational tone during the interview (if the interviewer doesn't follow suit, it's not your fault, it's theirs 😊).
  • Use the STAR method to respond to most questions.
  • Ask questions at the end.

How to select an offer

If you’re in the fortunate position of having multiple simultaneous offers, congrats! If you have one that you really like above the others, lucky you! It should be an easy decision.

If you’re not sure which offer to go to, here are some things to consider:

  • Pay/compensation: make sure you're satisfied with the salary or compensation package being offered.
  • Job title: ensure you understand the role and responsibilities that come with each offer. Ideally something like "Software Engineer/Developer"
  • Company size: decide if you'd prefer to work for a larger or smaller company, as this can affect your work environment and career opportunities.
  • Learning potential: consider how much you can learn from each opportunity, including training and development opportunities.
  • Name recognition: assess the reputation and brand of each company, which can affect your career prospects and opportunities.
  • Internship duration: determine how long each internship is to ensure it aligns with your goals and schedule. I chose FactSet over Sky and MathWorks because Sky was too short and MathWorks was too long.
  • Likelihood of a return offer: research whether the company is known for offering full-time employment after an internship.
  • Tech stack/team: evaluate the technologies and team you'll be working with to ensure they align with your interests and career goals. I wasn't a fan of the team/technology I got for my MathWorks offer.
  • Interview experience: consider how much you liked the people you interviewed with, as this can indicate the company's culture and work environment. Had a bad experience with one interviewer at JP Morgan, but another interviewer was really nice.

How to prepare for the internship/new grad role

Well I haven’t started my new grad role yet, so I’ll welcome any advice, but for my internship, I didn’t do much to prepare other than think a bit about what I wanted to get out of the internship, which was mainly to learn about what it’s like to be a SWE at a real company and to write some code and hopefully learn some new tech, which I did.

What to do during and after the internship

During your internship:

  1. Connect with fellow interns: Take the opportunity to get to know other interns, and build relationships with them. You can learn from each other and have a support system during your internship.
  2. Communicate with your managers: Keep your managers informed about your progress, ask questions when you need help, and seek feedback on your work. This can help you improve and make a positive impression.
  3. Learn new skills: If you need to learn new skills or technologies, seek out tutorials or other resources to help you. You can also work on your own time to practice and develop your skills further.
  4. Participate in team meetings: Even if the topics being discussed are not directly related to your work, try to contribute if you have something to add. It can show your interest and engagement in the team's work.
  5. Document your work: Keep a record of the work you do and the progress you make. This can be useful when reflecting on your experience or when discussing your contributions during future job interviews.

After your internship:

  1. Connect on LinkedIn: Reach out to everyone you worked with during your internship on LinkedIn and thank them for the experience. Building professional relationships can be beneficial in the future.
  2. Consider a return offer: If you enjoyed your internship and the company, consider a return offer. However, never accept an offer on the spot. Always say you need to discuss it with family and get back to them later. This gives you time to think.