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:
- 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.
- 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.
- 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.
- 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.
- 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:
- 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.
- 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.